00001 #ifndef X3DTK_X3DSFNODEFUNCTOR_H 00002 #define X3DTK_X3DSFNODEFUNCTOR_H 00003 00004 namespace X3DTK { 00005 00006 class X3DAbstractNode; 00007 00008 class X3DSFNodeFunctor 00009 { 00010 public: 00011 virtual X3DAbstractNode *getNode(X3DAbstractNode const *N) = 0; 00012 virtual bool setNode(X3DAbstractNode *N, X3DAbstractNode *C) = 0; 00013 virtual bool removeNode(X3DAbstractNode *N, X3DAbstractNode *C) = 0; 00014 virtual void removeThisNode(X3DAbstractNode *N) = 0; 00015 }; 00016 00017 template<class T, class V> 00018 class SFNodeFunctor : public X3DSFNodeFunctor 00019 { 00020 public: 00021 SFNodeFunctor(V *T:: *node); 00022 00023 X3DAbstractNode *getNode(X3DAbstractNode const *N); 00024 bool setNode(X3DAbstractNode *N, X3DAbstractNode *C); 00025 bool removeNode(X3DAbstractNode *N, X3DAbstractNode *C); 00026 void removeThisNode(X3DAbstractNode *N); 00027 00028 private: 00029 V *T::*_node; 00030 }; 00031 00032 } 00033 00034 #include "X3DSFNodeFunctor.inl" 00035 00036 #endif