IDTPM2::PredicateAncestorFinder< T, P > Node1 IDTPM2::PredicateAncestor Finder< T, P >   + PredicateAncestorFinder() Node2 IDTPM2::GenericAncestorFinder < T, Predicate > - m_predicate + GenericAncestorFinder() + predicate() Node2->Node1 Node3 IDTPM2::IFinder< T >   + ~IFinder() + findAncestor() + predicate() Node3->Node2