void TaskNode::preTasks( const Context *context, Tasks &tasks ) const { for( PlugIterator cIt( preTasksPlug() ); !cIt.done(); ++cIt ) { Plug *source = (*cIt)->source<Plug>(); if( source != *cIt ) { if( TaskNodePtr n = runTimeCast<TaskNode>( source->node() ) ) { tasks.push_back( Task( n, context ) ); } } } }
void TaskNode::postTasks( const Context *context, Tasks &tasks ) const { for( PlugIterator cIt( postTasksPlug() ); !cIt.done(); ++cIt ) { Plug *source = (*cIt)->source(); if( source != *cIt && source->direction() == Plug::Out ) { if( TaskNodePtr n = runTimeCast<TaskNode>( source->node() ) ) { tasks.push_back( Task( n, context ) ); } } } }
void ExecutableNode::requirements( const Context *context, Tasks &requirements ) const { for( PlugIterator cIt( requirementsPlug() ); cIt != cIt.end(); ++cIt ) { Plug *p = (*cIt)->source<Plug>(); if( p != *cIt ) { if( ExecutableNode *n = runTimeCast<ExecutableNode>( p->node() ) ) { /// \todo Can we not just reuse the context? Maybe we need to make /// the context in Task const? requirements.push_back( Task( n, new Context( *context ) ) ); } } } }