BALL  1.4.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
Classes | Public Types | Public Member Functions | Static Public Attributes | Private Member Functions | Private Attributes | Friends | List of all members
BALL::Composite Class Reference

#include <BALL/CONCEPT/composite.h>

Inheritance diagram for BALL::Composite:
BALL::PersistentObject BALL::Selectable BALL::Object BALL::AutoDeletable BALL::Atom BALL::AtomContainer BALL::Bond BALL::PDBAtom BALL::SmilesParser::SPAtom BALL::Chain BALL::Fragment BALL::Molecule BALL::SecondaryStructure BALL::System BALL::SmilesParser::SPBond

Classes

class  AncestorIteratorTraits
 
class  ChildCompositeIteratorTraits
 
class  CompositeIteratorTraits
 

Public Types

typedef ForwardIterator
< Composite, Composite,
Composite
*, AncestorIteratorTraits
AncestorIterator
 
typedef ConstForwardIterator
< Composite, Composite,
Composite
*, AncestorIteratorTraits
AncestorConstIterator
 
typedef BidirectionalIterator
< Composite, Composite,
Composite
*, ChildCompositeIteratorTraits
ChildCompositeIterator
 
typedef
ConstBidirectionalIterator
< Composite, Composite,
Composite
*, ChildCompositeIteratorTraits
ChildCompositeConstIterator
 
typedef std::reverse_iterator
< ChildCompositeIterator
ChildCompositeReverseIterator
 
typedef std::reverse_iterator
< ChildCompositeConstIterator
ChildCompositeConstReverseIterator
 
typedef BidirectionalIterator
< Composite, Composite,
Composite
*, CompositeIteratorTraits
CompositeIterator
 
typedef
ConstBidirectionalIterator
< Composite, Composite,
Composite
*, CompositeIteratorTraits
CompositeConstIterator
 
typedef std::reverse_iterator
< CompositeIterator
CompositeReverseIterator
 
typedef std::reverse_iterator
< CompositeConstIterator
CompositeConstReverseIterator
 
Type Definitions and Enums
enum  StampType { MODIFICATION = 1, SELECTION = 2, BOTH = 3 }
 
typedef UnaryPredicate< CompositeKernelPredicateType
 

Public Member Functions

AncestorIterator beginAncestor ()
 
AncestorIterator endAncestor ()
 
AncestorConstIterator beginAncestor () const
 
AncestorConstIterator endAncestor () const
 
ChildCompositeIterator beginChildComposite ()
 
ChildCompositeIterator endChildComposite ()
 
ChildCompositeConstIterator beginChildComposite () const
 
ChildCompositeConstIterator endChildComposite () const
 
ChildCompositeReverseIterator rbeginChildComposite ()
 
ChildCompositeReverseIterator rendChildComposite ()
 
ChildCompositeConstReverseIterator rbeginChildComposite () const
 
ChildCompositeConstReverseIterator rendChildComposite () const
 
CompositeIterator beginComposite ()
 
CompositeIterator endComposite ()
 
CompositeConstIterator beginComposite () const
 
CompositeConstIterator endComposite () const
 
CompositeReverseIterator rbeginComposite ()
 
CompositeReverseIterator rendComposite ()
 
CompositeConstReverseIterator rbeginComposite () const
 
CompositeConstReverseIterator rendComposite () const
 
void deleteChildrenList_ (std::list< Composite * > &composites)
 
template<typename T >
BALL_INLINE bool apply (UnaryProcessor< T > &processor)
 
template<typename T >
BALL_INLINE T * getAncestor (const T &)
 
template<typename T >
BALL_INLINE const T * getAncestor (const T &) const
 
template<typename T >
BALL_INLINE T * getPrevious (const T &)
 
template<typename T >
BALL_INLINE const T * getPrevious (const T &dummy) const
 
template<typename T >
BALL_INLINE T * getNext (const T &)
 
template<typename T >
BALL_INLINE const T * getNext (const T &dummy) const
 
template<typename T >
BALL_INLINE bool hasAncestor (const T &dummy) const
 
Construction and Destruction
 Composite ()
 
 Composite (const Composite &composite, bool deep=true)
 
virtual ~Composite ()
 
virtual void clear ()
 
virtual void destroy ()
 
void destroy (bool virtual_destroy)
 
void * clone (Composite &root) const
 
Persistence
virtual void persistentWrite (PersistenceManager &pm, const char *name=0) const
 
virtual void persistentRead (PersistenceManager &pm)
 
Predicates
bool operator== (const Composite &composite) const
 
bool operator!= (const Composite &composite) const
 
bool isEmpty () const
 
bool isRoot () const
 
bool isRootOf (const Composite &composite) const
 
bool isInterior () const
 
bool hasChild () const
 
bool isChildOf (const Composite &composite) const
 
bool isFirstChild () const
 
bool isFirstChildOf (const Composite &composite) const
 
bool isLastChild () const
 
bool isLastChildOf (const Composite &composite) const
 
bool hasParent () const
 
bool isParentOf (const Composite &composite) const
 
bool hasSibling () const
 
bool isSiblingOf (const Composite &composite) const
 
bool hasPreviousSibling () const
 
bool isPreviousSiblingOf (const Composite &composite) const
 
bool hasNextSibling () const
 
bool isNextSiblingOf (const Composite &composite) const
 
bool isDescendantOf (const Composite &composite) const
 
template<typename T >
bool hasAncestor (const T &dummy) const
 
bool isAncestorOf (const Composite &composite) const
 
bool isRelatedWith (const Composite &composite) const
 
bool isHomomorph (const Composite &composite) const
 
bool containsSelection () const
 
Debugging and Diagnostics
virtual bool isValid () const
 
virtual void dump (std::ostream &s=std::cout, Size depth=0) const
 
Application and Hosting
void host (Visitor< Composite > &visitor)
 
template<typename T >
bool applyAncestor (UnaryProcessor< T > &processor)
 
template<typename T >
bool applyChild (UnaryProcessor< T > &processor)
 
template<typename T >
bool applyDescendantPreorder (UnaryProcessor< T > &processor)
 
template<typename T >
bool applyDescendantPostorder (UnaryProcessor< T > &processor)
 
template<typename T >
bool applyDescendant (UnaryProcessor< T > &processor)
 
template<typename T >
bool applyPreorder (UnaryProcessor< T > &processor)
 
template<typename T >
bool applyPostorder (UnaryProcessor< T > &processor)
 
template<typename T >
bool apply (UnaryProcessor< T > &processor)
 
template<typename T >
bool applyLevel (UnaryProcessor< T > &processor, long level)
 
- Public Member Functions inherited from BALL::PersistentObject
 PersistentObject ()
 
virtual ~PersistentObject ()
 
PersistenceManageroperator>> (PersistenceManager &pm) const
 
virtual void finalize ()
 
- Public Member Functions inherited from BALL::Object
 Object ()
 Default constructor. More...
 
 Object (const Object &object)
 Copy constructor. More...
 
virtual ~Object ()
 Destructor. More...
 
const Objectoperator= (const Object &)
 
bool operator== (const Object &object) const
 
bool operator!= (const Object &object) const
 
bool operator< (const Object &object) const
 
bool operator<= (const Object &object) const
 
bool operator>= (const Object &object) const
 
bool operator> (const Object &object) const
 
int compare (const Object &object) const
 
virtual void dump (::std::ostream &s=std::cout, Size depth=0) const
 
Handle getHandle () const
 
- Public Member Functions inherited from BALL::AutoDeletable
virtual ~AutoDeletable ()
 
void * operator new (size_t size)
 
void operator delete (void *ptr)
 
void * operator new (size_t size, void *ptr)
 
void operator delete (void *ptr, void *)
 
bool isAutoDeletable () const
 
void setAutoDeletable (bool enable)
 
- Public Member Functions inherited from BALL::Selectable
 Selectable ()
 
 Selectable (const Selectable &selectable, bool deep=true)
 
virtual ~Selectable ()
 
void set (const Selectable &selectable, bool deep=true)
 
const Selectableoperator= (const Selectable &selectable)
 
void get (Selectable &selectable, bool deep=true) const
 
void swap (Selectable &selectable)
 
virtual void setSelected (bool selected)
 
bool isSelected () const
 
bool operator== (const Selectable &selectable) const
 
bool operator!= (const Selectable &selectable) const
 
void write (PersistenceManager &pm) const
 
bool read (PersistenceManager &pm)
 
virtual void dump (::std::ostream &s=std::cout, Size depth=0) const
 

Static Public Attributes

static UnaryProcessor< CompositeDEFAULT_PROCESSOR
 
static KernelPredicateType DEFAULT_UNARY_PREDICATE
 

Private Member Functions

Size getHeight_ (Size size, Size &max_height) const
 
Size countDescendants_ () const
 
void clone_ (Composite &parent, Composite &stack) const
 
template<typename T >
bool applyLevelNostart_ (UnaryProcessor< T > &processor, long level)
 
template<typename T >
bool applyChildNostart_ (UnaryProcessor< T > &processor)
 
template<typename T >
bool applyPreorderNostart_ (UnaryProcessor< T > &processor)
 
template<typename T >
bool applyDescendantPreorderNostart_ (UnaryProcessor< T > &processor)
 
template<typename T >
bool applyDescendantPostorderNostart_ (UnaryProcessor< T > &processor)
 
void updateSelection_ ()
 
void determineSelection_ ()
 
void select_ (bool update_parent=true)
 
void deselect_ (bool update_parent=true)
 
void destroyChildren_ ()
 

Private Attributes

Size number_of_children_
 
Compositeparent_
 
Compositeprevious_
 
Compositenext_
 
Compositefirst_child_
 
Compositelast_child_
 
unsigned char properties_
 
bool contains_selection_
 
Size number_of_selected_children_
 
Size number_of_children_containing_selection_
 
TimeStamp selection_stamp_
 
TimeStamp modification_stamp_
 

Friends

class AncestorIteratorTraits
 
class ChildCompositeIteratorTraits
 
class CompositeIteratorTraits
 

Modifying and Accessing the Tree

void set (const Composite &composite, bool deep=true)
 
Compositeoperator= (const Composite &composite)
 
void get (Composite &composite, bool deep=true) const
 
Size getDegree () const
 
Size count (const KernelPredicateType &predicate) const
 
Size countDescendants () const
 
Size getPathLength (const Composite &composite) const
 
Size getDepth () const
 
Size getHeight () const
 
CompositegetRoot ()
 
const CompositegetRoot () const
 
CompositegetLowestCommonAncestor (const Composite &composite)
 
const CompositegetLowestCommonAncestor (const Composite &composite) const
 
template<typename T >
T * getAncestor (const T &)
 
template<typename T >
const T * getAncestor (const T &) const
 
template<typename T >
T * getPrevious (const T &)
 
template<typename T >
const T * getPrevious (const T &dummy) const
 
template<typename T >
T * getNext (const T &)
 
template<typename T >
const T * getNext (const T &dummy) const
 
CompositegetParent ()
 
const CompositegetParent () const
 
CompositegetChild (Index index)
 
const CompositegetChild (Index index) const
 
CompositegetSibling (Index index)
 
const CompositegetSibling (Index index) const
 
CompositegetFirstChild ()
 
const CompositegetFirstChild () const
 
CompositegetLastChild ()
 
const CompositegetLastChild () const
 
const PreciseTimegetModificationTime () const
 
const PreciseTimegetSelectionTime () const
 
void stamp (StampType stamp=BOTH)
 
void prependChild (Composite &composite)
 
void appendChild (Composite &composite)
 
void insertBefore (Composite &composite)
 
void insertAfter (Composite &composite)
 
void spliceBefore (Composite &composite)
 
void spliceAfter (Composite &composite)
 
void splice (Composite &composite)
 
bool removeChild (Composite &child)
 
Size removeSelected ()
 
Size removeUnselected ()
 
void replace (Composite &composite)
 
void swap (Composite &composite)
 
virtual void select ()
 
virtual void deselect ()
 
static bool insertParent (Composite &parent, Composite &first, Composite &last, bool destroy_parent=true)
 

Additional Inherited Members

- Static Public Member Functions inherited from BALL::Object
static Handle getNextHandle ()
 
static Handle getNewHandle ()
 
- Static Public Member Functions inherited from BALL::AutoDeletable
static void clearLastPtr ()
 
- Protected Member Functions inherited from BALL::AutoDeletable
 AutoDeletable ()
 
 AutoDeletable (const AutoDeletable &auto_deletable, bool deep=false)
 
- Protected Attributes inherited from BALL::Selectable
bool selected_
 

Detailed Description

Composite Class. This class implements a variant of the composite design pattern. A Composite may contain an arbitrary number of other composites, thus forming a tree. All BALL kernel classes are derived from Composite. This provides a unique interface for all kernel classes.

The composite class provides a selection mechanism that allows hierarchical selection and deselection of arbitrary subtrees. The time of the last selection/deselection operation is stored as well as the time of the last modification operation in time stamps that can be accessed via getModificationTime and getSelectionTime . Selecting or deselecting a Composite automatically selects or deselects all its children (recursively!). Selecting or deselecting all children of a node deselects their parent as well. Selection information is propagated upwards in the tree.
Composites are persistent objects.

Definition at line 69 of file composite.h.

Member Typedef Documentation

Definition at line 944 of file composite.h.

Definition at line 931 of file composite.h.

Definition at line 1068 of file composite.h.

Definition at line 1098 of file composite.h.

Definition at line 1051 of file composite.h.

Definition at line 1084 of file composite.h.

Definition at line 1355 of file composite.h.

Definition at line 1381 of file composite.h.

Definition at line 1348 of file composite.h.

Definition at line 1368 of file composite.h.

Composite predicate type. This type declares a predicate operating on composites. As it is used as a predicate for all kernel classes, it is named KernelPredicateType.

Definition at line 86 of file composite.h.

Member Enumeration Documentation

Time stamp type.

Enumerator
MODIFICATION 
SELECTION 
BOTH 

Definition at line 91 of file composite.h.

Constructor & Destructor Documentation

BALL::Composite::Composite ( )

Default constructor. This constructor creates an empty composite object.

BALL::Composite::Composite ( const Composite composite,
bool  deep = true 
)

Copy constructor. Creates a copy of a composite. Deep copies include the whole composite tree, shallow copies contain anly a single composite.

Parameters
compositethe composite to be cloned (the root of the tree in the case of a deep copy)
deepmake a deep copy (true) or shallow copy (false)
virtual BALL::Composite::~Composite ( )
virtual

Destructor. The destructor calls destroy to remove the composite from potential tree structures. It also recursively destructs all children of the composite.

Member Function Documentation

void BALL::Composite::appendChild ( Composite composite)

Insert a composite as the last child of this composite. Updates the modification time stamp. Note that this method alters the composite tree from which composite is taken, if there is such a tree.

See Also
stamp
Parameters
compositethe composite to be inserted
template<typename T >
bool BALL::Composite::apply ( UnaryProcessor< T > &  processor)

Apply a processor to the node and its subtree. applyPreorder is used.

See Also
applyPreorder
Returns
true if the processor could be applied.
Exceptions
Exception::GeneralException
template<typename T >
BALL_INLINE bool BALL::Composite::apply ( UnaryProcessor< T > &  processor)

Definition at line 1679 of file composite.h.

template<typename T >
bool BALL::Composite::applyAncestor ( UnaryProcessor< T > &  processor)

Apply a processor to all ancestors of this node.

Returns
true if the processor could be applied.
Exceptions
Exception::GeneralException

Definition at line 1455 of file composite.h.

template<typename T >
bool BALL::Composite::applyChild ( UnaryProcessor< T > &  processor)

Apply a processor to all children of this node.

Returns
true if the processor could be applied.
Exceptions
Exception::GeneralException

Definition at line 1481 of file composite.h.

template<typename T >
bool BALL::Composite::applyChildNostart_ ( UnaryProcessor< T > &  processor)
private

Definition at line 1487 of file composite.h.

template<typename T >
bool BALL::Composite::applyDescendant ( UnaryProcessor< T > &  processor)

Apply a processor to all descendents of this node. The node itself is not processed. applyDescendantPreorder is used.

See Also
applyDescendantPreorder
Returns
true if the processor could be applied.
Exceptions
Exception::GeneralException

Definition at line 1666 of file composite.h.

template<typename T >
bool BALL::Composite::applyDescendantPostorder ( UnaryProcessor< T > &  processor)

Apply a processor to all descendents of this node. The node itself is not processed. The root of a subtree is accessed after the nodes in its left and right subtree.

Returns
true if the processor could be applied.
Exceptions
Exception::GeneralException

Definition at line 1543 of file composite.h.

template<typename T >
bool BALL::Composite::applyDescendantPostorderNostart_ ( UnaryProcessor< T > &  processor)
private

Definition at line 1549 of file composite.h.

template<typename T >
bool BALL::Composite::applyDescendantPreorder ( UnaryProcessor< T > &  processor)

Apply a processor to all descendents of this node. The node itself is not processed. The root of a subtree is accessed before the nodes in its left and right subtree.

Returns
true if the processor could be applied.
Exceptions
Exception::GeneralException

Definition at line 1509 of file composite.h.

template<typename T >
bool BALL::Composite::applyDescendantPreorderNostart_ ( UnaryProcessor< T > &  processor)
private

Definition at line 1515 of file composite.h.

template<typename T >
bool BALL::Composite::applyLevel ( UnaryProcessor< T > &  processor,
long  level 
)

Apply a processor to the node and its siblings.

Returns
true if the processor could be applied.
Exceptions
Exception::GeneralException

Definition at line 1593 of file composite.h.

template<typename T >
bool BALL::Composite::applyLevelNostart_ ( UnaryProcessor< T > &  processor,
long  level 
)
private

Definition at line 1599 of file composite.h.

template<typename T >
bool BALL::Composite::applyPostorder ( UnaryProcessor< T > &  processor)

Apply a processor to the node and its subtree. The root of a subtree is accessed after the nodes in its left and right subtree.

Returns
true if the processor could be applied.
Exceptions
Exception::GeneralException

Definition at line 1578 of file composite.h.

template<typename T >
bool BALL::Composite::applyPreorder ( UnaryProcessor< T > &  processor)

Apply a processor to the node and its subtree. The root of a subtree is accessed before the nodes in its left and right subtree.

Returns
true if the processor could be applied.
Exceptions
Exception::GeneralException

Definition at line 1672 of file composite.h.

template<typename T >
bool BALL::Composite::applyPreorderNostart_ ( UnaryProcessor< T > &  processor)
private

Definition at line 1639 of file composite.h.

AncestorIterator BALL::Composite::beginAncestor ( )
inline

Definition at line 933 of file composite.h.

AncestorConstIterator BALL::Composite::beginAncestor ( ) const
inline

Definition at line 946 of file composite.h.

ChildCompositeIterator BALL::Composite::beginChildComposite ( )
inline

Definition at line 1053 of file composite.h.

ChildCompositeConstIterator BALL::Composite::beginChildComposite ( ) const
inline

Definition at line 1070 of file composite.h.

CompositeIterator BALL::Composite::beginComposite ( )
inline

Definition at line 1350 of file composite.h.

CompositeConstIterator BALL::Composite::beginComposite ( ) const
inline

Definition at line 1357 of file composite.h.

virtual void BALL::Composite::clear ( )
virtual

Clear the composite properties. This method removes the composite's children and destructs them if they are auto-deletable.

It does not remove the composite from any parental structure.
This method updates the modification time stamp of this.
See Also
stamp
AutoDeletable
destroy

Reimplemented from BALL::Selectable.

Reimplemented in BALL::Atom, BALL::Bond, BALL::PDBAtom, BALL::Residue, BALL::Nucleotide, BALL::SecondaryStructure, BALL::AtomContainer, BALL::NucleicAcid, and BALL::Protein.

void* BALL::Composite::clone ( Composite root) const

Clone with a predicate. This method copies the attributes of this composite to root (shallow copy) and then adds recursively each of its children.

Parameters
rootthe cloning target root is destroyed prior to any copying
Returns
a pointer to the root composite (&root)
void BALL::Composite::clone_ ( Composite parent,
Composite stack 
) const
private
bool BALL::Composite::containsSelection ( ) const

Return true if any descendant is selected. This method does not check all nodes recursively. Instead, on each modification of the tree, internal flags are updated and the information is propagated upwards in the tree.

Complexity: O(1)
Returns
bool true if any node in the subtree is selected
Size BALL::Composite::count ( const KernelPredicateType predicate) const

Count the number of nodes fulfilling a predicate in this subtree.

Parameters
predicatethe predicate
Returns
Size the number of nodes in the subtree satisfying the predicate
Size BALL::Composite::countDescendants ( ) const

Count the number of descendants.

Returns
Size the number of descendants of this node
Size BALL::Composite::countDescendants_ ( ) const
private
void BALL::Composite::deleteChildrenList_ ( std::list< Composite * > &  composites)
virtual void BALL::Composite::deselect ( )
virtual

Deselect a composite. This method deselects the composite and all the composites therein.

If the state of this composite is modified, its selection time stamp is updated and that of its ancestors (up to and including the root composite) as well. The time stamps of descendants that changed their selection state are update, too.

Reimplemented from BALL::Selectable.

void BALL::Composite::deselect_ ( bool  update_parent = true)
private
virtual void BALL::Composite::destroy ( )
virtual

Destroy the composite. This method removes the composite from potential parental structures and then calls clear to destruct all children.

This method updates the modification time stamp of this.
See Also
stamp
~Composite
clear

Reimplemented in BALL::Atom, BALL::Bond, BALL::PDBAtom, BALL::Residue, BALL::Nucleotide, BALL::AtomContainer, BALL::SecondaryStructure, BALL::NucleicAcid, and BALL::Protein.

void BALL::Composite::destroy ( bool  virtual_destroy)

Non-virtual destroy method. This method behaves exactly like destroy except for a small difference: when called with true, it calls the virtual clear function. If called with false it calls the original clear function of Composite. This is useful when implementing the behaviour of derived classes.

This method updates the modification time stamp of this.
See Also
stamp
Parameters
virtual_destroycall the virtual clear method (true) or Composite::clear() (false)
void BALL::Composite::destroyChildren_ ( )
private
void BALL::Composite::determineSelection_ ( )
private
virtual void BALL::Composite::dump ( std::ostream &  s = std::cout,
Size  depth = 0 
) const
virtual

Dump the constent of this instance to an ostream.

Parameters
sthe stream to which we will dump
depththe indentation depth of the output

Reimplemented in BALL::Atom, BALL::Bond, BALL::AtomContainer, BALL::Residue, BALL::Chain, BALL::SecondaryStructure, BALL::PDBAtom, BALL::Protein, BALL::Nucleotide, BALL::Molecule, BALL::NucleicAcid, and BALL::Fragment.

AncestorIterator BALL::Composite::endAncestor ( )
inline

Definition at line 938 of file composite.h.

AncestorConstIterator BALL::Composite::endAncestor ( ) const
inline

Definition at line 951 of file composite.h.

ChildCompositeIterator BALL::Composite::endChildComposite ( )
inline

Definition at line 1059 of file composite.h.

ChildCompositeConstIterator BALL::Composite::endChildComposite ( ) const
inline

Definition at line 1076 of file composite.h.

CompositeIterator BALL::Composite::endComposite ( )
inline

Definition at line 1352 of file composite.h.

CompositeConstIterator BALL::Composite::endComposite ( ) const
inline

Definition at line 1362 of file composite.h.

void BALL::Composite::get ( Composite composite,
bool  deep = true 
) const

Assignment of a tree to another. Create a deep (deep = true) or shallow copy of a composite and assign it to composite. composite is destroyed first.

Parameters
compositethe composite to assign the copy to
deeptrue for a deep copy
template<typename T >
T* BALL::Composite::getAncestor ( const T &  )

Find the first ancestor of type T. This method walks up the tree from parent to parent and checks whether the composite object is a kind of T. This method is useful to identify special container classes.

Returns
a pointer to the first composite found that is a kind of T or 0 if no matching composite was found up to the root of the tree
template<typename T >
const T* BALL::Composite::getAncestor ( const T &  ) const

Find the first ancestor of type T (const method). This method operates also on constant trees.

Returns
a pointer to the first composite found that is a kind of T or 0 if no matching composite was found to the root of the tree
template<typename T >
BALL_INLINE T* BALL::Composite::getAncestor ( const T &  )

Definition at line 1686 of file composite.h.

template<typename T >
BALL_INLINE const T* BALL::Composite::getAncestor ( const T &  ) const

Definition at line 1706 of file composite.h.

Composite* BALL::Composite::getChild ( Index  index)

Return the index th child of this composite. If no such child exists, 0 is returned. The index of the first child is 0.

Parameters
indexthe index of the child to return
Returns
a pointer to the child or 0 if there is no such child.
const Composite* BALL::Composite::getChild ( Index  index) const

Return a const pointer to the index th child of this composite. If no such child exists, 0 is returned. The index of the first child is 0.

Parameters
indexthe index of the child to return
Returns
a const pointer to the child or 0 if there is no such child.
Size BALL::Composite::getDegree ( ) const

Return the degree of the node. This method returns the number of children of a composite object.

Returns
Size the number of children
Size BALL::Composite::getDepth ( ) const

Get the depth of this item in its tree. The depth of a root item is 0.

Returns
Size the depth
Composite* BALL::Composite::getFirstChild ( )

Return a pointer to the first child.

Returns
a pointer to the first child or 0 if there is no child.
const Composite* BALL::Composite::getFirstChild ( ) const

Return a const pointer to the first child.

Returns
a const pointer to the first child or 0 if there is no child.
Size BALL::Composite::getHeight ( ) const

Get the height of this item in its tree. The hight of a leaf is 0.

Returns
Size the height
Size BALL::Composite::getHeight_ ( Size  size,
Size max_height 
) const
private
Composite* BALL::Composite::getLastChild ( )

Return a pointer to the last child.

Returns
a pointer to the last child or 0 if there is no child.
const Composite* BALL::Composite::getLastChild ( ) const

Return a const pointer to the last child.

Returns
a const pointer to the last child or 0 if there is no child.
Composite* BALL::Composite::getLowestCommonAncestor ( const Composite composite)

Get the lowest common ancestor of this item with an other. If no common ancestor exists 0 is returned.

Returns
Composite& the lowest common ancestor
const Composite* BALL::Composite::getLowestCommonAncestor ( const Composite composite) const

Get a const reference to the lowest common ancestor of this item with an other. If no common ancestor exists, 0 is returned.

Returns
Composite& the lowest common ancestor
const PreciseTime& BALL::Composite::getModificationTime ( ) const

Return the time of last modification

Returns
the last modification time
template<typename T >
T* BALL::Composite::getNext ( const T &  )

Find the next composite of type T. This method walks backward in the tree from composite to composite and checks whether the composite object is a kind of T.

Returns
a pointer to the first composite found that is a kind of T or 0 if no matching composite was found up to the root of the tree
template<typename T >
const T* BALL::Composite::getNext ( const T &  dummy) const

Find the next composite of type T (const method). This method walks backward in the tree from composite to composite and checks whether the composite object is a kind of T.

Returns
a pointer to the first composite found that is a kind of T or 0 if no matching composite was found up to the root of the tree
template<typename T >
BALL_INLINE T* BALL::Composite::getNext ( const T &  )

Definition at line 1767 of file composite.h.

template<typename T >
BALL_INLINE const T* BALL::Composite::getNext ( const T &  dummy) const

Definition at line 1797 of file composite.h.

Composite* BALL::Composite::getParent ( )

Return the composite's parent.

Returns
a pointer to the parent composite or 0 if no parent exists
const Composite* BALL::Composite::getParent ( ) const

Return the composite's parent (const method).

Returns
a pointer to the parent composite or 0 if no parent exists
Size BALL::Composite::getPathLength ( const Composite composite) const

Get the length of the path between two composite objects. If no path exists INVALID_SIZE is returned.

Parameters
compositethe second object
Returns
Size the size of the path
template<typename T >
T* BALL::Composite::getPrevious ( const T &  )

Find the nearest previous composite of type T. This method walks backward in the tree from composite to composite and checks whether the composite object is a kind of T.

Returns
a pointer to the first composite found that is a kind of T or 0 if no matching composite was found up to the root of the tree
template<typename T >
const T* BALL::Composite::getPrevious ( const T &  dummy) const

Find the nearest previous composite of type T (const method). This method walks backward in the tree from composite to composite and checks whether the composite object is a kind of T.

Returns
a pointer to the first composite found that is a kind of T or 0 if no matching composite was found up to the root of the tree
template<typename T >
BALL_INLINE T* BALL::Composite::getPrevious ( const T &  )

Definition at line 1724 of file composite.h.

template<typename T >
BALL_INLINE const T* BALL::Composite::getPrevious ( const T &  dummy) const

Definition at line 1756 of file composite.h.

Composite& BALL::Composite::getRoot ( )

Get the root of this item.

Returns
Composite& the root
const Composite& BALL::Composite::getRoot ( ) const

Get a const reference to the root of this item.

Returns
Composite& the root
const PreciseTime& BALL::Composite::getSelectionTime ( ) const

Return the time of last change of selection.

Returns
the last time of change of selection
Composite* BALL::Composite::getSibling ( Index  index)

Return a pointer to the sibling index positions from this composite. A pointer to the sibling index positions to the right (for positive values of index) or -index positions to the left (for negative values of index) is returned. For Index = 0 the this-pointer is returned.

Parameters
indexthe index of the sibling
Returns
a pointer to the child or 0 if there is no such sibling.
const Composite* BALL::Composite::getSibling ( Index  index) const

Return a const pointer to the sibling index positions from this composite. A pointer to the sibling index positions to the right (for positive values of index) or -index positions to the left (for negative values of index) is returned. For Index = 0 the this-pointer is returned.

Parameters
indexthe index of the sibling
Returns
a const pointer to the child or 0 if there is no such sibling.
template<typename T >
bool BALL::Composite::hasAncestor ( const T &  dummy) const

Return true if the node has a ancestor of the same type as dummy.

template<typename T >
BALL_INLINE bool BALL::Composite::hasAncestor ( const T &  dummy) const

Definition at line 1808 of file composite.h.

bool BALL::Composite::hasChild ( ) const

Return true if the node has a child.

bool BALL::Composite::hasNextSibling ( ) const

Return true if the node has a previous sibling. (Its parent has a child after this.)

bool BALL::Composite::hasParent ( ) const

Return true if the node has a parent.

bool BALL::Composite::hasPreviousSibling ( ) const

Return true if the node has a previous sibling. (Its parent has a child before this.)

bool BALL::Composite::hasSibling ( ) const

Return true if the node has a sibling. (Its parent has other childs.)

void BALL::Composite::host ( Visitor< Composite > &  visitor)

Visitor host method. Composites may be visited. For an example look into Composite_test.C

Parameters
visitorthe visitor
Exceptions
Exception::GeneralException
void BALL::Composite::insertAfter ( Composite composite)

Insert a node after this node. This method inserts composite after this node, if this node has a parent and is not a descendant of composite. Self-insertion is recognized and ignored (nothing is done).

This method updates the modification time stamp.
See Also
stamp
Parameters
compositethe node to be inserted in the tree after of this
void BALL::Composite::insertBefore ( Composite composite)

Insert a node before this node. This method inserts composite before this node, if this node has a parent and is not a descendant of composite. Self-insertion is recognized and ignored (nothing is done).

This method updates the modification time stamp.
See Also
stamp
Parameters
compositethe node to be inserted in the tree before this
static bool BALL::Composite::insertParent ( Composite parent,
Composite first,
Composite last,
bool  destroy_parent = true 
)
static

Insert a new parent node. This method is used to combine a range of nodes into a single parent. First, the parent composite is destroyed. Then, all nodes from first through last are inserted into parent and parent is inserted in the former position of first. The method returns false, if { first} or last have differing parents, if parent is identical with either first or last, or if first is already a descendant of parent.

This method updates the modification time stamp.
See Also
stamp
Parameters
parentthe new parent of the nodes from first through last
firstthe first of the nodes to be inserted into parent
lastthe last of the nodes to be inserted into parent
destroy_parentkeeps the current contents of parent if set to true
bool BALL::Composite::isAncestorOf ( const Composite composite) const

Return true if the node has composite as descendent.

bool BALL::Composite::isChildOf ( const Composite composite) const

Return true if the node has the parent composite.

bool BALL::Composite::isDescendantOf ( const Composite composite) const

Return true if the node is a descendent of composite.

bool BALL::Composite::isEmpty ( ) const

Return true if the node does not contain children.

Returns
bool true if number_of_children_ == 0
bool BALL::Composite::isFirstChild ( ) const

Return true if the node is the first child of its parent.

bool BALL::Composite::isFirstChildOf ( const Composite composite) const

Return true if the node is the first child of composite.

bool BALL::Composite::isHomomorph ( const Composite composite) const

Return true if composite is homomorph to this node. (The subtrees of the two instances have to be of the same form.)

bool BALL::Composite::isInterior ( ) const

Return true if the node is not the root or a leaf.

bool BALL::Composite::isLastChild ( ) const

Return true if the node is the last child of its parent.

bool BALL::Composite::isLastChildOf ( const Composite composite) const

Return true if the node is the last child of composite.

bool BALL::Composite::isNextSiblingOf ( const Composite composite) const

Return true if the node is a next sibling of composite.

bool BALL::Composite::isParentOf ( const Composite composite) const

Return true if the node is the parent of composite.

bool BALL::Composite::isPreviousSiblingOf ( const Composite composite) const

Return true if the node is a previous sibling of composite.

bool BALL::Composite::isRelatedWith ( const Composite composite) const

Return true if the node has composite as ancestor or composite is ancestor of this node.

bool BALL::Composite::isRoot ( ) const

Return true if the node has no parent.

Returns
bool true if parent_ == 0
bool BALL::Composite::isRootOf ( const Composite composite) const

Return true if the node is root of composite.

bool BALL::Composite::isSiblingOf ( const Composite composite) const

Return true if the node is a sibling of composite.

virtual bool BALL::Composite::isValid ( ) const
virtual

Test if the subtree with this node as root is valid. (The structure of the subtree has to be valid.)

Reimplemented from BALL::Object.

Reimplemented in BALL::Atom, BALL::Bond, BALL::AtomContainer, BALL::Residue, BALL::SecondaryStructure, BALL::Protein, BALL::Nucleotide, and BALL::NucleicAcid.

bool BALL::Composite::operator!= ( const Composite composite) const
    Inequality operator.
See Also
operator == B
Composite& BALL::Composite::operator= ( const Composite composite)

Assignment operator.

Parameters
compositethe Composite tree to assign from
Returns
a const reference to this
bool BALL::Composite::operator== ( const Composite composite) const

Equality operator. Compares the handles of two Composite objects, therefore two Composite objects can never be equal.

See Also
Object::operator ==
Parameters
compositethe composite against which equality will be tested
virtual void BALL::Composite::persistentRead ( PersistenceManager pm)
virtual
virtual void BALL::Composite::persistentWrite ( PersistenceManager pm,
const char *  name = 0 
) const
virtual

Write a persistent copy of the object.

Parameters
pmthe persistence manager
namethe object name
Exceptions
Exception::GeneralException

Reimplemented from BALL::PersistentObject.

Reimplemented in BALL::Atom, BALL::Bond, BALL::PDBAtom, BALL::Residue, BALL::SecondaryStructure, BALL::Nucleotide, BALL::AtomContainer, BALL::NucleicAcid, BALL::Protein, BALL::Molecule, BALL::Chain, BALL::System, and BALL::Fragment.

void BALL::Composite::prependChild ( Composite composite)

Insert a composite as the first child of this composite. Updates the modification time stamp.

See Also
stamp
Parameters
compositethe composite to be inserted
ChildCompositeReverseIterator BALL::Composite::rbeginChildComposite ( )
inline

Definition at line 1086 of file composite.h.

ChildCompositeConstReverseIterator BALL::Composite::rbeginChildComposite ( ) const
inline

Definition at line 1100 of file composite.h.

CompositeReverseIterator BALL::Composite::rbeginComposite ( )
inline

Definition at line 1370 of file composite.h.

CompositeConstReverseIterator BALL::Composite::rbeginComposite ( ) const
inline

Definition at line 1383 of file composite.h.

bool BALL::Composite::removeChild ( Composite child)

Remove a child from its parent. child is only removed, if it is a true child of this.

This method updates the modification time stamp of this.
See Also
stamp
Parameters
childthe child to remove
Returns
false if child could not be removed
Size BALL::Composite::removeSelected ( )

Remove selected subcomposites. This method iterates over all children of the current composite and removes all selected composites by deleteing them. If the respective Composite are not AutoDeletable, they are just remove d from the hierarchy, but not deleted.

This method is useful in combination with the Selector class in order to remove unwanted partitions of kernel data structures.

Returns
the number of composites deleted.
Size BALL::Composite::removeUnselected ( )

Remove unselected subcomposites. This method iterates over all children of the current composite and removes all unselected composites by deleteing them. If the respective Composite are not AutoDeletable, they are just remove d from the hierarchy, but not deleted.

This method is useful in combination with the Selector class in order to remove unwanted partitions of kernel data structures.

Returns
the number of composites deleted.
ChildCompositeReverseIterator BALL::Composite::rendChildComposite ( )
inline

Definition at line 1091 of file composite.h.

ChildCompositeConstReverseIterator BALL::Composite::rendChildComposite ( ) const
inline

Definition at line 1105 of file composite.h.

CompositeReverseIterator BALL::Composite::rendComposite ( )
inline

Definition at line 1375 of file composite.h.

CompositeConstReverseIterator BALL::Composite::rendComposite ( ) const
inline

Definition at line 1388 of file composite.h.

void BALL::Composite::replace ( Composite composite)

This instance and its subtree is removed form its tree and replaced by composite and its subtree.

This method updates the modification time stamp of this and composite.
See Also
stamp
Parameters
compositethe composite which will be inserted
virtual void BALL::Composite::select ( )
virtual

Select a composite. This method selects the composite and all the composites therein.

If the state of this composite is modified, its selection time stamp is updated and that of its ancestors (up to and including the root composite) as well. The time stamps of descendants that changed their selection state are update, too.

Reimplemented from BALL::Selectable.

void BALL::Composite::select_ ( bool  update_parent = true)
private
void BALL::Composite::set ( const Composite composite,
bool  deep = true 
)

Assignment.

Parameters
compositethe Composite tree to assign from
deepa bool deciding whether the assignment will be deep or shallow.
void BALL::Composite::splice ( Composite composite)

Insert the children of composite into this composite. The children of composite are inserted at the position of composite if composite is a child of this. Otherwise the children are inserted using spliceBefore .

This method updates the modification time stamp.
See Also
stamp
Parameters
compositethe composite to be spliced
void BALL::Composite::spliceAfter ( Composite composite)

Append all children of composite to the children of this composite. The method does nothing, if composite is identical to this or is a descendent of this.

This method updates the modification time stamp.
See Also
stamp
Parameters
compositethe composite to be spliced
void BALL::Composite::spliceBefore ( Composite composite)

Prepend all children of composite to the children of this composite. The method does nothing, if composite is identical to this or is a descendent of this.

This method updates the modification time stamp.
See Also
stamp
Parameters
thecomposite to be spliced
void BALL::Composite::stamp ( StampType  stamp = BOTH)

Modify a time stamp. Update one or both of the two time stamps with the current time. The time stamp is then propagated up to the root of the composite tree. Each composite contains two stamps. the modification stamp is updated each time the tree structure changes, while the selection stamp is updated each time the selection status changes.

Parameters
stampthe time stamp type
void BALL::Composite::swap ( Composite composite)

Swap the contents of two composites.

This method updates the modification time stamp of this and composite.
See Also
stamp
Parameters
compositethe composite with which the contents will be swapped
void BALL::Composite::updateSelection_ ( )
private

Friends And Related Function Documentation

friend class AncestorIteratorTraits
friend

Definition at line 928 of file composite.h.

friend class ChildCompositeIteratorTraits
friend

Definition at line 1048 of file composite.h.

friend class CompositeIteratorTraits
friend

Definition at line 1345 of file composite.h.

Member Data Documentation

bool BALL::Composite::contains_selection_
private

Definition at line 1447 of file composite.h.

UnaryProcessor<Composite> BALL::Composite::DEFAULT_PROCESSOR
static

Definition at line 107 of file composite.h.

KernelPredicateType BALL::Composite::DEFAULT_UNARY_PREDICATE
static

Definition at line 108 of file composite.h.

Composite* BALL::Composite::first_child_
private

Definition at line 1444 of file composite.h.

Composite* BALL::Composite::last_child_
private

Definition at line 1445 of file composite.h.

TimeStamp BALL::Composite::modification_stamp_
private

Definition at line 1451 of file composite.h.

Composite* BALL::Composite::next_
private

Definition at line 1443 of file composite.h.

Size BALL::Composite::number_of_children_
private

Definition at line 1440 of file composite.h.

Size BALL::Composite::number_of_children_containing_selection_
private

Definition at line 1449 of file composite.h.

Size BALL::Composite::number_of_selected_children_
private

Definition at line 1448 of file composite.h.

Composite* BALL::Composite::parent_
private

Definition at line 1441 of file composite.h.

Composite* BALL::Composite::previous_
private

Definition at line 1442 of file composite.h.

unsigned char BALL::Composite::properties_
private

Definition at line 1446 of file composite.h.

TimeStamp BALL::Composite::selection_stamp_
private

Definition at line 1450 of file composite.h.