GraphComponent *GraphComponent::commonAncestor( const GraphComponent *other, IECore::TypeId ancestorType ) { set<GraphComponent *> candidates; GraphComponent *ancestor = m_parent; while( ancestor ) { if( ancestor->isInstanceOf( ancestorType ) ) { candidates.insert( ancestor ); } ancestor = ancestor->m_parent; } ancestor = other->m_parent; while( ancestor ) { if( ancestor->isInstanceOf( ancestorType ) ) { if( candidates.find( ancestor )!=candidates.end() ) { return ancestor; } } ancestor = ancestor->m_parent; } return 0; }
GraphComponent *GraphComponent::ancestor( IECore::TypeId type ) { GraphComponent *a = m_parent; while( a ) { if( a->isInstanceOf( type ) ) { return a; } a = a->m_parent; } return 0; }