void Context::initRecursisve( const NodeRef &node, set<NodeRef> &traversedNodes ) { if( ! node || traversedNodes.count( node ) ) return; traversedNodes.insert( node ); for( auto &input : node->getInputs() ) initRecursisve( input, traversedNodes ); node->configureConnections(); }
void Context::uninitRecursive( const NodeRef &node, set<NodeRef> &traversedNodes ) { if( ! node || traversedNodes.count( node ) ) return; traversedNodes.insert( node ); for( auto &input : node->getInputs() ) uninitRecursive( input, traversedNodes ); node->uninitializeImpl(); }
void Context::disconnectRecursive( const NodeRef &node, set<NodeRef> &traversedNodes ) { if( ! node || traversedNodes.count( node ) ) return; traversedNodes.insert( node ); for( auto &input : node->getInputs() ) disconnectRecursive( input, traversedNodes ); node->disconnectAllInputs(); }
bool Node::checkCycle( const NodeRef &sourceNode, const NodeRef &destNode ) const { if( sourceNode == destNode ) return true; if( sourceNode->supportsCycles() || destNode->supportsCycles() ) return false; for( const auto &input : sourceNode->getInputs() ) { if( checkCycle( input, destNode ) ) return true; } return false; }