EntityVisitor interface.
Entity Visitor interface
For hierarchical traversal of the entity-chain-residue-atom hierarchy OpenStructure offers the concept of (simplified) visitors. By passing a subclass of EntityVisitor to the the EntityHandle::Apply(EntityVisitor&) member function, the whole subtree rooted at the object where Apply was invoked is then traversed in a recursive manner.
Visitors may be applied to both Handles and Views, so they are a good way to generalise your algorithms for EntityView and EntitHandle the like.
Algorithms are implemented by subclassing EntityVisitor and overriding one or more of the callbacks.
EntityVisitor provides stub implementations for all of the callbacks. You only have to overload the callbacks you are interested in. Every callback returns a bool to indicate whether the hierarchical traversal should continue. Returning false indicates that recursive traversal should stop and continue with the next sibling.
Example
The following example prints residues and their atoms to stdout
class Printer : public EntityVisitor { public:
std::cout << residue.GetKey() << "." << residue.GetNumber() << std::endl;
return true;
}
virtual bool VisitAtom(
const AtomHandle& atom) {
std::cout << " " << atom.GetName() << std::endl;
return true;
}
};
virtual bool VisitResidue(const ResidueHandle &r)
Residue callback.
virtual bool VisitAtom(const AtomHandle &a)
Atom callback.
- Note
- The order of traversal for chains and atoms is implementation specific and your algorithms should not rely on a particular order. However, residues are visited in ascending order of their residue numbers.
Definition at line 73 of file entity_visitor.hh.