#include namespace X3DTK { template MFNodeFunctor::MFNodeFunctor(MFNode T:: *nodes) : _nodes(nodes) { } template const MFNode &MFNodeFunctor::getNodes(X3DAbstractNode const *N) { return static_cast(N)->*_nodes; } template bool MFNodeFunctor::addNode(X3DAbstractNode *N, X3DAbstractNode *C) { if (dynamic_cast(C) != 0) { (static_cast(N)->*_nodes).push_back(C); X3DAbstractNode_addParentToChild(N, C); return true; } return false; } template bool MFNodeFunctor::removeNode(X3DAbstractNode *N, X3DAbstractNode *C) { MFNode &nodes = (static_cast(N)->*_nodes); MFNode::iterator res = find(nodes.begin(), nodes.end(), C); if (res != nodes.end()) { X3DAbstractNode_removeParentFromChild(N, C); nodes.erase(res); return true; } return false; } template void MFNodeFunctor::removeTheseNodes(X3DAbstractNode *N) { if (dynamic_cast(N) != 0) { MFNode &nodes = (static_cast(N)->*_nodes); for (MFNode::const_iterator it = nodes.begin(); it != nodes.end(); ++it) X3DAbstractNode_removeParentFromChild(N, *it); nodes.clear(); } } }