// -*- C++ -*-

namespace OpenChams {
/*! \class Node
 *
 *  This class describes a node of the placement tree.
 *
 *  This is an abstract class used to easily managed blocs and groups of the placement tree.
 */

/*! \fn inline Name Node::getName()
 *   \brief returns the name of the node.
 */

/*! \fn inline Position Node::getPosition()
 *   \brief returns the position of the node.
 */

/*! \fn inline Node* Node::getParent()
 *   \brief returns the parent node of the current node.
 */

/*! \fn inline Node* Node::getRight()
 *   \brief returns the child node at the right of the current node.
 */

/*! \fn inline Node* Node::getTop()
 *   \brief returns the child node at the top of the current node.
 */

/*! \fn inline bool Node::isRoot()
 *   \brief returns tru if the node is the root of the tree (has no parent).
 */

/*! \fn inline void Node::setRight(Node* node)
 *   \brief sets the child node at the right of the current node.
 *
 *   \param node the node at the right of the current node.
 */

/*! \fn inline void Node::setTop(Node* node)
 *   \brief sets the node at the top of the current node.
 *
 *   \param node the node at the top of the current node.
 */


/*! \class Bloc
 *
 *  This class describes a bloc of the placement tree.
 */

/*! \fn Bloc::Bloc(Name blocName, Position position, Node* parent)
 *   \brief creates a new bloc.
 *
 *   \param blocName the name of the bloc
 *   \param position the position of the bloc (default value: NONE)
 *   \param parent   the parent node of the node (default value: NULL)
 */


/*! \class Group
 *
 *  This class describes a group of the placement tree.
 */

/*! \fn inline void Group::setRootNode(Node* node)
 *   \brief sets the root node of the group.
 *
 *   \param node the root node of the group
 */

/*! \fn inline void Group::setIsolated(bool isolated)
 *   \brief sets whether the group has an isolation constraint or not.
 *
 *   \param isolated if true the group has an isolation constraint.
 */

/*! \fn inline void Group::setPaired(bool paired)
 *   \brief sets whether the group has a pairing constraint or not.
 *
 *   \param paired if true the group has a pairing constraint.
 */

/*! \fn inline void Group::setAlign(Align align)
 *   \brief sets an alignment constraint on the group.
 *
 *   \param align the value of the alignment constraint can be NONE, VERTICAL or HORIZONTAL.
 */

/*! \fn inline Node* group::getRootNode()
 *   \brief returns the root node of the group.
 */

/*! \fn inline bool Group::isIsolated()
 *   \brief returns true if the group has an isolation constraint.
 */

/*! \fn inline bool Group::isPaired()
 *   \brief returns true if the group has a pairing constraint.
 */

/*! \fn inline Align Group::getAlign()
 *   \brief returns the alignment constraint of the group.
 */

}
