BIE |
/home/weinberg/src/BIE/include/Tessellation.h00001 // This is really -*- C++ -*- 00002 00003 #ifndef Tessellation_h 00004 #define Tessellation_h 00005 00006 #include <string> 00007 #include <iostream> 00008 00009 #include "Tile.h" 00010 #include "Node.h" 00011 #include "RecordInputStream.h" 00012 00013 #include "Serializable.h" 00014 00015 00016 using namespace std; 00017 00018 namespace BIE { 00019 00021 class twodcoords: public Serializable 00022 { 00023 00024 public: 00026 twodcoords(){}; 00027 00029 twodcoords(double px, double py): x(px), y(py){} 00030 00032 double x; 00033 00035 double y; 00036 00037 // AUTO GENERATED BY ../persistence/autopersist.py 00038 private: 00039 friend class boost::serialization::access; 00040 template<class Archive> 00041 void serialize(Archive & ar, const unsigned int version) { 00042 this->pre_serialize(ar, version); 00043 try { 00044 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Serializable); 00045 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00046 } 00047 try { 00048 ar & BOOST_SERIALIZATION_NVP(x); 00049 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00050 } 00051 try { 00052 ar & BOOST_SERIALIZATION_NVP(y); 00053 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00054 } 00055 this->post_serialize(ar, version); 00056 } 00057 00058 }; 00059 00060 //+ CLICLASS Tessellation 00062 class Tessellation: public Serializable { 00063 00064 public: 00066 Tessellation() {}; 00067 00069 virtual ~Tessellation() {}; 00070 00072 virtual Tile* GetTile(int tileid); 00073 00075 virtual void FindAll(double x, double y, vector<int> &found); 00076 00080 virtual vector<int> GetRootTiles() = 0; 00081 00084 virtual vector<Node*> GetRootNodes() = 0; 00085 00086 //+ CLIMETHOD bool IsValidTileID int 00088 virtual bool IsValidTileID(int tileid); 00089 00090 //+ CLIMETHOD int MinID 00092 virtual int MinID() { return 0; } 00093 00094 //+ CLIMETHOD int MaxID 00097 virtual int MaxID() { return NumberTiles() - 1; } 00098 00099 //+ CLIMETHOD int NumberTiles 00101 virtual int NumberTiles(); 00102 00105 void PrintPreOrder(vector<Node*> rootnodes, ostream & outputstream); 00106 00108 void PrintPreOrder(ostream & outputstream); 00109 00111 void GetLimits(double &x1, double &x2, double &y1, double &y2) 00112 { 00113 x1 = Xmin; 00114 x2 = Xmax; 00115 y1 = Ymin; 00116 y2 = Ymax; 00117 } 00118 00119 protected: 00121 double Xmin, Xmax; 00122 double Ymin, Ymax; 00123 00125 map<int, Tile*> _tiles; 00126 00128 int Ntiles; 00129 00131 void PrintPreOrder(Node *tree, ostream & outputstream); 00132 00134 void findall(double, double, vector<int>&, Node*); 00135 00138 void compute_sampling (RecordInputStream *, vector<twodcoords>*, 00139 double pts, double minx, double maxx, double miny, double maxy); 00140 00142 struct compx 00143 { 00145 bool operator() 00146 (const twodcoords &a, const twodcoords &b) const 00147 { return a.x<b.x; } 00148 }; 00149 00151 compx compX; 00152 00154 struct compy 00155 { 00157 bool operator()(const twodcoords &a, const twodcoords &b) const 00158 { return a.y<b.y; } 00159 }; 00160 00162 compy compY; 00163 00165 struct compxy 00166 { 00168 bool operator()(const twodcoords &a, const twodcoords &b) const 00169 { return a.x == b.x && a.y == b.y; } 00170 }; 00171 00172 00174 struct hashCoords 00175 { 00177 size_t operator()( const twodcoords &a) const 00178 { 00179 size_t res = 0; 00180 size_t len = sizeof(a); 00181 const char* p = reinterpret_cast<const char*>(&a); 00182 while (len--) res = (res<<2)^*p++; 00183 return res; 00184 } 00185 }; 00186 00187 // AUTO GENERATED BY ../persistence/autopersist.py 00188 private: 00189 friend class boost::serialization::access; 00190 template<class Archive> 00191 void serialize(Archive & ar, const unsigned int version) { 00192 this->pre_serialize(ar, version); 00193 try { 00194 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Serializable); 00195 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00196 } 00197 try { 00198 ar & BOOST_SERIALIZATION_NVP(Xmin); 00199 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00200 } 00201 try { 00202 ar & BOOST_SERIALIZATION_NVP(Xmax); 00203 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00204 } 00205 try { 00206 ar & BOOST_SERIALIZATION_NVP(Ymin); 00207 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00208 } 00209 try { 00210 ar & BOOST_SERIALIZATION_NVP(Ymax); 00211 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00212 } 00213 try { 00214 ar & BOOST_SERIALIZATION_NVP(_tiles); 00215 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00216 } 00217 try { 00218 ar & BOOST_SERIALIZATION_NVP(Ntiles); 00219 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00220 } 00221 this->post_serialize(ar, version); 00222 } 00223 00224 }; 00225 00226 } // namespace BIE 00227 BIE_CLASS_TYPE_INFO(BIE::twodcoords) 00228 BIE_CLASS_EXPORT_KEY(BIE::twodcoords) 00229 BIE_CLASS_EXPORT_KEY(BIE::Tessellation) 00230 #endif Send suggestions, questions, and feedback to WEINBERG at ASTRO dot UMASS dot EDU. Documentation generated at Fri Mar 26 00:35:11 2010 by
|