00001 #include "X3DComponentVisitor.h"
00002 #include "EnterFunction.h"
00003 #include "WalkOnFunction.h"
00004 #include "LeaveFunction.h"
00005 #include "Type.h"
00006
00007 using namespace X3DTK;
00008 using namespace std;
00009
00010 X3DComponentVisitor::X3DComponentVisitor()
00011 {
00012 }
00013
00014 X3DComponentVisitor::~X3DComponentVisitor()
00015 {
00016
00017 for (EnterDict::iterator it = enterDict_.begin(); it != enterDict_.end(); ++it)
00018 delete (*it).second;
00019
00020 for (WalkOnDict::iterator it = walkonDict_.begin(); it != walkonDict_.end(); ++it)
00021 delete (*it).second;
00022
00023 for (LeaveDict::iterator it = leaveDict_.begin(); it != leaveDict_.end(); ++it)
00024 delete (*it).second;
00025 }
00026
00027 void X3DComponentVisitor::setActiveAllFunctions()
00028 {
00029 for (EnterDict::const_iterator it = enterDict_.begin(); it != enterDict_.end(); ++it)
00030 (*it).second->setActive();
00031
00032 for (WalkOnDict::const_iterator it = walkonDict_.begin(); it != walkonDict_.end(); ++it)
00033 (*it).second->setActive();
00034
00035 for (LeaveDict::const_iterator it = leaveDict_.begin(); it != leaveDict_.end(); ++it)
00036 (*it).second->setActive();
00037 }
00038
00039 void X3DComponentVisitor::setInactiveAllFunctions()
00040 {
00041 for (EnterDict::const_iterator it = enterDict_.begin(); it != enterDict_.end(); ++it)
00042 if ((*it).first != "X3DNode")
00043 (*it).second->setInactive();
00044
00045 for (WalkOnDict::const_iterator it = walkonDict_.begin(); it != walkonDict_.end(); ++it)
00046 if ((*it).first != "X3DNode")
00047 (*it).second->setInactive();
00048
00049 for (LeaveDict::const_iterator it = leaveDict_.begin(); it != leaveDict_.end(); ++it)
00050 if ((*it).first != "X3DNode")
00051 (*it).second->setInactive();
00052 }
00053
00054 EnterFunction *X3DComponentVisitor::getEnterFunctionOf(const Type *type) const
00055 {
00056 EnterDict::const_iterator it = enterDict_.find(type->getName());
00057 if ((it != enterDict_.end()) && ((*it).second->isActive()))
00058 return (*it).second;
00059
00060 return 0;
00061 }
00062
00063 WalkOnFunction *X3DComponentVisitor::getWalkOnFunctionOf(const Type *type) const
00064 {
00065 WalkOnDict::const_iterator it = walkonDict_.find(type->getName());
00066 if ((it != walkonDict_.end()) && ((*it).second->isActive()))
00067 return (*it).second;
00068
00069 return 0;
00070 }
00071
00072 LeaveFunction *X3DComponentVisitor::getLeaveFunctionOf(const Type *type) const
00073 {
00074 LeaveDict::const_iterator it = leaveDict_.find(type->getName());
00075 if ((it != leaveDict_.end()) && ((*it).second->isActive()))
00076 return (*it).second;
00077
00078
00079 return 0;
00080 }