Boost logo

Boost-Commit :

From: huseyinakcan_at_[hidden]
Date: 2007-06-13 02:23:00


Author: huseyinakcan
Date: 2007-06-13 02:22:54 EDT (Wed, 13 Jun 2007)
New Revision: 7023
URL: http://svn.boost.org/trac/boost/changeset/7023

Log:

added new mutable concepts
all concept files converted to the new doc style

Added:
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_backward_hds_concept.hpp
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_bidirectional_hds_concept.hpp
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_facet_hds_concept.hpp
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_forward_hds_concept.hpp
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_vertex_hds_concept.hpp
Text files modified:
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/bidirectional_hds_concept.hpp | 262 +++++++++++++++++++++-------------
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/facet_hds_concept.hpp | 228 +++++++++++++++++-------------
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/forward_hds_concept.hpp | 10
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/hds_concept.hpp | 14
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_hds_concept.hpp | 300 ++++++++++++++++++++++-----------------
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/vertex_hds_concept.hpp | 232 +++++++++++++++++-------------
   6 files changed, 595 insertions(+), 451 deletions(-)

Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/bidirectional_hds_concept.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/bidirectional_hds_concept.hpp (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/bidirectional_hds_concept.hpp 2007-06-13 02:22:54 EDT (Wed, 13 Jun 2007)
@@ -1,114 +1,168 @@
-/**
- * @file bidirectional_hds_concept.hpp
- *
- * @brief Bidirectional HDS concept definition.
- *
- * @par Definition
- * This concept refines the ForwardHDSConcept and BackwardHDSConcept, and
- * specifies additional bidirectional traversal category. Bidirectional
- * category requires both the forward_category and the backward_category
- * defined to iterate over the HDS data structure, which means both clockwise &
- * counter clockwise movement around the facet and vertex. From these two
- * categories all others can be accessed with the help of the opposite of a
- * halfedge.
- *
- * @par Refinement of
- * - ForwardHDSConcept
- * - BackwardHDSConcept
- *
- * @par Notation
- * - HDS A type that is a model of BidirectionalHDSConcept
- * - hds A non-modifiable instance of HDS
- * - h,g Halfedge descriptors, of type X::halfedge_descriptor
- *
- * @par Associated types
- * - hds_traits<HDS>::halfedge_descriptor: must be DefaultConstructible and
- * CopyConstructible, EqualityComparable, Assignable.
- * - hds_traits<HDS>::traversal_category: must be convertible to
- * hds_traits<HDS>::bidirectional_traversal_tag.
- *
- * @par Definitions
- * - @e halfedge @e descriptor is a type that contains information to access
- * the halfedge.
- * - @e traversal @e category is a type that contains information about the
- * direction of the traversal, which is forward, backward or bidirectional.
- * For bidirectional hds concept, it has to be convertible to
- * hds_traits<HDS>::bidirectional_traversal_tag.
- *
- * @par Valid Expressions
- * - see ForwardHDSConcept and BackwardHDSConcept.
- *
- * @par Expression Semantics
- * - see ForwardHDSConcept and BackwardHDSConcept.
- *
- * @par Complexity guarantees
- * - see ForwardHDSConcept and BackwardHDSConcept.
- *
- * @par Invariants
- * The invariants for ForwardHDSConcept, and BackwardHDSConcept should hold
- * for BidirectionalHDSConcept also.
- *
- * @par Concept-checking class
- * \code
- * template <class HDS>
- * struct BidirectionalHDSConcept {
- * typedef typename hds_traits<HDS>::halfedge_descriptor halfedge_descriptor;
- * typedef typename hds_traits<HDS>::traversal_category traversal_category;
- * void constraints() {
- * using namespace boost;
- * function_requires<ForwardHDSConcept<HDS> >();
- * function_requires<BackwardHDSConcept<HDS> >();
- * function_requires<ConvertibleConcept<traversal_category,
- * bidirectional_traversal_tag> >();
- * }
- * BidirectionalHDS hds;
- * };
- * \endcode
- */
+//bidirectional_hds_concept.hpp -*- C++ -*-
+//
+//@PURPOSE: Provide 'BidirectionalHDS' concept definition, and concept-checking
+//class.
+//
+//@DESCRIPTION: This file provides a single class template that,
+// when used with the following concept-checking utilities:
+//..
+// boost::function_requires<BidirectionalHDSConcept<HDS> >();
+//..
+// inside a function body, or
+//..
+// BOOST_CLASS_REQUIRE(HDS, boost::hdstl,BidirectionalHDSConcept);
+//..
+// inside a class body, checks whether the type given as template
+// argument is a model of the HDS concept described on the page
+// [bidirectionalhds].
+//
+//@CONCEPT: [bidirectionalhds] Bidirectional HDS concept
+//
+///Definition
+///-----------
+// This concept refines the 'ForwardHDSConcept' and the 'BackwardHDSConcept',
+// and specifies additional bidirectional traversal category to iterate over
+// the 'HDS' data structure. 'Bidirectional_category' requires both the
+// 'forward_category' and the 'backward_category'
+// defined to iterate over the 'HDS' data structure, which means both
+// clockwise & counter clockwise movement around the facet and vertex.
+// Once one of these categories are given all others can be accessed with
+// the help of the 'opposite' of a halfedge (see the section "Invariants"
+// below for the algebraic relations that must hold).
+//
+///Refinement of
+///-------------
+// - 'ForwardHDSConcept'
+// - 'BackwardHDSConcept'
+//
+///Notation
+///--------
+// - 'HDS' A type that is a model of 'BidirectionalHDSConcept'
+// - 'hds' A non-modifiable instance of 'HDS'
+// - 'h','g' Halfedge descriptors, of type
+// 'hds_traits<HDS>::halfedge_descriptor'
+//
+///Associated types
+///----------------
+// - 'hds_traits<HDS>::halfedge_descriptor': from 'HDSConcept'.
+// - 'hds_traits<HDS>::traversal_category' : must be convertible to
+// 'hds_traits<HDS>::bidirectional_traversal_tag'.
+// - 'hds_traits<HDS>::forward_category' : from 'ForwardHDSConcept'
+// - 'hds_traits<HDS>::backward_category' : from 'BackwardHDSConcept'
+//
+///Definitions
+///-----------
+// - 'halfedge_descriptor' is a type that contains information to access
+// the halfedge. (See the 'HDSConcept' for a full definition.)
+// - 'traversal_category' is a type that contains information about the
+// direction of the traversal, which is forward, backward or bidirectional.
+// For this 'BidirectionalHDS' concept, the 'traversal_category' has to be
+// convertible to the 'hdstl::bidirectional_traversal_tag' type defined
+// in '<boost/hdstl.hpp>'.
+// - 'forward_category' defines the primary accessor of the forward
+// information for use by algorithms which desire the most direct access.
+// - 'backward_category' defines the primary accessor of the backward
+// information for use by algorithms which desire the most direct access.
+//
+///Valid Expressions
+///-----------------
+// See the valid expressions of the 'ForwardHDSConcept' and
+// the 'BackwardHDSConcept'.
+//
+///Expression Semantics
+///--------------------
+// See the expression semantics of the 'ForwardHDSConcept' and
+// the 'BackwardHDSConcept'.
+//
+///Complexity guarantees
+///---------------------
+// See the complexity guarantees of the 'ForwardHDSConcept' and
+// the 'BackwardHDSConcept'.
+//
+///Invariants
+///----------
+// 'BidirectionalHDSConcept' should validate all the invariants for the
+// 'ForwardHDSConcept', and the 'BackwardHDSConcept'.
+//
+///Concept-checking class
+///----------------------
+//..
+// template <class HDS>
+// struct BidirectionalHDSConcept {
+// typedef typename hds_traits<HDS>::halfedge_descriptor halfedge_descriptor;
+// typedef typename hds_traits<HDS>::traversal_category traversal_category;
+// typedef typename hds_traits<HDS>::forward_category forward_category;
+// typedef typename hds_traits<HDS>::backward_category backward_category;
+// void constraints() {
+// using namespace boost;
+// function_requires<ForwardHDSConcept<HDS> >();
+// function_requires<BackwardHDSConcept<HDS> >();
+// function_requires<ConvertibleConcept<traversal_category,
+// bidirectional_traversal_tag> >();
+// }
+// void const_constraints(HDS const& hds) {
+// }
+// BidirectionalHDS hds;
+// };
+//..
 
 #ifdef BOOST_HDSTL_CONCEPTS_BIDIRECTIONALHDSCONCEPT_HPP
 #define BOOST_HDSTL_CONCEPTS_BIDIRECTIONALHDSCONCEPT_HPP 1
 
+#include <boost/concepts.h>
+
 namespace hdstl{
 namespace concepts{
- /**
- * @class BidirectionalHDSConcept
- *
- * @brief Bidirectional HDS concept checking class.
- *
- * @par Definition
- * This class provides a concept checking class for the
- * BidirectionalHDSConcept, i.e., using the statement
- * boost::function_requires<BidirectionalHDSConcept<HDS> >() inside a
- * function body, or BOOST_CLASS_REQUIRE(HDS, boost::hdstl,
- * BidirectionalHDSConcept) inside a class definition body, should trigger a
- * compile-time error if the type HDS does not model the
- * BidirectionalHDSConcept.
- */
- template <class HDS>
- struct BidirectionalHDSConcept {
- //@{
- /** @name Required types:
- * The specialization of hds_traits<HDS> must have
- * the required types below
- */
- typedef typename hds_traits<HDS>::halfedge_descriptor halfedge_descriptor;
- typedef typename hds_traits<HDS>::traversal_category traversal_category;
- //@}
-
- /**
- * @name Defined constraints:
- */
- void constraints() {
- using namespace boost;
-
- function_requires<ForwardHDSConcept<HDS> >();
- function_requires<BackwardHDSConcept<HDS> >();
- function_requires<ConvertibleConcept<traversal_category,
- bidirectional_traversal_tag> >();
- }
- BidirectionalHDS hds;
+
+ template <class HDS>
+ struct BidirectionalHDSConcept {
+ // This class provides a concept checking class for the
+ // 'BidirectionalHDSConcept', i.e., using the statement
+ //..
+ // boost::function_requires<BidirectionalHDSConcept<HDS>()
+ //..
+ // inside a function body, or
+ //..
+ // BOOST_CLASS_REQUIRE(HDS, boost::hdstl, BidirectionalHDSConcept);
+ //..
+ // inside a class definition body, should trigger a compile-time error
+ // if the type HDS does not model the 'BidirectionalHDSConcept'.
+
+ // TYPES
+ typedef typename hds_traits<HDS>::halfedge_descriptor halfedge_descriptor;
+ typedef typename hds_traits<HDS>::traversal_category traversal_category;
+ typedef typename hds_traits<HDS>::forward_category forward_category;
+ typedef typename hds_traits<HDS>::backward_category backward_category;
+ // The specialization of 'hds_traits<HDS>' must have these required
+ // types, obeying the types requirements stated in the detailed
+ // description of the 'BidirectionalHDS' concept on page
+ // [bidirectionalhdsconcept].
+
+ //MANIPULATORS
+ void constraints()
+ // Check that the 'HDS' template parameters satisfies all the
+ // constraints of 'BidirectionalHDSConcept' on page
+ // [bidirectionalhdsconcept].
+ {
+ using namespace boost;
+ function_requires<ForwardHDSConcept<HDS> >();
+ function_requires<BackwardHDSConcept<HDS> >();
+ function_requires<ConvertibleConcept<traversal_category,
+ bidirectional_traversal_tag> >();
+ }
+
+ // ACCESSORS
+ void const_constraints(HDS const& hds)
+ // Check that the non-modifiable 'HDS' template parameters
+ // satisfies all the constraints of 'BidirectionalHDSConcept'.
+ {
+ }
+
+ private:
+ //DATA
+ BidirectionalHDS hds; // a halfedge data structure object
    };
+
 } // close namespace concepts
 } // close namespace hdstl
 

Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/facet_hds_concept.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/facet_hds_concept.hpp (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/facet_hds_concept.hpp 2007-06-13 02:22:54 EDT (Wed, 13 Jun 2007)
@@ -1,112 +1,140 @@
-/**
- * @file facet_hds_concept.hpp
- *
- * @brief Facet HDS concept definition.
- *
- * @par Definition
- * This concept refines the HDSConcept, and specifies additional facet
- * descriptor to attach facets to the HDS.
- *
- * @par Refinement of:
- * - HDSConcept
- *
- * @par Notation
- * - HDS A type that is a model of FacetHDSConcept
- * - hds A non-modifiable instance of HDS
- * - f Facet descriptor, of type X::facet_descriptor
- *
- * @par Associated types
- * - hds_traits<HDS>::facet_descriptor: must be DefaultConstructible and
- * CopyConstructible, EqualityComparable, Assignable.
- *
- * @par Definitions
- * @e facet @e descriptor is a type that contains information to access
- * the facets attached to the halfedge data structure.
- *
- * @par Valid Expressions
- * None.
- *
- * @par Expression Semantics
- * None.
- *
- * @par Complexity guarantees
- * None.
- *
- * @par Invariants
- * None.
- *
- * @par Concept-checking class
- * \code
- * template <class HDS>
- * struct FacetHDSConcept {
- * typedef typename hds_traits<HDS>::facet_descriptor facet_descriptor;
- * void constraints() {
- * using namespace boost;
- * function_requires<HDSConcept>();
- * function_requires<DefaultConstructibleConcept<facet_descriptor> >();
- * function_requires<CopyConstructibleConcept<facet_descriptor> >();
- * function_requires<EqualityComparableConcept<facet_descriptor> >();
- * function_requires<AssignableConcept<facet_descriptor> >();
- * const_constraints(hds);
- * }
- * void const_constraints(HDS const& hds) {
- * }
- * HDS hds;
- * facet_descriptor f;
- * };
- * \endcode
- */
+//facet_hds_concept.hpp -*- C++ -*-
+//
+//@PURPOSE: Provide 'FacetHDS' concept definition, and concept checking class.
+//
+//@DESCRIPTION: This file provides a single class template that,
+// when used with the following concept-checking utilities:
+//..
+// boost::function_requires<FacetHDSConcept<HDS> >();
+//..
+// inside a function body, or
+//..
+// BOOST_CLASS_REQUIRE(HDS, boost::hdstl,FacetHDSConcept);
+//..
+// inside a class body, checks whether the type given as template
+// argument is a model of the HDS concept described on the page [facethds].
+//
+//@CONCEPT: [facethds] Facet HDS concept
+//
+///Definition
+///----------
+// This concept refines the 'HDSConcept', and specifies additional facet
+// descriptor to handle facets in the 'HDS' data structure.
+//
+///Refinement of:
+///--------------
+// - 'HDSConcept'
+//
+///Notation
+///--------
+// - 'HDS' A type that is a model of FacetHDSConcept
+// - 'hds' A non-modifiable instance of HDS
+// - 'f' Facet descriptor, of type 'hds_traits<HDS>::facet_descriptor'
+//
+///Associated types
+///----------------
+// - 'hds_traits<HDS>::facet_descriptor': must be 'DefaultConstructible',
+// 'CopyConstructible', 'EqualityComparable', and 'Assignable'.
+//
+///Definitions
+///-----------
+// - 'halfedge_descriptor' is a type that contains information to access
+// the halfedge. (See the 'HDSConcept' for a full definition.)
+// - 'facet_descriptor' is a type that contains information to access the
+// facet to the left of the halfedge (in counter clockwise rotation).
+//
+///Valid Expressions
+///-----------------
+// See the valid expressions of the 'HDS' concept.
+//
+///Expression Semantics
+///--------------------
+// See the expression semantics of the 'HDS' concept.
+//
+///Complexity guarantees
+///---------------------
+// See the complexity guarantees of the 'HDS' concept.
+//
+///Invariants
+///----------
+// 'FacetHDSConcept' should validate all the invariants for the 'HDSConcept'.
+//
+///Concept-checking class
+///----------------------
+//..
+// template <class HDS>
+// struct FacetHDSConcept {
+// typedef typename hds_traits<HDS>::facet_descriptor facet_descriptor;
+// void constraints() {
+// using namespace boost;
+// function_requires<HDSConcept>();
+// function_requires<DefaultConstructibleConcept<facet_descriptor> >();
+// function_requires<CopyConstructibleConcept<facet_descriptor> >();
+// function_requires<EqualityComparableConcept<facet_descriptor> >();
+// function_requires<AssignableConcept<facet_descriptor> >();
+// const_constraints(hds);
+// }
+// void const_constraints(HDS const& hds) {
+// }
+// HDS hds;
+// facet_descriptor f;
+// };
+//..
 
 #ifdef BOOST_HDSTL_CONCEPTS_FACETHDSCONCEPT_HPP
 #define BOOST_HDSTL_CONCEPTS_FACETHDSCONCEPT_HPP 1
 
+#include <boost/concepts.h>
+
 namespace hdstl{
 namespace concepts {
 
- /**
- * @class FacetHDSConcept
- *
- * @brief Facet HDS concept checking class
- *
- * @par Definition
- * This class provides a concept checking class for the FacetHDSConcept,
- * i.e., using the statement boost::function_requires<FacetHDSConcept<HDS>
- * >() inside a function body, or BOOST_CLASS_REQUIRE(HDS, boost::hdstl,
- * FacetHDSConcept) inside a class definition body, should trigger a
- * compile-time error if the type HDS does not model the FacetHDSConcept.
- */
    template <class HDS>
    struct FacetHDSConcept {
- //@{
- /** @name Required types:
- * The specialization of hds_traits<HDS> must have the required types
- * below, obeying the types requirements stated in the detailed
- * description.
- */
- typedef typename hds_traits<HDS>::facet_descriptor facet_descriptor;
- //@}
-
- /**
- * @name Defined constraints:
- */
- void constraints() {
- using namespace boost;
- function_requires<HDSConcept>();
- function_requires<DefaultConstructibleConcept<facet_descriptor> >();
- function_requires<CopyConstructibleConcept<facet_descriptor> >();
- function_requires<EqualityComparableConcept<facet_descriptor> >();
- function_requires<AssignableConcept<facet_descriptor> >();
-
- const_constraints(hds);
- }
-
- /**
- * Defined const constraints:
- */
- void const_constraints(HDS const& hds) {
- }
- HDS hds;
- facet_descriptor f;
+ // This class provides a concept checking class for the
+ // 'FacetHDSConcept', i.e., using the statement
+ //..
+ // boost::function_requires<FacetHDSConcept<HDS>()
+ //..
+ // inside a function body, or
+ //..
+ // BOOST_CLASS_REQUIRE(HDS, boost::hdstl, FacetHDSConcept);
+ //..
+ // inside a class definition body, should trigger a compile-time error
+ // if the type HDS does not model the 'FacetHDSConcept'.
+
+ // TYPES
+ typedef typename hds_traits<HDS>::facet_descriptor facet_descriptor;
+ // The specialization of 'hds_traits<HDS>' must have these required
+ // types, obeying the types requirements stated in the detailed
+ // description of the 'FacetHDS' concept on page [facethdsconcept].
+
+ //MANIPULATORS
+ void constraints()
+ // Check that the 'HDS' template parameters satisfies all the
+ // constraints of 'FacetHDSConcept' on page [facethdsconcept].
+ {
+ using namespace boost;
+ function_requires<HDSConcept>();
+ function_requires<DefaultConstructibleConcept<facet_descriptor> >();
+ function_requires<CopyConstructibleConcept<facet_descriptor> >();
+ function_requires<EqualityComparableConcept<facet_descriptor> >();
+ function_requires<AssignableConcept<facet_descriptor> >();
+
+ const_constraints(hds);
+ }
+
+ // ACCESSORS
+ void const_constraints(HDS const& hds)
+ // Check that the non-modifiable 'HDS' template parameters
+ // satisfies all the constraints of 'FacetHDSConcept'.
+ {
+ }
+
+ private:
+ //DATA
+ FacetHDS hds; // a halfedge data structure object
+ facet_descriptor f; // a facet descriptor
    };
 
 } // close namespace concepts

Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/forward_hds_concept.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/forward_hds_concept.hpp (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/forward_hds_concept.hpp 2007-06-13 02:22:54 EDT (Wed, 13 Jun 2007)
@@ -69,13 +69,13 @@
 ///--------------------
 // In addition to the expression semantics of the 'HDS' concept:
 // - 'next_in_facet(hds,h)' returns a halfedge descriptor to the halfedge
-// preceding 'h' in the adjacent facet cycle, when facet cycles are
+// succeeding 'h' in the adjacent facet cycle, when facet cycles are
 // oriented in counter-clockwise order.
 // - 'next_at_source(hds,h)' returns a halfedge descriptor to the halfedge
-// preceding 'h' around the source vertex of 'h', when halfedges are
+// succeeding 'h' around the source vertex of 'h', when halfedges are
 // ordered around a given vertex in clockwise order.
 // - 'next_at_target(hds,h)' returns a halfedge descriptor to the halfedge
-// preceding 'h' around the target vertex of 'h', when halfedges are
+// succeeding 'h' around the target vertex of 'h', when halfedges are
 // ordered around a given vertex in clockwise order.
 //
 ///Complexity guarantees
@@ -134,8 +134,8 @@
 
     template <class HDS>
     struct ForwardHDSConcept {
- // This class provides a concept checking class for the ForwardHDSConcept,
- // i.e., using the statement
+ // This class provides a concept checking class for the
+ // 'ForwardHDSConcept', i.e., using the statement
         //..
         // boost::function_requires<ForwardHDSConcept<HDS>()
         //..

Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/hds_concept.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/hds_concept.hpp (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/hds_concept.hpp 2007-06-13 02:22:54 EDT (Wed, 13 Jun 2007)
@@ -93,12 +93,12 @@
 // }
 //..
 
-#include <boost/concepts.h>
-
 #ifdef BOOST_HDSTL_CONCEPTS_HDSCONCEPT_HPP
 #define BOOST_HDSTL_CONCEPTS_HDSCONCEPT_HPP 1
 
-namespace hdstl{
+#include <boost/concepts.h>
+
+namespace hdstl {
 namespace concepts {
 
     template <class HDS>
@@ -143,10 +143,10 @@
             h = opposite(hds,h);
         }
 
- private:
- // DATA
- HDS hds; // a halfedge data structure object
- halfedge_descriptor h; // a halfedge descriptor
+ private:
+ // DATA
+ HDS hds; // a halfedge data structure object
+ halfedge_descriptor h; // a halfedge descriptor
     };
 
 } // close namespace concepts

Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_backward_hds_concept.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_backward_hds_concept.hpp 2007-06-13 02:22:54 EDT (Wed, 13 Jun 2007)
@@ -0,0 +1,183 @@
+//mutable_backward_hds_concept.hpp -*- C++ -*-
+//
+//@PURPOSE: Provide 'MutableBackwardHDS' concept definition and concept-checking class.
+//
+//@DESCRIPTION: This file provides a single class template that,
+// when used with the following concept-checking utilities:
+//..
+// boost::function_requires<MutableBackwardHDSConcept<HDS> >();
+//..
+// inside a function body, or
+//..
+// BOOST_CLASS_REQUIRE(HDS, boost::hdstl, MutableBackwardHDSConcept);
+//..
+// inside a class body, checks whether the type given as template
+// argument is a model of the HDS concept described on the page
+// [mutablebackwardhds].
+//
+//@CONCEPT: [mutablebackwardhds] Mutable Backward HDS concept
+//
+///Definition
+///----------
+// This concept refines the 'BackwardHDSConcept' and the 'MutableHDSConcept'
+// with additional mutable operations for the halfedge data structure.
+//
+///Refinement of
+///-------------
+// - 'MutableHDSConcept'
+// - 'BackwardHDSConcept'
+//
+///Notation
+///--------
+// - 'HDS' A type that is a model of 'MutableBackwardHDSConcept'
+// - 'hds' A non-modifiable instance of 'HDS'
+// - 'h','g' Halfedge descriptors, of type
+// 'hds_traits<HDS>::halfedge_descriptor'
+//
+///Associated types
+///----------------
+// - 'hds_traits<HDS>::halfedge_descriptor': from 'HDSConcept'.
+// - 'hds_traits<HDS>::traversal_category': from 'BackwardHDSConcept'.
+// - 'hds_traits<HDS>::backward_category': from 'BackwardHDSConcept'.
+//
+///Definitions
+///-----------
+// - 'halfedge_descriptor' is a type that contains information to access
+// the halfedge. (See the 'HDS' concept for a full definition.)
+// - 'traversal_category' is a type that contains information about the
+// direction of the traversal, which is forward, backward or bidirectional.
+// (See the 'HDS' concept for a full definition.)
+// - 'backward_category' defines the primary accessor of the backward
+// information for use by algorithms which desire the most direct access.
+// (See the 'HDS' concept for a full definition.)
+//
+///Valid Expressions
+///-----------------
+// In addition to the valid expressions of the 'HDS' concept, and the
+// 'BackwardHDS' concept:
+// - 'set_prev_in_facet(hds,h,g)' sets 'g' as the prev_in_facet value of 'h'.
+// - 'set_prev_at_source(hds,h,g)' sets 'g' as the prev_at_source value of
+// 'h'.
+// - 'set_prev_at_target(hds,h,g)' sets 'g' as the prev_at_target value of
+// 'h'.
+//
+///Expression Semantics
+///--------------------
+// In addition to the expression semantics of the 'HDS' concept, and the
+// 'BackwardHDS' concept:
+// - 'set_prev_in_facet(hds,h,g)' set 'g' as the halfedge
+// preceding 'h' in the adjacent facet cycle, when facet cycles are
+// oriented in counter-clockwise order.
+// - 'set_prev_at_source(hds,h,g)' sets 'g' as the halfedge
+// preceding 'h' around the source vertex of 'h', when halfedges are
+// ordered around a given vertex in clockwise order.
+// - 'set_prev_at_target(hds,h,g)' sets 'g' as the halfedge
+// preceding 'h' around the target vertex of 'h', when halfedges are
+// ordered around a given vertex in clockwise order.
+//
+///Complexity guarantees
+///---------------------
+// - 'set_prev_in_facet(hds,h,g)': amortized constant time.
+// - 'set_prev_at_source(hds,h,g)': amortized constant time.
+// - 'set_prev_at_target(hds,h,g)': amortized constant time.
+//
+///Invariants
+///----------
+// All the 'BackwardHDS' invariants should hold after the mutable
+// operations. (See the 'BackwardHDS' concept invariants for a full definition.)
+//
+///Concept-checking class
+///----------------------
+//..
+// template <class HDS>
+// struct MutableBackwardHDSConcept {
+// typedef typename hds_traits<HDS>::halfedge_descriptor halfedge_descriptor;
+// typedef typename hds_traits<HDS>::traversal_category traversal_category;
+// typedef typename hds_traits<HDS>::backward_category backward_category;
+// void constraints()
+// {
+// using namespace boost;
+// function_requires<BackwardHDSConcept<HDS> >();
+// function_requires<MutableHDSConcept<HDS> >();
+// set_prev_in_facet(hds,h,g);
+// set_prev_at_source(hds,h,g);
+// set_prev_at_target(hds,h,g);
+// const_constraints(hds);
+// }
+// void const_constraints(HDS const& hds)
+// {
+// }
+// private:
+// MutableBackwardHDS hds;
+// halfedge_descriptor h;
+// halfedge_descriptor g;
+// };
+//..
+
+#ifdef BOOST_HDSTL_CONCEPTS_MUTABLEBACKWARDHDSCONCEPT_HPP
+#define BOOST_HDSTL_CONCEPTS_MUTABLEBACKWARDHDSCONCEPT_HPP 1
+
+#include <boost/concepts.h>
+
+namespace hdstl{
+namespace concepts{
+
+ template <class HDS>
+ struct MutableBackwardHDSConcept {
+ // This class provides a concept checking class for the
+ // MutableBackwardHDSConcept, i.e., using the statement
+ //..
+ // boost::function_requires<MutableBackwardHDSConcept<HDS>()
+ //..
+ // inside a function body, or
+ //..
+ // BOOST_CLASS_REQUIRE(HDS, boost::hdstl, MutableBackwardHDSConcept);
+ //..
+ // inside a class definition body, should trigger a compile-time error
+ // if the type HDS does not model the 'MutableBackwardHDSConcept'.
+
+ // TYPES
+ typedef typename hds_traits<HDS>::halfedge_descriptor halfedge_descriptor;
+ typedef typename hds_traits<HDS>::traversal_category traversal_category;
+ typedef typename hds_traits<HDS>::backward_category backward_category;
+ // The specialization of 'hds_traits<HDS>' must have these
+ // required types, obeying the types requirements stated in the
+ // detailed description of the 'MutableBackwardHDS' concept on page
+ // [mutablebackwardhdsconcept].
+
+ // MANIPULATORS
+ void constraints()
+ // Check that the 'HDS' template parameters satisfies all the
+ // constraints of 'MutableBackwardHDSConcept' on page
+ // [mutablebackwardhdsconcept].
+ {
+ using namespace boost;
+
+ function_requires<BackwardHDSConcept<HDS> >();
+ function_requires<MutableHDSConcept<HDS> >();
+
+ set_prev_in_facet(hds,h,g);
+ set_prev_at_source(hds,h,g);
+ set_prev_at_target(hds,h,g);
+
+ const_constraints(hds);
+ }
+
+ // ACCESSORS
+ void const_constraints(HDS const& hds)
+ // Check that the non-modifiable 'HDS' template parameters
+ // satisfies all the constraints of 'MutableBackwardHDSConcept'.
+ {
+ }
+
+ private:
+ // DATA
+ MutableBackwardHDS hds; // a halfedge data structure object
+ halfedge_descriptor h; // a halfedge descriptor
+ halfedge_descriptor g; // another halfedge descriptor
+ };
+
+} // close namespace concepts
+} // close namespace hdstl
+
+#endif

Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_bidirectional_hds_concept.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_bidirectional_hds_concept.hpp 2007-06-13 02:22:54 EDT (Wed, 13 Jun 2007)
@@ -0,0 +1,167 @@
+//mutable_bidirectional_hds_concept.hpp -*- C++ -*-
+//
+//@PURPOSE: Provide 'MutableBidirectionalHDS' concept definition, and
+//concept-checking class.
+//
+//@DESCRIPTION: This file provides a single class template that,
+// when used with the following concept-checking utilities:
+//..
+// boost::function_requires<MutableBidirectionalHDSConcept<HDS> >();
+//..
+// inside a function body, or
+//..
+// BOOST_CLASS_REQUIRE(HDS, boost::hdstl,MutableBidirectionalHDSConcept);
+//..
+// inside a class body, checks whether the type given as template
+// argument is a model of the HDS concept described on the page
+// [mutablebidirectionalhds].
+//
+//@CONCEPT: [mutablebidirectionalhds] Mutable Bidirectional HDS concept
+//
+///Definition
+///-----------
+// This concept refines the 'BidirectionalHDSConcept',
+// 'MutableForwardHDSConcept' and the 'MutableBackwardHDSConcept',
+// and specifies additional mutable operations to manipulate
+// the 'HDS' data structure.
+//
+///Refinement of
+///-------------
+// - 'BidirectionalHDSConcept'
+// - 'MutableForwardHDSConcept'
+// - 'MutableBackwardHDSConcept'
+//
+///Notation
+///--------
+// - 'HDS' A type that is a model of 'MutableBidirectionalHDSConcept'
+// - 'hds' A non-modifiable instance of 'HDS'
+// - 'h','g' Halfedge descriptors, of type
+// 'hds_traits<HDS>::halfedge_descriptor'
+//
+///Associated types
+///----------------
+// - 'hds_traits<HDS>::halfedge_descriptor': from 'HDSConcept'.
+// - 'hds_traits<HDS>::traversal_category' : must be convertible to
+// 'hds_traits<HDS>::bidirectional_traversal_tag'.
+// - 'hds_traits<HDS>::forward_category' : from 'ForwardHDSConcept'
+// - 'hds_traits<HDS>::backward_category' : from 'BackwardHDSConcept'
+//
+///Definitions
+///-----------
+// - 'halfedge_descriptor' is a type that contains information to access
+// the halfedge. (See the 'HDSConcept' for a full definition.)
+// - 'traversal_category' is a type that contains information about the
+// direction of the traversal, which is forward, backward or bidirectional.
+// For this 'MutableBidirectionalHDS' concept, the 'traversal_category' has to be
+// convertible to the 'hdstl::bidirectional_traversal_tag' type defined
+// in '<boost/hdstl.hpp>'.
+// - 'forward_category' defines the primary accessor of the forward
+// information for use by algorithms which desire the most direct access.
+// - 'backward_category' defines the primary accessor of the backward
+// information for use by algorithms which desire the most direct access.
+//
+///Valid Expressions
+///-----------------
+// See the valid expressions of the 'MutableForwardHDSConcept' and
+// the 'MutableBackwardHDSConcept'.
+//
+///Expression Semantics
+///--------------------
+// See the expression semantics of the 'MutableForwardHDSConcept' and
+// the 'MutableBackwardHDSConcept'.
+//
+///Complexity guarantees
+///---------------------
+// See the complexity guarantees of the 'MutableForwardHDSConcept' and
+// the 'MutableBackwardHDSConcept'.
+//
+///Invariants
+///----------
+// 'MutableBidirectionalHDSConcept' should validate all the invariants for the
+// 'MutableForwardHDSConcept', and the 'MutableBackwardHDSConcept'.
+//
+///Concept-checking class
+///----------------------
+//..
+// template <class HDS>
+// struct MutableBidirectionalHDSConcept {
+// typedef typename hds_traits<HDS>::halfedge_descriptor halfedge_descriptor;
+// typedef typename hds_traits<HDS>::traversal_category traversal_category;
+// typedef typename hds_traits<HDS>::forward_category forward_category;
+// typedef typename hds_traits<HDS>::backward_category backward_category;
+// void constraints() {
+// using namespace boost;
+// function_requires<BidirectionalHDSConcept<HDS> >();
+// function_requires<MutableForwardHDSConcept<HDS> >();
+// function_requires<MutableBackwardHDSConcept<HDS> >();
+// function_requires<ConvertibleConcept<traversal_category,
+// bidirectional_traversal_tag> >();
+// }
+// void const_constraints(HDS const& hds) {
+// }
+// MutableBidirectionalHDS hds;
+// };
+//..
+
+#ifdef BOOST_HDSTL_CONCEPTS_MUTABLEBIDIRECTIONALHDSCONCEPT_HPP
+#define BOOST_HDSTL_CONCEPTS_MUTABLEBIDIRECTIONALHDSCONCEPT_HPP 1
+
+#include <boost/concepts.h>
+
+namespace hdstl{
+namespace concepts{
+
+ template <class HDS>
+ struct MutableBidirectionalHDSConcept {
+ // This class provides a concept checking class for the
+ // 'MutableBidirectionalHDSConcept', i.e., using the statement
+ //..
+ // boost::function_requires<MutableBidirectionalHDSConcept<HDS>()
+ //..
+ // inside a function body, or
+ //..
+ // BOOST_CLASS_REQUIRE(HDS, boost::hdstl, MutableBidirectionalHDSConcept);
+ //..
+ // inside a class definition body, should trigger a compile-time error
+ // if the type HDS does not model the 'MutableBidirectionalHDSConcept'.
+
+ // TYPES
+ typedef typename hds_traits<HDS>::halfedge_descriptor halfedge_descriptor;
+ typedef typename hds_traits<HDS>::traversal_category traversal_category;
+ typedef typename hds_traits<HDS>::forward_category forward_category;
+ typedef typename hds_traits<HDS>::backward_category backward_category;
+ // The specialization of 'hds_traits<HDS>' must have these required
+ // types, obeying the types requirements stated in the detailed
+ // description of the 'MutableBidirectionalHDS' concept on page
+ // [mutablebidirectionalhdsconcept].
+
+ //MANIPULATORS
+ void constraints()
+ // Check that the 'HDS' template parameters satisfies all the
+ // constraints of 'MutableBidirectionalHDSConcept' on page
+ // [mutablebidirectionalhdsconcept].
+ {
+ using namespace boost;
+ function_requires<BidirectionalHDSConcept<HDS> >();
+ function_requires<MutableForwardHDSConcept<HDS> >();
+ function_requires<MutableBackwardHDSConcept<HDS> >();
+ function_requires<ConvertibleConcept<traversal_category,
+ bidirectional_traversal_tag> >();
+ }
+
+ // ACCESSORS
+ void const_constraints(HDS const& hds)
+ // Check that the non-modifiable 'HDS' template parameters
+ // satisfies all the constraints of 'MutableBidirectionalHDSConcept'.
+ {
+ }
+
+ private:
+ //DATA
+ MutableBidirectionalHDS hds; // a halfedge data structure object
+ };
+
+} // close namespace concepts
+} // close namespace hdstl
+
+#endif

Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_facet_hds_concept.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_facet_hds_concept.hpp 2007-06-13 02:22:54 EDT (Wed, 13 Jun 2007)
@@ -0,0 +1,181 @@
+//mutable_facet_hds_concept.hpp -*- C++ -*-
+//
+//@PURPOSE: Provide 'MutableFacetHDS' concept definition, and concept checking class.
+//
+//@DESCRIPTION: This file provides a single class template that,
+// when used with the following concept-checking utilities:
+//..
+// boost::function_requires<MutableFacetHDSConcept<HDS> >();
+//..
+// inside a function body, or
+//..
+// BOOST_CLASS_REQUIRE(HDS, boost::hdstl,MutableFacetHDSConcept);
+//..
+// inside a class body, checks whether the type given as template
+// argument is a model of the HDS concept described on the page
+// [mutablefacethds].
+//
+//@CONCEPT: [mutablefacethds] Mutable Facet HDS concept
+//
+///Definition
+///----------
+// This concept refines the 'MutableHDSConcept' and 'FacetHDSConcept',
+// and specifies additional mutable operations to manipulate facet descriptors
+// in the 'HDS' data structure.
+//
+///Refinement of:
+///--------------
+// - 'MutableHDSConcept'
+// - 'FacetHDSConcept'
+//
+///Notation
+///--------
+// - 'HDS' A type that is a model of MutableFacetHDSConcept
+// - 'hds' A non-modifiable instance of HDS
+// - 'f' Facet descriptor, of type 'hds_traits<HDS>::facet_descriptor'
+//
+///Associated types
+///----------------
+// - 'hds_traits<HDS>::facet_descriptor': must be 'DefaultConstructible',
+// 'CopyConstructible', 'EqualityComparable', and 'Assignable'.
+//
+///Definitions
+///-----------
+// - 'halfedge_descriptor' is a type that contains information to access
+// the halfedge. (See the 'HDSConcept' for a full definition.)
+// - 'facet_descriptor' is a type that contains information to access the
+// facets. (See the 'FacetHDSConcept' for a full definition.)
+//
+///Valid Expressions
+///-----------------
+// In addition to the valid expressions of the 'FacetHDS' concept, and the
+// 'MutableHDS' concept:
+// - set_facet(hds,h,f) sets the facet descriptor value of 'h' to 'f'.
+// - add_facet(hds,f) adds a new facet 'f' to the 'hds' data structure.
+// - remove_facet(hds,f) removes the facet 'f' from the 'hds' data structure.
+//
+///Expression Semantics
+///--------------------
+// In addition to the expression semantics of the 'FacetHDS' concept, and the
+// 'MutableHDS' concept.
+// - set_facet(hds,h,f) sets the facet descriptor value of 'h' to 'f' for a
+// single halfedge in the 'hds' data structure.
+// - add_facet(hds,f) adds a new facet 'f' to the 'hds' data structure.
+// By this operation the facet is added but no connections to the halfedges
+// are set. In order to assign facets to halfedges 'set_facet(hds,h,f)'
+// operation should be used.
+// - remove_facet(hds,f) removes the facet 'f' from the 'hds' data structure,
+// by iterating in counter-clockwise order around this facet and removing
+// the connections with the halfedges.
+//
+///Complexity guarantees
+///---------------------
+// - set_facet(hds,h,f) : amortized constant time.
+// - add_facet(hds,f) : amortized constant time.
+// - remove_facet(hds,f): 'O(e)', where 'e' is the maximum number of edges of
+// the facet.
+//
+///Invariants
+///----------
+// 'MutableFacetHDSConcept' should validate all the invariants for the
+// 'FacetHDSConcept' and the 'MutableHDSConcept'.
+//
+///Concept-checking class
+///----------------------
+//..
+// template <class HDS>
+// struct MutableFacetHDSConcept {
+// typedef typename hds_traits<HDS>::facet_descriptor facet_descriptor;
+// void constraints() {
+// using namespace boost;
+// function_requires<HDSConcept>();
+// function_requires<DefaultConstructibleConcept<facet_descriptor> >();
+// function_requires<CopyConstructibleConcept<facet_descriptor> >();
+// function_requires<EqualityComparableConcept<facet_descriptor> >();
+// function_requires<AssignableConcept<facet_descriptor> >();
+// set_facet(hds,h,f);
+// add_facet(hds,f);
+// delete_facet(hds,f);
+// const_constraints(hds);
+// }
+// void const_constraints(HDS const& hds) {
+// set_facet(hds,h,f);
+// add_facet(hds,f);
+// delete_facet(hds,f);
+// }
+// HDS hds;
+// halfedge_descriptor h;
+// facet_descriptor f;
+// };
+//..
+
+#ifdef BOOST_HDSTL_CONCEPTS_MUTABLEFACETHDSCONCEPT_HPP
+#define BOOST_HDSTL_CONCEPTS_MUTABLEFACETHDSCONCEPT_HPP 1
+
+#include <boost/concepts.h>
+
+namespace hdstl{
+namespace concepts {
+
+ template <class HDS>
+ struct MutableFacetHDSConcept {
+ // This class provides a concept checking class for the
+ // 'MutableFacetHDSConcept', i.e., using the statement
+ //..
+ // boost::function_requires<MutableFacetHDSConcept<HDS>()
+ //..
+ // inside a function body, or
+ //..
+ // BOOST_CLASS_REQUIRE(HDS, boost::hdstl, MutableFacetHDSConcept);
+ //..
+ // inside a class definition body, should trigger a compile-time error
+ // if the type HDS does not model the 'MutableFacetHDSConcept'.
+
+ // TYPES
+ typedef typename hds_traits<HDS>::facet_descriptor facet_descriptor;
+ // The specialization of 'hds_traits<HDS>' must have these required
+ // types, obeying the types requirements stated in the detailed
+ // description of the 'MutableFacetHDS' concept on page
+ // [mutablefacethdsconcept].
+
+ //MANIPULATORS
+ void constraints()
+ // Check that the 'HDS' template parameters satisfies all the
+ // constraints of 'MutableFacetHDSConcept' on page
+ // [mutablefacethdsconcept].
+ {
+ using namespace boost;
+ function_requires<HDSConcept>();
+ function_requires<DefaultConstructibleConcept<facet_descriptor> >();
+ function_requires<CopyConstructibleConcept<facet_descriptor> >();
+ function_requires<EqualityComparableConcept<facet_descriptor> >();
+ function_requires<AssignableConcept<facet_descriptor> >();
+
+ set_facet(hds,h,f);
+ add_facet(hds,f);
+ delete_facet(hds,f);
+
+ const_constraints(hds);
+ }
+
+ // ACCESSORS
+ void const_constraints(HDS const& hds)
+ // Check that the non-modifiable 'HDS' template parameters
+ // satisfies all the constraints of 'MutableFacetHDSConcept'.
+ {
+ set_facet(hds,h,f);
+ add_facet(hds,f);
+ delete_facet(hds,f);
+ }
+
+ private:
+ //DATA
+ MutableFacetHDS hds; // a halfedge data structure object
+ halfedge_descriptor h; // a halfedge descriptor
+ facet_descriptor f; // a facet descriptor
+ };
+
+} // close namespace concepts
+} // close namespace hdstl
+
+#endif

Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_forward_hds_concept.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_forward_hds_concept.hpp 2007-06-13 02:22:54 EDT (Wed, 13 Jun 2007)
@@ -0,0 +1,183 @@
+//mutable_forward_hds_concept.hpp -*- C++ -*-
+//
+//@PURPOSE: Provide 'MutableForwardHDS' concept definition and concept-checking class.
+//
+//@DESCRIPTION: This file provides a single class template that,
+// when used with the following concept-checking utilities:
+//..
+// boost::function_requires<MutableForwardHDSConcept<HDS> >();
+//..
+// inside a function body, or
+//..
+// BOOST_CLASS_REQUIRE(HDS, boost::hdstl, MutableForwardHDSConcept);
+//..
+// inside a class body, checks whether the type given as template
+// argument is a model of the HDS concept described on the page
+// [mutableforwardhds].
+//
+//@CONCEPT: [mutableforwardhds] Mutable Forward HDS concept
+//
+///Definition
+///----------
+// This concept refines the 'ForwardHDSConcept' and the 'MutableHDSConcept'
+// with additional mutable operations for the halfedge data structure.
+//
+///Refinement of
+///-------------
+// - 'MutableHDSConcept'
+// - 'ForwardHDSConcept'
+//
+///Notation
+///--------
+// - 'HDS' A type that is a model of 'MutableForwardHDSConcept'
+// - 'hds' A non-modifiable instance of 'HDS'
+// - 'h','g' Halfedge descriptors, of type
+// 'hds_traits<HDS>::halfedge_descriptor'
+//
+///Associated types
+///----------------
+// - 'hds_traits<HDS>::halfedge_descriptor': from 'HDSConcept'.
+// - 'hds_traits<HDS>::traversal_category': from 'ForwardHDSConcept'.
+// - 'hds_traits<HDS>::forward_category': from 'ForwardHDSConcept'.
+//
+///Definitions
+///-----------
+// - 'halfedge_descriptor' is a type that contains information to access
+// the halfedge. (See the 'HDS' concept for a full definition.)
+// - 'traversal_category' is a type that contains information about the
+// direction of the traversal, which is forward, backward or bidirectional.
+// (See the 'HDS' concept for a full definition.)
+// - 'forward_category' defines the primary accessor of the forward
+// information for use by algorithms which desire the most direct access.
+// (See the 'HDS' concept for a full definition.)
+//
+///Valid Expressions
+///-----------------
+// In addition to the valid expressions of the 'HDS' concept, and the
+// 'ForwardHDS' concept:
+// - 'set_next_in_facet(hds,h,g)' sets 'g' as the next_in_facet value of 'h'.
+// - 'set_next_at_source(hds,h,g)' sets 'g' as the next_at_source value of
+// 'h'.
+// - 'set_next_at_target(hds,h,g)' sets 'g' as the next_at_target value of
+// 'h'.
+//
+///Expression Semantics
+///--------------------
+// In addition to the expression semantics of the 'HDS' concept, and the
+// 'ForwardHDS' concept:
+// - 'set_next_in_facet(hds,h,g)' set 'g' as the halfedge
+// succeeding 'h' in the adjacent facet cycle, when facet cycles are
+// oriented in counter-clockwise order.
+// - 'set_next_at_source(hds,h,g)' sets 'g' as the halfedge
+// succeeding 'h' around the source vertex of 'h', when halfedges are
+// ordered around a given vertex in clockwise order.
+// - 'set_next_at_target(hds,h,g)' sets 'g' as the halfedge
+// succeeding 'h' around the target vertex of 'h', when halfedges are
+// ordered around a given vertex in clockwise order.
+//
+///Complexity guarantees
+///---------------------
+// - 'set_next_in_facet(hds,h,g)': amortized constant time.
+// - 'set_next_at_source(hds,h,g)': amortized constant time.
+// - 'set_next_at_target(hds,h,g)': amortized constant time.
+//
+///Invariants
+///----------
+// All the 'ForwardHDS' invariants should hold after the mutable
+// operations. (See the 'ForwardHDS' concept invariants for a full definition.)
+//
+///Concept-checking class
+///----------------------
+//..
+// template <class HDS>
+// struct MutableForwardHDSConcept {
+// typedef typename hds_traits<HDS>::halfedge_descriptor halfedge_descriptor;
+// typedef typename hds_traits<HDS>::traversal_category traversal_category;
+// typedef typename hds_traits<HDS>::forward_category forward_category;
+// void constraints()
+// {
+// using namespace boost;
+// function_requires<ForwardHDSConcept<HDS> >();
+// function_requires<MutableHDSConcept<HDS> >();
+// set_next_in_facet(hds,h,g);
+// set_next_at_source(hds,h,g);
+// set_next_at_target(hds,h,g);
+// const_constraints(hds);
+// }
+// void const_constraints(HDS const& hds)
+// {
+// }
+// private:
+// MutableForwardHDS hds;
+// halfedge_descriptor h;
+// halfedge_descriptor g;
+// };
+//..
+
+#ifdef BOOST_HDSTL_CONCEPTS_MUTABLEFORWARDHDSCONCEPT_HPP
+#define BOOST_HDSTL_CONCEPTS_MUTABLEFORWARDHDSCONCEPT_HPP 1
+
+#include <boost/concepts.h>
+
+namespace hdstl{
+namespace concepts{
+
+ template <class HDS>
+ struct MutableForwardHDSConcept {
+ // This class provides a concept checking class for the
+ // MutableForwardHDSConcept, i.e., using the statement
+ //..
+ // boost::function_requires<MutableForwardHDSConcept<HDS>()
+ //..
+ // inside a function body, or
+ //..
+ // BOOST_CLASS_REQUIRE(HDS, boost::hdstl, MutableForwardHDSConcept);
+ //..
+ // inside a class definition body, should trigger a compile-time error
+ // if the type HDS does not model the 'MutableForwardHDSConcept'.
+
+ // TYPES
+ typedef typename hds_traits<HDS>::halfedge_descriptor halfedge_descriptor;
+ typedef typename hds_traits<HDS>::traversal_category traversal_category;
+ typedef typename hds_traits<HDS>::forward_category forward_category;
+ // The specialization of 'hds_traits<HDS>' must have these
+ // required types, obeying the types requirements stated in the
+ // detailed description of the 'MutableForwardHDS' concept on page
+ // [mutableforwardhdsconcept].
+
+ // MANIPULATORS
+ void constraints()
+ // Check that the 'HDS' template parameters satisfies all the
+ // constraints of 'MutableForwardHDSConcept' on page
+ // [mutableforwardhdsconcept].
+ {
+ using namespace boost;
+
+ function_requires<ForwardHDSConcept<HDS> >();
+ function_requires<MutableHDSConcept<HDS> >();
+
+ set_next_in_facet(hds,h,g);
+ set_next_at_source(hds,h,g);
+ set_next_at_target(hds,h,g);
+
+ const_constraints(hds);
+ }
+
+ // ACCESSORS
+ void const_constraints(HDS const& hds)
+ // Check that the non-modifiable 'HDS' template parameters
+ // satisfies all the constraints of 'MutableForwardHDSConcept'.
+ {
+ }
+
+ private:
+ // DATA
+ MutableForwardHDS hds; // a halfedge data structure object
+ halfedge_descriptor h; // a halfedge descriptor
+ halfedge_descriptor g; // another halfedge descriptor
+ };
+
+} // close namespace concepts
+} // close namespace hdstl
+
+#endif

Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_hds_concept.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_hds_concept.hpp (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_hds_concept.hpp 2007-06-13 02:22:54 EDT (Wed, 13 Jun 2007)
@@ -1,143 +1,177 @@
-/**
- * @file mutable_hds_concept.hpp
- *
- * @brief Mutable HDS concept definition.
- *
- * @par Definition
- * This concept is the basic Mutable HDS concept, which all the other Mutable
- * HDS concepts refine. It contains a few requirements which are common to all
- * the graph concepts. One should note that a model of Mutable HDS is not
- * required to be a model of Assignable, so algorithms should pass Mutable HDS
- * objects by reference.
- *
- * @par Refinement of:
- * - HDSConcept
- *
- * @par Notation
- * - HDS A type that is a model of MutableHDSConcept
- * - hds A non-modifiable instance of HDS
- * - h1,h2 Halfedge descriptors, of type X::halfedge_descriptor
- *
- * @par Associated types
- * - hds_traits<HDS>::halfedge_descriptor: must be DefaultConstructible and
- * CopyConstructible, EqualityComparable, Assignable.
- *
- * @par Definitions
- * @e halfedge @e descriptor is a type that contains information to access
- * the halfedge. Note that the halfedge descriptor type (accessible as a
- * member of the hds_traits<HDS> type) is an opaque type. All that can be
- * done to it is passing it to the function opposite and letting the hds use
- * the information it contains to find the opposite halfedge. In
- * particular, there is no guarantee that it is a pointer type.
- *
- * @par Valid Expressions
- * - set_opposite(hds,h1,h2): Sets the opposite halfedge.
- * - h = new_edge(hds,h1,h2) : Creates a new edge, with two halfedges.
- * - delete_edge(hds,h1,h2) : Deletes the edge defined by halfedge pairs h1
- * and h2.
- *
- * @par Expression Semantics
- * - set_opposite(hds,h1,h2): Sets h1 and h2 as opposites of each other in
- * the data structure hds.
- * - h = new_edge(hds,h1,h2): Creates a new edge in data structure hds. Since
- * halfedges are actually pairs, the new edge consists of two halfedges,
- * h1 and h2, which are set as opposites of each other.
- * - delete_edge(hds,h1,h2): Since halfedges are defined as pairs, and a single
- * halfedge is useless, they are deleted as pairs also. Delete edge removes
- * the opposite halfedges h1, and h2 from the data structure hds. Note that
- * only the halfedges that form a pair by validating the opposite function
- * can be deleted by this method.
- *
- * @par Complexity guarantees
- * - set_opposite(hds,h1,h2): Amortized constant time.
- * - new_edge(hds,h1,h2): Amortized constant time.
- * - delete_edge(hds,h1,h2): Amortized constant time.
- *
- * @par Invariants
- * - After set_opposite and new_edge functions, h1=opposite(h2), and
- * h2=opposite(h1) should be true.
- * - Before the delete_edge method, h1=opposite(h2), and h2=opposite(h1)
- * should be true.
- *
- * @par Concept-checking class
- * \code
- * template <class HDS>
- * struct MutableHDSConcept {
- * typedef typename hds_traits<HDS>::halfedge_descriptor halfedge_descriptor;
- * void constraints() {
- * using namespace boost;
- * function_requires<HDSConcept<HDS> >();
- * set_opposite(hds,h1,h2);
- * h = new_edge(hds,h1,h2);
- * delete_edge(hds,h1,h2);
- * const_constraints(hds);
- * }
- * void const_constraints(HDS const& hds) {
- * set_opposite(hds,h1,h2);
- * h = new_edge(hds,h1,h2);
- * delete_edge(hds,h1,h2);
- * }
- * HDS hds;
- * halfedge_descriptor h1;
- * halfedge_descriptor h2;
- * };
- * \endcode
- */
+//mutable_hds_concept.hpp -*- C++ -*-
+//
+//@PURPOSE: Provide 'MutableHDS' concept definition and concept-checking class.
+//
+//@DESCRIPTION: This file provides a single class template that,
+// when used with the following concept-checking utilities:
+//..
+// boost::function_requires<MutableHDSConcept<HDS> >();
+//..
+// inside a function body, or
+//..
+// BOOST_CLASS_REQUIRE(HDS, boost::hdstl, MutableHDSConcept);
+//..
+// inside a class body, checks whether the type given as template
+// argument is a model of the MutableHDS concept described on the page
+// [mutablehdsconcept].
+//
+//@CONCEPT: [mutablehdsconcept] Mutable HDS concept definition
+//
+///Definition
+///----------
+// This concept is the basic 'MutableHDSConcept', which all the other
+// 'Mutable HDS concepts' refine. It contains a few requirements which are
+// common to all the mutable graph concepts. One should note that a model of
+// 'MutableHDSConcept' is not required to be a model of 'Assignable', so
+// algorithms should pass 'MutableHDS' objects by reference.
+//
+///Refinement of:
+///--------------
+// - HDSConcept
+//
+///Notation
+///--------
+// - 'HDS' A type that is a model of 'MutableHDSConcept'
+// - 'hds' A non-modifiable instance of 'HDS'
+// - 'h1','h2' Halfedge descriptors, of type
+// 'hds_traits<HDS>::halfedge_descriptor'
+//
+///Associated types
+///----------------
+// - 'hds_traits<HDS>::halfedge_descriptor': must be 'DefaultConstructible',
+// 'CopyConstructible', 'EqualityComparable', and 'Assignable'.
+//
+///Definitions
+///-----------
+// 'halfedge descriptor' is a type that contains information to access
+// the halfedge. Note that the halfedge descriptor type (accessible as a
+// member of the 'hds_traits<HDS>' type) is an opaque type. All that can be
+// done to it is passing it to the function opposite and letting the hds use
+// the information it contains to find the opposite halfedge. In
+// particular, there is no guarantee that it is a pointer type.
+//
+///Valid Expressions
+///-----------------
+// The following expression must be valid and obey the syntactic requirement:
+// - 'set_opposite(hds,h1,h2)': sets the opposite halfedge.
+// - 'h = new_edge(hds,h1,h2)': creates a new edge, with two halfedges.
+// - 'delete_edge(hds,h1,h2)' : deletes the edge defined by halfedge pairs
+// 'h1' and 'h2'.
+//
+///Expression Semantics
+///--------------------
+// The expressions semantics are as follows:
+// - 'set_opposite(hds,h1,h2)': sets 'h1' and 'h2' as opposites of each other
+// in the data structure 'hds'.
+// - 'h = new_edge(hds,h1,h2)': creates a new edge in data structure 'hds'.
+// Since halfedges are actually pairs, the new edge consists of two
+// halfedges, 'h1' and 'h2', which are set as opposites of each other.
+// - 'delete_edge(hds,h1,h2)' : since halfedges are defined as pairs, and a
+// single halfedge is useless, they are deleted as pairs also. Delete edge
+// removes the opposite halfedges 'h1', and 'h2' from the data structure
+// 'hds'. Note that only the halfedges that form a pair by validating the
+// 'opposite' function can be deleted by this method.
+//
+///Complexity guarantees
+///---------------------
+// - 'set_opposite(hds,h1,h2)': amortized constant time.
+// - 'h=new_edge(hds,h1,h2)' : amortized constant time.
+// - 'delete_edge(hds,h1,h2)' : amortized constant time.
+//
+///Invariants
+///----------
+// - Post-condition for 'set_opposite(hds,h1,h2)' and 'h=new_edge(hds,h1,h2)':
+// 'h1=opposite(h2)', and 'h2=opposite(h1)' should verify.
+// - Pre-condition for 'delete_edge(hds,h1,h2)': 'h1=opposite(h2)', and
+// 'h2=opposite(h1)' should verify.
+//
+///Concept-checking class
+///----------------------
+//..
+// template <class HDS>
+// struct MutableHDSConcept {
+// typedef typename hds_traits<HDS>::halfedge_descriptor halfedge_descriptor;
+// void constraints() {
+// using namespace boost;
+// function_requires<HDSConcept<HDS> >();
+// set_opposite(hds,h1,h2);
+// h = new_edge(hds,h1,h2);
+// delete_edge(hds,h1,h2);
+// const_constraints(hds);
+// }
+// void const_constraints(HDS const& hds) {
+// set_opposite(hds,h1,h2);
+// h = new_edge(hds,h1,h2);
+// delete_edge(hds,h1,h2);
+// }
+// HDS hds;
+// halfedge_descriptor h1;
+// halfedge_descriptor h2;
+// };
+//..
 
 #ifdef BOOST_HDSTL_CONCEPTS_MUTABLEHDSCONCEPT_HPP
 #define BOOST_HDSTL_CONCEPTS_MUTABLEHDSCONCEPT_HPP 1
 
-namespace hdstl{
+#include <boost/concepts.h>
+
+namespace hdstl {
 namespace concepts {
 
- /**
- * @class MutableHDSConcept
- *
- * @brief MutableHDS concept checking class
- *
- * @par Definition
- * This class provides a concept checking for the MutableHDSConcept, i.e.,
- * using the statement boost::function_requires<MutableHDSConcept<HDS> >()
- * inside a function body, or BOOST_CLASS_REQUIRE(HDS, boost::hdstl,
- * MutableHDSConcept) inside a class definition body, should trigger a
- * compile-time error if the type HDS does not model the MutableHDSConcept.
- */
- template <class HDS>
- struct MutableHDSConcept {
- //@{
- /** @name Required types:
- * The specialization of hds_traits<HDS> must have the required types
- * below, obeying the types requirements stated in the detailed
- * description.
- */
- typedef typename hds_traits<HDS>::halfedge_descriptor halfedge_descriptor;
- //@}
-
- /**
- * @name Defined constraints:
- */
- void constraints() {
- using namespace boost;
- function_requires<HDSConcept<HDS> >();
-
- set_opposite(hds,h1,h2);
- h = new_edge(hds,h1,h2);
- delete_edge(hds,h1,h2);
- const_constraints(hds);
- }
-
- /**
- * Defined const constraints:
- */
- void const_constraints(HDS const& hds) {
- set_opposite(hds,h1,h2);
- h = new_edge(hds,h1,h2);
- delete_edge(hds,h1,h2);
- }
- HDS hds;
- halfedge_descriptor h1;
- halfedge_descriptor h2;
+ template <class HDS>
+ struct MutableHDSConcept {
+ // This class provides a concept checking class for the
+ // 'MutableHDS' concept defined in [mutablehdsconcept], i.e., using
+ // the statement
+ //..
+ // boost::function_requires<MutableHDSConcept<HDS> >();
+ //..
+ // inside a function body, or
+ //..
+ // BOOST_CLASS_REQUIRE(HDS, boost::hdstl, MutableHDSConcept);
+ //..
+ // inside a class definition body, should trigger a compile-time
+ // error if the type 'HDS' does not model the 'MutableHDS' concept.
+
+ // TYPES
+ typedef typename hds_traits<HDS>::halfedge_descriptor
+ halfedge_descriptor;
+ // The specialization of 'hds_traits<HDS>' must have these
+ // required types, obeying the types requirements stated in the
+ // detailed description of the 'MutableHDS' concept on page
+ // [mutablehdsconcept].
+
+ // MANIPULATORS
+ void constraints()
+ // Check that the 'HDS' template parameters satisfies all the
+ // constraints of 'MutableHDSConcept' on page [mutablehdsconcept].
+ {
+ using namespace boost;
+ function_requires<HDSConcept<HDS> >();
+
+ set_opposite(hds,h1,h2);
+ h = new_edge(hds,h1,h2);
+ delete_edge(hds,h1,h2);
+ const_constraints(hds);
+ }
+
+ // ACCESSORS
+ void const_constraints(HDS const& hds)
+ // Check that the non-modifiable 'HDS' template parameters
+ // satisfies all the constraints of 'MutableHDSConcept'.
+ {
+ set_opposite(hds,h1,h2);
+ h = new_edge(hds,h1,h2);
+ delete_edge(hds,h1,h2);
+ }
+
+ private:
+ // DATA
+ HDS hds; // a halfedge data structure object
+ halfedge_descriptor h1; // a halfedge descriptor
+ halfedge_descriptor h2; // a halfedge descriptor
    };
+
 } // close namespace concepts
 } // close namespace hdstl
 

Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_vertex_hds_concept.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_vertex_hds_concept.hpp 2007-06-13 02:22:54 EDT (Wed, 13 Jun 2007)
@@ -0,0 +1,182 @@
+//mutable_vertex_hds_concept.hpp -*- C++ -*-
+//
+//@PURPOSE: Provide 'MutableVertexHDS' concept definition, and concept-checking class.
+//
+//@DESCRIPTION: This file provides a single class template that,
+// when used with the following concept-checking utilities:
+//..
+// boost::function_requires<MutableVertexHDSConcept<HDS> >();
+//..
+// inside a function body, or
+//..
+// BOOST_CLASS_REQUIRE(HDS, boost::hdstl,MutableVertexHDSConcept);
+//..
+// inside a class body, checks whether the type given as template
+// argument is a model of the HDS concept described on the page [mutablevertexhds].
+//
+//@CONCEPT: [mutablevertexhds] Vertex HDS concept
+//
+///Definition
+///----------
+// This concept refines the 'VertexHDSConcept' and the 'MutableHDS' concept,
+// and specifies additional vertex descriptor to handle vertices in the
+// 'HDS' data structure.
+//
+///Refinement of:
+///--------------
+// - 'VertexHDSConcept'
+// - 'MutableHDSConcept'
+//
+///Notation
+///--------
+// - 'HDS' A type that is a model of 'MutableVertexHDSConcept'
+// - 'hds' A non-modifiable instance of 'HDS'
+// - 'v' Vertex descriptor, of type 'hds_traits<HDS>::vertex_descriptor'
+//
+///Associated types
+///----------------
+// - 'hds_traits<HDS>::vertex_descriptor': must be 'DefaultConstructible',
+// 'CopyConstructible', 'EqualityComparable', and 'Assignable'.
+//
+///Definitions
+///-----------
+// - 'halfedge_descriptor' is a type that contains information to access
+// the halfedge. (See the 'HDSConcept' for a full definition.)
+// - 'vertex_descriptor' is a type that contains information to access the
+// vertex at the source of the halfedge.
+//
+///Valid Expressions
+///-----------------
+// In addition to the valid expressions of the 'MutableHDS' concept, and the
+// 'VertexHDS' concept:
+// - set_vertex(hds,h,v) sets the source vertex descriptor value of 'h' to
+// 'v'.
+// - add_vertex(hds,v) adds a new vertex 'v' to the 'hds' data structure.
+// - remove_vertex(hds,f) removes the vertex 'v' from the 'hds' data
+// structure.
+//
+///Expression Semantics
+///--------------------
+// In addition to the expression semantics of the 'MutableHDS' concept, and the
+// 'VertexHDS' concept:
+// - set_vertex(hds,h,v) sets the source vertex descriptor value of 'h' to
+// 'v' for a single halfedge in the 'hds' data structure.
+// - add_vertex(hds,v) adds a new vertex 'v' to the 'hds' data structure.
+// By this operation the vertex is added but no connections to the halfedges
+// are set. In order to assign vertces to halfedges 'set_vertex(hds,h,v)'
+// operation should be used.
+// - remove_vertex(hds,f) removes the vertex 'v' from the 'hds' data
+// structure, by iterating in clockwise order around the vertex and removing
+// the connections with the halfedges.
+//
+///Complexity guarantees
+///---------------------
+// - set_vertex(hds,h,v) : amortized constant time.
+// - add_vertex(hds,f) : amortized constant time.
+// - remove_vertex(hds,h,v): O(v), where 'v' is the maximum out-bound value of
+// a vertex.
+//
+///Invariants
+///----------
+// 'MutableVertexHDSConcept' should validate all the invariants for the
+// 'VertexHDSConcept', and the 'MutableHDSConcept'.
+//
+///Concept-checking class
+///----------------------
+//..
+// template <class HDS>
+// struct MutableVertexHDSConcept {
+// typedef typename hds_traits<HDS>::vertex_descriptor vertex_descriptor;
+// void constraints() {
+// using namespace boost;
+// function_requires<HDSConcept>();
+// function_requires<DefaultConstructibleConcept<vertex_descriptor> >();
+// function_requires<CopyConstructibleConcept<vertex_descriptor> >();
+// function_requires<EqualityComparableConcept<vertex_descriptor> >();
+// function_requires<AssignableConcept<vertex_descriptor> >();
+// set_vertex(hds,h,v);
+// add_vertex(hds,f);
+// remove_vertex(hds,h,v);
+// const_constraints(hds);
+// }
+// void const_constraints(HDS const& hds) {
+// set_vertex(hds,h,v);
+// add_vertex(hds,f);
+// remove_vertex(hds,h,v);
+// }
+// HDS hds;
+// halfedge_descriptor h;
+// vertex_descriptor v;
+// };
+//..
+
+#ifdef BOOST_HDSTL_CONCEPTS_MUTABLEVERTEXHDSCONCEPT_HPP
+#define BOOST_HDSTL_CONCEPTS_MUTABLEVERTEXHDSCONCEPT_HPP 1
+
+#include <boost/concepts.h>
+
+namespace hdstl{
+namespace concepts {
+
+ template <class HDS>
+ struct MutableVertexHDSConcept {
+ // This class provides a concept checking class for the
+ // 'MutableVertexHDSConcept', i.e., using the statement
+ //..
+ // boost::function_requires<MutableVertexHDSConcept<HDS>()
+ //..
+ // inside a function body, or
+ //..
+ // BOOST_CLASS_REQUIRE(HDS, boost::hdstl, MutableVertexHDSConcept);
+ //..
+ // inside a class definition body, should trigger a compile-time error
+ // if the type HDS does not model the 'MutableVertexHDSConcept'.
+
+ // TYPES
+ typedef typename hds_traits<HDS>::vertex_descriptor vertex_descriptor;
+ // The specialization of 'hds_traits<HDS>' must have these required
+ // types, obeying the types requirements stated in the detailed
+ // description of the 'MutableVertexHDS' concept on page
+ // [mutablevertexhdsconcept].
+
+ //MANIPULATORS
+ void constraints()
+ // Check that the 'HDS' template parameters satisfies all the
+ // constraints of 'MutableVertexHDSConcept' on page
+ // [mutablevertexhdsconcept].
+ {
+ using namespace boost;
+ function_requires<HDSConcept>();
+ function_requires<DefaultConstructibleConcept<vertex_descriptor> >();
+ function_requires<CopyConstructibleConcept<vertex_descriptor> >();
+ function_requires<EqualityComparableConcept<vertex_descriptor> >();
+ function_requires<AssignableConcept<vertex_descriptor> >();
+
+ set_vertex(hds,h,v);
+ add_vertex(hds,f);
+ remove_vertex(hds,h,v);
+
+ const_constraints(hds);
+ }
+
+ // ACCESSORS
+ void const_constraints(HDS const& hds)
+ // Check that the non-modifiable 'HDS' template parameters
+ // satisfies all the constraints of 'MutableVertexHDSConcept'.
+ {
+ set_vertex(hds,h,v);
+ add_vertex(hds,f);
+ remove_vertex(hds,h,v);
+ }
+
+ private:
+ //DATA
+ MutableVertexHDS hds; // a halfedge data structure object
+ halfedge_descriptor h; // a vertex descriptor
+ vertex_descriptor f; // a vertex descriptor
+ };
+
+} // close namespace concepts
+} // close namespace hdstl
+
+#endif

Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/vertex_hds_concept.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/vertex_hds_concept.hpp (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/vertex_hds_concept.hpp 2007-06-13 02:22:54 EDT (Wed, 13 Jun 2007)
@@ -1,112 +1,140 @@
-/**
- * @file vertex_hds_concept.hpp
- *
- * @brief Vertex HDS concept definition.
- *
- * @par Definition
- * This concept refines the HDSConcept, and specifies additional vertex
- * descriptor to attach vertices to the HDS.
- *
- * @par Refinement of:
- * - HDSConcept
- *
- * @par Notation
- * - HDS A type that is a model of VertexHDSConcept
- * - hds A non-modifiable instance of HDS
- * - v Vertex descriptor, of type X::vertex_descriptor
- *
- * @par Associated types
- * - hds_traits<HDS>::vertex_descriptor: must be DefaultConstructible and
- * CopyConstructible, EqualityComparable, Assignable.
- *
- * @par Definitions
- * @e vertex @e descriptor is a type that contains information to access
- * the vertices attached to the halfedge data structure.
- *
- * @par Valid Expressions
- * None.
- *
- * @par Expression Semantics
- * None.
- *
- * @par Complexity guarantees
- * None.
- *
- * @par Invariants
- * None.
- *
- * @par Concept-checking class
- * \code
- * template <class HDS>
- * struct VertexHDSConcept {
- * typedef typename hds_traits<HDS>::vertex_descriptor vertex_descriptor;
- * void constraints() {
- * using namespace boost;
- * function_requires<HDSConcept>();
- * function_requires<DefaultConstructibleConcept<vertex_descriptor> >();
- * function_requires<CopyConstructibleConcept<vertex_descriptor> >();
- * function_requires<EqualityComparableConcept<vertex_descriptor> >();
- * function_requires<AssignableConcept<vertex_descriptor> >();
- * const_constraints(hds);
- * }
- * void const_constraints(HDS const& hds) {
- * }
- * HDS hds;
- * vertex_descriptor v;
- * };
- * \endcode
- */
+//vertex_hds_concept.hpp -*- C++ -*-
+//
+//@PURPOSE: Provide 'VertexHDS' concept definition, and concept-checking class.
+//
+//@DESCRIPTION: This file provides a single class template that,
+// when used with the following concept-checking utilities:
+//..
+// boost::function_requires<VertexHDSConcept<HDS> >();
+//..
+// inside a function body, or
+//..
+// BOOST_CLASS_REQUIRE(HDS, boost::hdstl,VertexHDSConcept);
+//..
+// inside a class body, checks whether the type given as template
+// argument is a model of the HDS concept described on the page [vertexhds].
+//
+//@CONCEPT: [vertexhds] Vertex HDS concept
+//
+///Definition
+///----------
+// This concept refines the 'HDSConcept', and specifies additional vertex
+// descriptor to handle vertices in the 'HDS' data structure.
+//
+///Refinement of:
+///--------------
+// - 'HDSConcept'
+//
+///Notation
+///--------
+// - 'HDS' A type that is a model of 'VertexHDSConcept'
+// - 'hds' A non-modifiable instance of 'HDS'
+// - 'v' Vertex descriptor, of type 'hds_traits<HDS>::vertex_descriptor'
+//
+///Associated types
+///----------------
+// - 'hds_traits<HDS>::vertex_descriptor': must be 'DefaultConstructible',
+// 'CopyConstructible', 'EqualityComparable', and 'Assignable'.
+//
+///Definitions
+///-----------
+// - 'halfedge_descriptor' is a type that contains information to access
+// the halfedge. (See the 'HDSConcept' for a full definition.)
+// - 'vertex_descriptor' is a type that contains information to access the
+// vertex at the source of the halfedge.
+//
+///Valid Expressions
+///-----------------
+// See the valid expressions of the 'HDS' concept.
+//
+///Expression Semantics
+///--------------------
+// See the expression semantics of the 'HDS' concept.
+//
+///Complexity guarantees
+///---------------------
+// See the complexity guarantees of the 'HDS' concept.
+//
+///Invariants
+///----------
+// 'VertexHDSConcept' should validate all the invariants for the 'HDSConcept'.
+//
+///Concept-checking class
+///----------------------
+//..
+// template <class HDS>
+// struct VertexHDSConcept {
+// typedef typename hds_traits<HDS>::vertex_descriptor vertex_descriptor;
+// void constraints() {
+// using namespace boost;
+// function_requires<HDSConcept>();
+// function_requires<DefaultConstructibleConcept<vertex_descriptor> >();
+// function_requires<CopyConstructibleConcept<vertex_descriptor> >();
+// function_requires<EqualityComparableConcept<vertex_descriptor> >();
+// function_requires<AssignableConcept<vertex_descriptor> >();
+// const_constraints(hds);
+// }
+// void const_constraints(HDS const& hds) {
+// }
+// HDS hds;
+// vertex_descriptor v;
+// };
+//..
 
 #ifdef BOOST_HDSTL_CONCEPTS_VERTEXHDSCONCEPT_HPP
 #define BOOST_HDSTL_CONCEPTS_VERTEXHDSCONCEPT_HPP 1
 
+#include <boost/concepts.h>
+
 namespace hdstl{
 namespace concepts {
 
- /**
- * @class VertexHDSConcept
- *
- * @brief Vertex HDS concept checking class
- *
- * @par Definition
- * This class provides a concept checking class for the VertexHDSConcept,
- * i.e., using the statement boost::function_requires<VertexHDSConcept<HDS>
- * >() inside a function body, or BOOST_CLASS_REQUIRE(HDS, boost::hdstl,
- * VertexHDSConcept) inside a class definition body, should trigger a
- * compile-time error if the type HDS does not model the VertexHDSConcept.
- */
- template <class HDS>
- struct VertexHDSConcept {
- //@{
- /** @name Required types:
- * The specialization of hds_traits<HDS> must have the required types
- * below, obeying the types requirements stated in the detailed
- * description.
- */
- typedef typename hds_traits<HDS>::vertex_descriptor vertex_descriptor;
- //@}
-
- /**
- * @name Defined constraints:
- */
- void constraints() {
- using namespace boost;
- function_requires<HDSConcept>();
- function_requires<DefaultConstructibleConcept<vertex_descriptor> >();
- function_requires<CopyConstructibleConcept<vertex_descriptor> >();
- function_requires<EqualityComparableConcept<vertex_descriptor> >();
- function_requires<AssignableConcept<vertex_descriptor> >();
-
- const_constraints(hds);
- }
-
- /**
- * Defined const constraints:
- */
- void const_constraints(HDS const& hds) {
- }
- HDS hds;
- vertex_descriptor v;
+ template <class HDS>
+ struct VertexHDSConcept {
+ // This class provides a concept checking class for the
+ // 'VertexHDSConcept', i.e., using the statement
+ //..
+ // boost::function_requires<VertexHDSConcept<HDS>()
+ //..
+ // inside a function body, or
+ //..
+ // BOOST_CLASS_REQUIRE(HDS, boost::hdstl, VertexHDSConcept);
+ //..
+ // inside a class definition body, should trigger a compile-time error
+ // if the type HDS does not model the 'VertexHDSConcept'.
+
+ // TYPES
+ typedef typename hds_traits<HDS>::vertex_descriptor vertex_descriptor;
+ // The specialization of 'hds_traits<HDS>' must have these required
+ // types, obeying the types requirements stated in the detailed
+ // description of the 'VertexHDS' concept on page [vertexhdsconcept].
+
+ //MANIPULATORS
+ void constraints()
+ // Check that the 'HDS' template parameters satisfies all the
+ // constraints of 'VertexHDSConcept' on page [vertexhdsconcept].
+ {
+ using namespace boost;
+ function_requires<HDSConcept>();
+ function_requires<DefaultConstructibleConcept<vertex_descriptor> >();
+ function_requires<CopyConstructibleConcept<vertex_descriptor> >();
+ function_requires<EqualityComparableConcept<vertex_descriptor> >();
+ function_requires<AssignableConcept<vertex_descriptor> >();
+
+ const_constraints(hds);
+ }
+
+ // ACCESSORS
+ void const_constraints(HDS const& hds)
+ // Check that the non-modifiable 'HDS' template parameters
+ // satisfies all the constraints of 'VertexHDSConcept'.
+ {
+ }
+
+ private:
+ //DATA
+ VertexHDS hds; // a halfedge data structure object
+ vertex_descriptor f; // a vertex descriptor
    };
 
 } // close namespace concepts


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk