00001 #ifndef X3DTK_GRAPHTRAVERSAL_H 00002 #define X3DTK_GRAPHTRAVERSAL_H 00003 00004 #include "StateVariables.h" 00005 #include "X3DTypes.h" 00006 00007 #include <list> 00008 #include <typeinfo> 00009 #include <iostream> 00010 00011 namespace X3DTK { 00012 00013 class Walker; 00014 class Visitor; 00015 class X3DComponentWalker; 00016 class X3DComponentVisitor; 00017 00026 class GraphTraversal 00027 { 00028 public: 00030 GraphTraversal(); 00032 virtual ~GraphTraversal(); 00033 00035 void setComponentWalker(X3DComponentWalker *component); 00037 void setComponentVisitor(X3DComponentVisitor *component); 00039 void setAutoDeleteComponents(bool value); 00041 void traverse(SFAbstractNode N) const; 00042 00044 friend GraphTraversal *joinGraphTraversals(GraphTraversal *A1, GraphTraversal *A2); 00046 friend GraphTraversal *mergeGraphTraversals(GraphTraversal *A1, GraphTraversal *A2); 00047 00049 template <class S> 00050 static S *getInstanceOf(); 00051 00053 template <class S> 00054 static void removeInstanceOf(); 00055 00056 protected: 00058 Visitor *visitor; 00060 Walker *walker; 00061 00062 private: 00063 static std::list<StateVariables *> _stateVariablesList; 00064 }; 00065 00066 } 00067 00068 #include "GraphTraversal.inl" 00069 00070 #endif