SFType.h

Go to the documentation of this file.
00001 #ifndef X3DTK_SFTYPE_H
00002 #define X3DTK_SFTYPE_H
00003 
00004 #include <map>
00005 #include <vector>
00006 
00007 #include "X3DTypes.h"
00008 #include "SFSceneGraph.h"
00009 #include "SFComponent.h"
00010 #include "Singleton.h"
00011 #include "X3DNodeCloner.h"
00012 #include "X3DMemberFunctor.h"
00013 #include "X3DSFNodeFunctor.h"
00014 #include "X3DMFNodeFunctor.h"
00015 
00016 namespace X3DTK {
00017 
00018 class Visitor;
00019 class BaseRecorder;
00020 
00021 namespace X3D {
00022   class Creator;
00023   class X3DComponentCreator;
00024 }
00025 
00026 struct FieldManager
00027 {
00028   X3DMemberFunctor *memberFunctor;
00029   X3DFieldLoader *loader;
00030   X3DFieldWriter *writer;
00031   SFString init;
00032 };
00033 
00044 class SFType
00045 {
00046   friend class X3D::Creator;
00047   friend class Walker;
00048   friend class Visitor;
00049   friend class BaseRecorder;
00050   friend class X3D::X3DComponentCreator;
00051   friend class X3DComponentWalker;
00052   friend class X3DComponentVisitor;
00053   friend class X3DAbstractNode;
00054   friend class X3DRoute;
00055   template<class T, class V> friend class AttributeRecorder;
00056   template<class T, class V> friend class SFNodeRecorder;
00057   template<class T, class V> friend class MFNodeRecorder;
00058 
00059 public:
00061   static SFType *getTypeOfName(const SFString &sceneGraph, const SFString &component, const SFString &name);
00063   static SFType *getTypeOfId(int id);
00065   static void recomputeIds();
00066   
00068   inline const SFString &getName() const {return _name;};
00070   inline const SFString &getComponentName() const {return _component->getName();};
00072   inline const SFString &getSceneGraphName() const {return _component->getSceneGraph()->getName();};
00074   inline int getId() const {return _id;};
00076   inline SFType *getParent() const {return _parent;};
00078   inline const MFType &getChildren() const {return _childList;};
00080   inline SFComponent *getComponent() const {return _component;};
00082   inline SFSceneGraph *getSceneGraph() const {return _component->getSceneGraph();};
00084   static void printInheritanceTree();
00085 
00087   static SFString encodeKey(const SFString &sceneGraph, const SFString &component, const SFString &SFType);
00089   inline SFString getEncodedName() const {return encodeKey(getSceneGraphName(), getComponentName(), getName());};
00090     
00091 private:
00093   SFType(const SFString &name, const SFString &component, const SFString &sceneGraph, X3DNodeCloner *cloner);
00094   ~SFType();
00095 
00097   void setParent(SFType *parent);
00099   void addOneReference();
00101   void addOneReferenceRecursive();
00103   static void removeOneReference(SFType *type);
00105   static void defineTypeName(SFType **type, const SFString &name, const SFString &component, const SFString &sceneGraph, X3DNodeCloner *cloner);
00107   X3DMemberFunctor *getMemberFunctor(const SFString &name) const;
00109   X3DFieldLoader *getFieldLoader(const SFString &name) const;
00111   X3DFieldWriter *getFieldWriter(const SFString &name) const;
00112   
00114   static void addVisitor(Visitor *visitor);
00116   static void removeVisitor(Visitor *visitor);
00117 
00120   static void beginFunctionDefinition();
00122   static void endFunctionDefinition();
00123   
00125   SFString _name;
00126   int _id;
00127   int _refCount;
00128   SFType *_parent;
00129   MFType _childList;
00130   SFComponent *_component;
00131   X3DNodeCloner *_cloner;
00132   std::map<SFString, FieldManager> _attributesMap;
00133   std::vector<std::pair<SFString, X3DSFNodeFunctor *> > _nodeMap;
00134   std::vector<std::pair<SFString, X3DMFNodeFunctor *> > _nodesMap;
00135   
00137   static int count;
00138   static MFType _typeList;  
00139   static std::list<Visitor *> _actorList;
00140   static bool _functionDefinition;
00141  
00142   void printInheritanceTree(SFString tab) const;
00143 };
00144 
00145 }
00146 
00147 #endif

Generated on Mon Jul 12 09:40:00 2004 for X3DToolKit by doxygen 1.3.6