/// This file is part of the X3DToolKit library /// Copyright (C) 2002-2004 Yannick Le Goc (legoc@imag.fr) /// http://artis.imag.fr/Members/Yannick.Legoc/X3D/ /// This library is free software; you can redistribute it and/or /// modify it under the terms of the GNU Lesser General Public /// License as published by the Free Software Foundation; either /// version 2.1 of the License, or (at your option) any later version. /// This library is distributed in the hope that it will be useful, /// but WITHOUT ANY WARRANTY; without even the implied warranty of /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU /// Lesser General Public License for more details. /// You should have received a copy of the GNU Lesser General Public /// License along with this library; if not, write to the Free Software /// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifndef X3DTK_VISITOR_H #define X3DTK_VISITOR_H #include "X3DAbstractNode.h" #include "VisitingFunctions.h" #include "EnterFunction.h" #include "WalkOnFunction.h" #include "LeaveFunction.h" #include "X3DActor.h" #include namespace X3DTK { class SFType; class X3DComponentVisitor; /*! \brief Class declared in defining * an actor specialized in the visiting of nodes. * * \ingroup processor */ class Visitor : public X3DActor { friend class SFType; public: /// Constructor. Visitor(); /// Destructor. virtual ~Visitor(); /// Sets the X3DComponentCreator. void setComponentVisitor(X3DComponentVisitor *component); /// Enters the SFNode. inline void enter(SFNode N) const {_visitingArray[N->getType()->getId()]->enter(N);}; /// Walks On the SFNode. inline bool walkOn(SFNode N, SFNode child = 0) const {return _visitingArray[N->getType()->getId()]->walkOn(N, child);}; /// Leaves the SFNode. inline void leave(SFNode N) const {_visitingArray[N->getType()->getId()]->leave(N);}; /// Empties the list of component. void reset(); /// Joins two visitors. friend Visitor *joinVisitors(Visitor *N0, Visitor *N1); private: /// Adds a type. virtual void addType(const SFType *type); /// finds the lowest functions in the inheritance tree. EnterFunction *getEnterFunctionOf(const SFType *type) const; WalkOnFunction *getWalkOnFunctionOf(const SFType *type) const; LeaveFunction *getLeaveFunctionOf(const SFType *type) const; //Dictionary of all the creation functions used. VisitingArray _visitingArray; std::list _componentList; }; } #endif