00001
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 #ifndef CLIPPER_CONTAINER_MAP
00046 #define CLIPPER_CONTAINER_MAP
00047
00048
00049 #include "container_types.h"
00050 #include "nxmap_operator.h"
00051
00052
00053 namespace clipper
00054 {
00055
00057
00058 template<class T> class CXmap : public Container, public Xmap<T>
00059 {
00060 public:
00062 CXmap() {}
00064 CXmap( Container& parent, const String name = "" );
00066 void init( const Spacegroup& spacegroup, const Cell& cell, const Grid_sampling& grid_sampling );
00068 void update();
00069 };
00070
00071
00073
00076 template<class T> class CNXmap : public Container, public NXmap<T>
00077 {
00078 public:
00080 CNXmap() {}
00082 CNXmap( Container& parent, const String name = "" ) :
00083 Container( parent, name ) {}
00084 };
00085
00086
00088
00091 template<class T> class CNXmap_operator : public Container, public NXmap_operator<T>
00092 {
00093 public:
00095 CNXmap_operator() {}
00097 CNXmap_operator( Container& parent, const String name = "" );
00099 CNXmap_operator( Container& parent, const String name, const NXmap<T>& nxmap, const RTop_orth& nxop = RTop_orth(RTop<>::null()) );
00101 void init( const Cell& cell, const Grid_sampling& grid, const NXmap<T>& nxmap, const RTop_orth& nxop );
00103 void update();
00104 private:
00105 const NXmap<T>* nxmap_;
00106 RTop_orth nxop_;
00107 };
00108
00109
00110
00111
00112
00120 template<class T> CXmap<T>::CXmap( Container& parent, const String name ) : Container( parent, name )
00121 {
00122 init( NullSpacegroup, NullCell, NullGrid_sampling );
00123 }
00124
00125
00132 template<class T> void CXmap<T>::init( const Spacegroup& spacegroup, const Cell& cell, const Grid_sampling& grid_sampling )
00133 {
00134
00135 const Spacegroup* sp = &spacegroup;
00136 const Cell* cp = &cell;
00137 const Grid_sampling* gp = &grid_sampling;
00138
00139 if ( sp->is_null() ) sp = parent_of_type_ptr<const Spacegroup>();
00140 if ( cp->is_null() ) cp = parent_of_type_ptr<const Cell>();
00141 if ( gp->is_null() ) gp = parent_of_type_ptr<const Grid_sampling>();
00142
00143 if ( sp != NULL && cp != NULL && gp != NULL )
00144 if ( !sp->is_null() && !cp->is_null() && !gp->is_null() )
00145 Xmap<T>::init( *sp, *cp, *gp );
00146 Container::update();
00147 }
00148
00149
00153 template<class T> void CXmap<T>::update()
00154 {
00155 if ( Xmap_base::is_null() )
00156 init( NullSpacegroup, NullCell, NullGrid_sampling );
00157 else
00158 Container::update();
00159 }
00160
00161
00165 template<class T> CNXmap_operator<T>::CNXmap_operator( Container& parent, const String name ) : Container( parent, name ), nxmap_( NULL ), nxop_( RTop_orth::null() ) {}
00166
00167
00174 template<class T> CNXmap_operator<T>::CNXmap_operator( Container& parent, const String name, const NXmap<T>& nxmap, const RTop_orth& nxop ) : Container( parent, name ), nxmap_( &nxmap ), nxop_( nxop )
00175 {
00176 init( NullCell, NullGrid_sampling, NXmap<T>(), RTop_orth::null() );
00177 }
00178
00179
00187 template<class T> void CNXmap_operator<T>::init( const Cell& cell, const Grid_sampling& grid_sampling, const NXmap<T>& nxmap, const RTop_orth& nxop )
00188 {
00189
00190 const Cell* cp = &cell;
00191 const Grid_sampling* gp = &grid_sampling;
00192
00193 if ( cp->is_null() ) cp = parent_of_type_ptr<const Cell>();
00194 if ( gp->is_null() ) gp = parent_of_type_ptr<const Grid_sampling>();
00195 if ( !nxmap.is_null() ) nxmap_ = &nxmap;
00196 if ( !nxop.is_null() ) nxop_ = nxop;
00197
00198 if ( cp != NULL && gp != NULL & nxmap_ != NULL )
00199 if ( !cp->is_null() && !gp->is_null() && !nxmap_->is_null() )
00200 NXmap_operator<T>::init( *cp, *gp, *nxmap_, nxop_ );
00201 Container::update();
00202 }
00203
00204
00208 template<class T> void CNXmap_operator<T>::update()
00209 {
00210 if ( NX_operator::is_null() )
00211 init( NullCell, NullGrid_sampling, NXmap<T>(), RTop_orth::null() );
00212 else
00213 Container::update();
00214 }
00215
00216
00217 }
00218
00219 #endif