Main Page | Modules | Namespace List | Class Hierarchy | Compound List | File List | Namespace Members | Compound Members | File Members | Related Pages

MESH_SceneGraphTypes.h

Go to the documentation of this file.
00001 #ifndef MESH_SCENEGRAPHTYPES_H
00002 #define MESH_SCENEGRAPHTYPES_H
00003 
00004 #include "Platform.h"
00005 
00006 #include <vector>
00007 #include <map>
00008 #include <set>
00009 #include <list>
00010 #include <iostream>
00011 
00012 namespace X3DTK {
00013 namespace MESH {
00014 
00015 template<class A, class B>
00016 struct ConstMapIterator : public std::map<A, B>::const_iterator
00017 {
00018   ConstMapIterator(const typename std::map<A, B>::const_iterator &it) : std::map<A, B>::const_iterator(it) {}
00019   
00020   const B &operator*() const 
00021   {
00022     return (this->std::map<A, B>::const_iterator::operator*()).second;
00023   }  
00024 };
00025 
00026 template<class A, class B>
00027 struct NonConstMapIterator : public std::map<A, B>::iterator
00028 {
00029   NonConstMapIterator(const typename std::map<A, B>::iterator &it) : std::map<A, B>::iterator(it) {}
00030   
00031   B &operator*() const 
00032   {
00033     return (this->std::map<A, B>::iterator::operator*()).second;
00034   }  
00035 };
00036 
00037 class X3DNode;
00038 
00044 typedef X3DNode *SFNode;
00045 
00052 typedef std::list<SFNode> MFNode;
00053 
00054 template<class VData, class EData, class FData, bool readOnly> class SFVertex;
00055 template<class EData, class FData, class VData, bool readOnly> class SFEdge;
00056 template<class FData, class VData, class EData, bool readOnly> class SFFace;
00057 
00063 template<class VData, class EData, class FData, bool readOnly = true>
00064 class EntityMFVertex : public std::vector<SFVertex<VData, EData, FData, readOnly> *>
00065 {
00066 public:
00068   EntityMFVertex();
00070   explicit EntityMFVertex(const std::vector<SFVertex<VData, EData, FData, readOnly> *> &vector);
00071 };
00072 
00073 template<class VData, class EData, class FData>
00074 class EntityMFVertex<VData, EData, FData, false> : public std::list<SFVertex<VData, EData, FData, false> *>
00075 {
00076 public:
00078   EntityMFVertex();
00080   explicit EntityMFVertex(const std::vector<SFVertex<VData, EData, FData, false> *> &vector);
00081 };
00082 
00088 template<class VData, class EData, class FData, bool readOnly = true>
00089 class MeshMFVertex : public std::vector<SFVertex<VData, EData, FData, readOnly> *>
00090 {
00091 public:
00093   MeshMFVertex();
00095   explicit MeshMFVertex(const std::vector<SFVertex<VData, EData, FData, readOnly> *> &vector);
00096 
00098   std::pair<typename std::vector<SFVertex<VData, EData, FData, readOnly> *>::iterator, bool> insert(const std::pair<unsigned int, SFVertex<VData, EData, FData, readOnly> *> &x);
00099 
00101   typename std::vector<SFVertex<VData, EData, FData, readOnly> *>::iterator find(SFVertex<VData, EData, FData, readOnly> *const &element) const;
00102 };
00103 
00104 template<class VData, class EData, class FData>
00105 class MeshMFVertex<VData, EData, FData, false> : public std::map<unsigned int, SFVertex<VData, EData, FData, false> *>
00106 {
00107 public:
00108   typedef NonConstMapIterator<unsigned int, SFVertex<VData, EData, FData, false> *> iterator;
00109   typedef ConstMapIterator<unsigned int, SFVertex<VData, EData, FData, false> *> const_iterator;
00110 
00112   MeshMFVertex();
00114   explicit MeshMFVertex(const std::vector<SFVertex<VData, EData, FData, false> *> &vector);
00115   
00117   SFVertex<VData, EData, FData, false> *const &operator[](const unsigned int &n) const 
00118   {
00119     return (*std::map<unsigned int, SFVertex<VData, EData, FData, false> *>::find(n)).second;
00120   }
00121   
00123   typename std::map<unsigned int, SFVertex<VData, EData, FData, false> *>::iterator find(SFVertex<VData, EData, FData, false> *const &element);
00125   typename std::map<unsigned int, SFVertex<VData, EData, FData, false> *>::const_iterator find(SFVertex<VData, EData, FData, false> *const &element) const;
00126 };
00127 
00128 
00134 template<class EData, class FData, class VData, bool readOnly = true>
00135 class EntityMFEdge : public std::vector<SFEdge<EData, FData, VData, readOnly> *>
00136 {
00137 public:
00139   EntityMFEdge();
00141   explicit EntityMFEdge(const std::vector<SFEdge<EData, FData, VData, readOnly> *> &vector, bool ccw);
00142 };
00143 
00144 template<class EData, class FData, class VData>
00145 class EntityMFEdge<EData, FData, VData, false> : public std::list<SFEdge<EData, FData, VData, false> *>
00146 {
00147 public:
00149   EntityMFEdge();
00151   explicit EntityMFEdge(const std::vector<SFEdge<EData, FData, VData, false> *> &vector, bool ccw);
00152 };
00153 
00159 template<class EData, class FData, class VData, bool readOnly = true>
00160 class MeshMFEdge : public std::vector<SFEdge<EData, FData, VData, readOnly> *>
00161 {
00162 public:
00164   MeshMFEdge();
00166   explicit MeshMFEdge(const std::vector<SFEdge<EData, FData, VData, readOnly> *> &vector, bool ccw);
00167 
00169   std::pair<typename std::vector<SFEdge<EData, FData, VData, readOnly> *>::iterator, bool> insert(const typename std::vector<SFEdge<EData, FData, VData, readOnly> *>::value_type &x);
00170 
00172   typename std::vector<SFEdge<EData, FData, VData, readOnly> *>::iterator find(SFEdge<EData, FData, VData, readOnly> *const &element) const;
00173 };
00174 
00175 template<class EData, class FData, class VData>
00176 class MeshMFEdge<EData, FData, VData, false> : public std::set<SFEdge<EData, FData, VData, false> *>
00177 {
00178 public:
00180   MeshMFEdge();
00182   explicit MeshMFEdge(const std::vector<SFEdge<EData, FData, VData, false> *> &vector, bool ccw);
00183 
00185   SFEdge<EData, FData, VData, false> *const &operator[](const unsigned int &n) const;
00186 };
00187 
00193 template<class FData, class VData, class EData, bool readOnly = true>
00194 class EntityMFFace : public std::vector<SFFace<FData, VData, EData, readOnly> *>
00195 {
00196 public:
00198   EntityMFFace();
00200   explicit EntityMFFace(const std::vector<SFFace<FData, VData, EData, readOnly> *> &vector);
00201 };
00202 
00203 template<class FData, class VData, class EData>
00204 class EntityMFFace<FData, VData, EData, false> : public std::list<SFFace<FData, VData, EData, false> *>
00205 {
00206 public:
00208   EntityMFFace();
00210   explicit EntityMFFace(const std::vector<SFFace<FData, VData, EData, false> *> &vector);
00211 };
00212 
00218 template<class FData, class VData, class EData, bool readOnly = true>
00219 class MeshMFFace : public std::vector<SFFace<FData, VData, EData, readOnly> *>
00220 {
00221 public:
00223   MeshMFFace();
00225   explicit MeshMFFace(const std::vector<SFFace<FData, VData, EData, readOnly> *> &vector);
00226 
00228   std::pair<typename std::vector<SFFace<FData, VData, EData, readOnly> *>::iterator, bool> insert(const std::pair<unsigned int, SFFace<FData, VData, EData, readOnly> *> &x);
00229 
00231   typename std::vector<SFFace<FData, VData, EData, readOnly> *>::iterator find(SFFace<FData, VData, EData, readOnly> *const &element);
00233   typename std::vector<SFFace<FData, VData, EData, readOnly> *>::const_iterator find(SFFace<FData, VData, EData, readOnly> *const &element) const;
00234 };
00235 
00236 template<class FData, class VData, class EData>
00237 class MeshMFFace<FData, VData, EData, false> : public std::map<unsigned int, SFFace<FData, VData, EData, false> *>
00238 {
00239 public:
00240   typedef NonConstMapIterator<unsigned int, SFFace<FData, VData, EData, false> *> iterator;
00241   typedef ConstMapIterator<unsigned int, SFFace<FData, VData, EData, false> *> const_iterator;
00242 
00244   MeshMFFace();
00246   explicit MeshMFFace(const std::vector<SFFace<FData, VData, EData, false> *> &vector);
00247 
00249   SFFace<FData, VData, EData, false> * const &operator[](const unsigned int &n) const 
00250   {
00251     return (*std::map<unsigned int, SFFace<FData, VData, EData, false> *>::find(n)).second;
00252   }
00253 
00255   typename std::map<unsigned int, SFFace<FData, VData, EData, false> *>::iterator find(SFFace<FData, VData, EData, false> *const &element);
00257   typename std::map<unsigned int, SFFace<FData, VData, EData, false> *>::const_iterator find(SFFace<FData, VData, EData, false> *const &element) const;
00258 };
00259 
00260 }
00261 }
00262 
00263 #include "MESH_SceneGraphTypes.inl"
00264 
00265 #endif

Generated on Tue Mar 2 14:08:50 2004 for X3DToolKit by doxygen 1.3.3