

 // -*- C++ -*-

 namespace Katabatic {

 //! \enum        FunctionFlag

 //! \typedef     typedef  Hurricane::Filter<AutoSegment*>  AutoSegmentHF;
 //!              Shorthand for AutoSegment Hurricane Filter.

 //! \typedef     typedef  Hurricane::Locator<AutoSegment*>  AutoSegmentHL;
 //!              Shorthand for AutoSegment Hurricane Locator.

 //! \typedef     typedef  Hurricane::Collection<AutoSegment*>  AutoSegmentHC;
 //!              Shorthand for AutoSegment Hurricane Collection.

 //! \typedef     typedef  GenericFilter<AutoSegment*>  AutoSegmentFilter;
 //!              Shorthand for AutoSegment Hurricane Generic Filter
 //!              (filter with \c unique_ptr<> like support).

 //! \typedef     typedef  GenericLocator<AutoSegment*>  AutoSegmentLocator;
 //!              Shorthand for AutoSegment Hurricane Generic Locator
 //!              (locator with \c unique_ptr<> like support).

 //! \typedef     typedef  GenericCollection<AutoSegment*>  AutoSegments;
 //!              Shorthand for AutoSegment Hurricane Generic Collection
 //!              (collection with \c unique_ptr<> like support).

 /*! \class       AutoSegments_OnContact
  *  \brief       All AutoSegment anchored on a Contact
  *
  *               A Collection to iterate over all the AutoSegment anchored on
  *               \c contact. If supplied, the AutoSegment \c master will be
  *               excluded from the list.
  *
  *  \remark      If a Hurricane::Segment is anchored on the \c contact, but is not
  *               associated to an AutoSegment, it will be silently skipped.
  */

 //! \function    AutoSegments_OnContact::AutoSegments_OnContact ( AutoSegment* master, Contact* contact );
 //! \param       master   Exclude this AutoSegment from the Collection.
 //! \param       contact  The Hurricane Contact over which to iterate.
 //!
 //!              Construct a Collection of all the AutoSegment anchored on \c contact.

 //! \function    AutoSegments_OnContact::AutoSegments_OnContact ( AutoSegment* master, Contact* contact );
 //!              Create the collection of all AutoSegments direcly anchored on \c contact,
 //!              with exclusion of \c master.

 //! \function    AutoSegments_OnContact::AutoSegments_OnContact ( const AutoSegments_OnContact& );
 //!              Copy constructor.

 //! \function    AutoSegmentHC* AutoSegments_OnContact::getClone () const;
 //! \sreturn     A deep copy of the Collection.

 //! \function    AutoSegmentHC* AutoSegments_OnContact::getLocator () const;
 //! \sreturn     A deep copy of the Collection Locator.


 /*! \class       AutoSegments_Aligneds
  *  \brief       All aligned AutoSegment of a set.
  *
  *               A Collection to iterate over all the AutoSegment aligned with \c master.
  *               The \c master itself will not be included in the walkthrough.
  *               If the Katabatic::KbWithPerpands flag is passed as argument, the collection
  *               will also includes the AutoSegments directly perpandicular to the aligned
  *               set.
  *
  *  \remark      AutoSegments are forced to be aligneds only when connected through
  *               AutoContactHTee or AutoContactVTee.
  *               
  */

 //! \function    AutoSegments_Aligneds::AutoSegments_Aligneds ( AutoSegment* master, unsigned int flags );
 //!              Create a collection of all the AutoSegment aligned on \c master
 //!              (master itself is excluded from the Collection). If the flag Katabatic::KbWithPerpands
 //!              is given the directly perpandicular AutoSegment will also be includeds.

 //! \function    AutoSegments_Aligneds::AutoSegments_Aligneds ( const AutoSegments_Aligneds& );
 //!              Copy constructor.

 //! \function    AutoSegmentHC* AutoSegments_Aligneds::getClone () const;
 //! \sreturn     A deep copy of the Collection.

 //! \function    AutoSegmentHC* AutoSegments_Aligneds::getLocator () const;
 //! \sreturn     A deep copy of the Collection Locator.


 /*! \class       AutoSegments_Perpandiculars
  *  \brief       All perpandicular AutoSegment to a set of aligneds.
  *
  *               A Collection to iterate over all the AutoSegment perpandicular to
  *               the set of aligned AutoSegment of \c master.
  *
  *  \remark      This Collection is canonical aware (work on the aligned set).
  *               
  */

 //! \function    AutoSegments_Perpandiculars::AutoSegments_Perpandiculars ( AutoSegment* master );
 //!              Create a collection of all the AutoSegment perpandicular to the aligned
 //!              set of \c master.

 //! \function    AutoSegments_Perpandiculars::AutoSegments_Perpandiculars ( const AutoSegments_Perpandiculars& );
 //!              Copy constructor.

 //! \function    AutoSegmentHC* AutoSegments_Perpandiculars::getClone () const;
 //! \sreturn     A deep copy of the Collection.

 //! \function    AutoSegmentHC* AutoSegments_Perpandiculars::getLocator () const;
 //! \sreturn     A deep copy of the Collection Locator.


 /*! \class       AutoSegments_AnchorOnGCell
  *  \brief       All AutoSegment Beginning and/or Stopping in a GCell
  *
  *               A Collection to iterate over all the AutoSegment that begin from and/or
  *               end in a GCell.
  *               
  */

 //! \function    AutoSegments_AnchorOnGCell::AutoSegments_AnchorOnGCell ( GCell* fcell, unsigned int flags );
 //!              Create a collection of all the AutoSegment beginning from and/or
 //!              ending in \c fcell. The set returned by the Collection is selected
 //!              through \c flags :
 //!                - Katabatic::KbBySource : include AutoSegment starting from \c fcell.
 //!                - Katabatic::KbByTarget : include AutoSegment ending in \c fcell.
 //!                - Katabatic::KbHorizontal : include horizontal AutoSegment.
 //!                - Katabatic::KbVertical : include vertical AutoSegment.

 //! \function    AutoSegments_AnchorOnGCell::AutoSegments_AnchorOnGCell ( const AutoSegments_AnchorOnGCell& );
 //!              Copy constructor.

 //! \function    AutoSegmentHC* AutoSegments_AnchorOnGCell::getClone () const;
 //! \sreturn     A deep copy of the Collection.

 //! \function    AutoSegmentHC* AutoSegments_AnchorOnGCell::getLocator () const;
 //! \sreturn     A deep copy of the Collection Locator.


 /*! \class       AutoSegments_OnContact
  *  \brief       All AutoSegment Beginning from an AutoContact
  *
  *               A Collection to iterate over all the AutoSegment that begin from
  *               AutoContact. As AutoSegments are kept orienteds (source anchor must
  *               be lower than target), selecting source anchored AutoSegments
  *               implies that they are starting from this AutoContact.
  */

 //! \function    AutoSegments_CachedOnContact::AutoSegments_CachedOnContact ( AutoContact* source, unsigned int direction=KbHorizontal|KbVertical );
 //!              Create a collection of all the AutoSegment anchored on \c source.
 //!              Use \c direction to select the kind of AutoSegments:
 //!                - KbHorizontal : include horizontal AutoSegment.
 //!                - KbVertical : include vertical AutoSegment.

 //! \function    AutoSegments_CachedOnContact::AutoSegments_CachedOnContact ( const AutoSegments_CachedOnContact& );
 //!              Copy constructor.

 //! \function    AutoSegmentHC* AutoSegments_CachedOnContact::getClone () const;
 //! \sreturn     A deep copy of the Collection.

 //! \function    AutoSegmentHC* AutoSegments_CachedOnContact::getLocator () const;
 //! \sreturn     A deep copy of the Collection Locator.


 /*! \class       AutoSegments_IsAccountable
  *  \brief       Filter to select accoutable AutoSegment.
  *
  *               A Filter to select accoutable AutoSegment. An AutoSegment is said
  *               to be accountable if it is canonical (in the sense of an aligned set).
  */

 //! \function    bool  AutoSegments_IsAccountable::accept ( AutoSegment* segment ) const;
 //! \sreturn     \true if the \c segment is accountable (i.e. canonical).

 //! \function    AutoSegmentHF* AutoSegments_IsAccountable::getClone () const;
 //! \sreturn     A deep copy of the Collection.


 /*! \class       AutoSegments_InDirection
  *  \brief       Filter to select AutoSegment in a given direction.
  *
  *               A Filter to select AutoSegment in a specific direction.
  */

 //! \function    AutoSegments_InDirection::AutoSegments_InDirection ( unsigned int direction );
 //!              Create a filter for AutoSegment in \c direction (Katabatic::KbHorizontal
 //!              or Katabatic::KbVertical).

 //! \function    bool  AutoSegments_InDirection::accept ( AutoSegment* segment ) const;
 //! \sreturn     \true if the \c segment is in the correct direction.

 //! \function    AutoSegmentHF* AutoSegments_InDirection::getClone () const;
 //! \sreturn     A deep copy of the Collection.

 }

