namespace X3DTK { namespace MESH { template TemplateX3DBuilderStateVariables::TemplateX3DBuilderStateVariables() : StateVariables(), _root(0), _cloner(Singleton::getInstance()) { } template TemplateX3DBuilderStateVariables::~TemplateX3DBuilderStateVariables() { } template void TemplateX3DBuilderStateVariables::init() { _root = 0; _nodeStack.push_front(0); _cloner->init(); } template void TemplateX3DBuilderStateVariables::finish() { _nodeStack.clear(); _nodeCoupleMap.clear(); _cloner->finish(); } template void TemplateX3DBuilderStateVariables::addCoupleNode(SFNode N, X3D::X3DNode *NN) { _nodeCoupleMap[N] = NN; // init root node. if (_root == 0) _root = NN; } template void TemplateX3DBuilderStateVariables::pushNode(X3D::X3DNode *N) { X3D::X3DNode *T = getTop(); if (T != 0) T->setChild(N); // filling the stack. _nodeStack.push_front(N); } template void TemplateX3DBuilderStateVariables::popNode() { _nodeStack.pop_front(); } template X3D::X3DNode *TemplateX3DBuilderStateVariables::getRoot() const { return _root; } template X3D::X3DNode *TemplateX3DBuilderStateVariables::getTop() const { return (!_nodeStack.empty() ? _nodeStack.front() : 0); } template X3D::X3DNode *TemplateX3DBuilderStateVariables::getNode(SFNode N) const { std::map::const_iterator it = _nodeCoupleMap.find(N); if (it != _nodeCoupleMap.end()) return (*it).second; return 0; } template SFNode TemplateX3DBuilderStateVariables::clone(SFNode N) { return _cloner->clone(N, false); } } }