00001 00002 // NodeVisitingProxy.h // 00004 00005 #ifndef NODEVISITINGPROXY_H 00006 #define NODEVISITINGPROXY_H 00007 00008 #include "X3DNodeProxy.h" 00009 00010 #include <list> 00011 00012 namespace X3DTK { 00013 00014 class Type; 00015 class X3DComponentVisitor; 00016 00018 00019 class NodeVisitingProxy : public X3DNodeProxy 00020 { 00021 public: 00023 NodeVisitingProxy(); 00025 virtual ~NodeVisitingProxy(); 00026 00028 void setComponentVisitor(X3DComponentVisitor *component); 00030 void enter(SFNode N) const; 00032 bool walkOn(SFNode N, SFNode child = 0) const; 00034 void leave(SFNode N) const; 00036 void reset(); 00037 00038 friend NodeVisitingProxy *joinNodeVisitingProxies(NodeVisitingProxy *N0, NodeVisitingProxy *N1); 00039 00040 private: 00042 virtual void addType(const Type *type); 00044 EnterFunction *getEnterFunctionOf(const Type *type) const; 00045 WalkOnFunction *getWalkOnFunctionOf(const Type *type) const; 00046 LeaveFunction *getLeaveFunctionOf(const Type *type) const; 00047 00048 //Dictionary of all the creation functions used. 00049 VisitingArray visitingArray_; 00050 std::list<X3DComponentVisitor *> componentList_; 00051 }; 00052 00053 } 00054 00055 #endif