$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: huseyinakcan_at_[hidden]
Date: 2007-06-28 21:28:26
Author: huseyinakcan
Date: 2007-06-28 21:28:25 EDT (Thu, 28 Jun 2007)
New Revision: 7301
URL: http://svn.boost.org/trac/boost/changeset/7301
Log:
additional concept test classes. All compiles fine.
Added:
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/facet_hds_concept.cpp
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/facet_hds_concept.t.cpp
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_forward_hds_concept.cpp
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_forward_hds_concept.t.cpp
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_hds_concept.cpp
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_hds_concept.t.cpp
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/vertex_hds_concept.cpp
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/vertex_hds_concept.t.cpp
Text files modified: 
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/facet_list_hds_concept_archetype.hpp |     4 ++--                                    
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/vertex_hds_concept_archetype.hpp     |    27 +++++++++++++++++++++++++++             
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/facet_hds_concept.hpp                  |    18 ++++++++++++------                      
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/facet_list_hds_concept.hpp             |    18 +++++++++---------                      
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/hds_concept.t.cpp                      |     4 ++--                                    
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_forward_hds_concept.hpp        |    16 ++++++----------                        
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_hds_concept.hpp                |    12 +++---------                            
   sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/vertex_hds_concept.hpp                 |     8 +++++++-                                
   8 files changed, 68 insertions(+), 39 deletions(-)
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/facet_list_hds_concept_archetype.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/facet_list_hds_concept_archetype.hpp	(original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/facet_list_hds_concept_archetype.hpp	2007-06-28 21:28:25 EDT (Thu, 28 Jun 2007)
@@ -14,7 +14,7 @@
 //..
 //  template <>
 //  struct hds_traits<FacetListHDSConcept_archetype> {
-//      typedef hdstl_detail::MultiPassInputIteratorConcept<> facet_iterator;
+//      typedef hdstl_detail::ForwardIteratorConcept<> facet_iterator;
 //      typedef size_type                      size_type;
 //  };
 //  class FacetListHDSConcept_archetype : public HDSConcept_archetype, 
@@ -54,7 +54,7 @@
     // and 'size_type' types.
     
     // TYPES
-    typedef hdstl_detail::MultiPassInputIteratorConcept<> facet_iterator;
+    typedef hdstl_detail::ForwardIteratorConcept<> facet_iterator;
         // Facet iterator type for the 'FacetListHDSConcept' archetype.
 
     typedef size_type                      size_type;
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/vertex_hds_concept_archetype.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/vertex_hds_concept_archetype.hpp	(original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/vertex_hds_concept_archetype.hpp	2007-06-28 21:28:25 EDT (Thu, 28 Jun 2007)
@@ -59,8 +59,35 @@
     // PRIVATE TYPES
     typedef typename hds_traits<VertexHDSConcept_archetype
                                >::vertex_descriptor vertex_descriptor;
+
+    // NOT IMPLEMENTED
+    VertexHDSConcept_archetype();
+    VertexHDSConcept_archetype(const VertexHDSConcept_archetype&);
+
+  public:
+    // MANIPULATORS
+    vertex_descriptor
+    source(halfedge_descriptor, VertexHDSConcept_archetype const& hds) const;
+        // returns the source vertex descriptor of 'h' in 'hds'
+    
+    vertex_descriptor
+    target(halfedge_descriptor, VertexHDSConcept_archetype const& hds) const;
+        // returns the target vertex descriptor of 'h' in 'hds'
 };
 
+//MANIPULATORS
+typename hds_traits<VertexHDSConcept_archetype>::vertex_descriptor
+VertexHDSConcept_archetype::source(halfedge_descriptor, VertexHDSConcept_archetype const& hds) const
+{
+    return vertex_descriptor();
+}
+
+typename hds_traits<VertexHDSConcept_archetype>::vertex_descriptor
+VertexHDSConcept_archetype::target(halfedge_descriptor, VertexHDSConcept_archetype const& hds) const
+{
+    return vertex_descriptor();
+}
+
 } // end namespace hdstl
 } // end namespace boost
 
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/facet_hds_concept.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/facet_hds_concept.cpp	2007-06-28 21:28:25 EDT (Thu, 28 Jun 2007)
@@ -0,0 +1,4 @@
+// facet_hds_concept.cpp    -*- C++ -*-
+
+#include <boost/hdstl/hds_concepts/facet_hds_concept.hpp>
+
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-28 21:28:25 EDT (Thu, 28 Jun 2007)
@@ -91,16 +91,19 @@
 //     }
 //     HDS hds;
 //     facet_descriptor f;
+//     halfedge_descriptor h;
 //  };
 //..
 
 #ifndef BOOST_HDSTL_CONCEPTS_FACET_HDS_CONCEPT_HPP
 #define BOOST_HDSTL_CONCEPTS_FACET_HDS_CONCEPT_HPP 1
 
-#include <boost/concepts.h>
+#include <boost/concept_check.hpp>
+#include <boost/hdstl/hds_traits.hpp>
+#include <boost/hdstl/hds_concepts/hds_concept.hpp>
 
 namespace boost {
-namespace hdstl{
+namespace hdstl {
 namespace concepts {
 
    template <class HDS> 
@@ -118,6 +121,8 @@
        // if the type HDS does not model the 'FacetHDSConcept'.
 
        // OPAQUE TYPES
+       typedef typename hds_traits<HDS>::halfedge_descriptor 
+                                                         halfedge_descriptor; 
        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
@@ -129,14 +134,14 @@
            // constraints of 'FacetHDSConcept' on page [facethdsconcept].
        {
            using namespace boost;
-           function_requires<HDSConcept>();
+           function_requires<HDSConcept<HDS> >();
            function_requires<DefaultConstructibleConcept<facet_descriptor> >();
            function_requires<CopyConstructibleConcept<facet_descriptor> >();
            function_requires<EqualityComparableConcept<facet_descriptor> >();
            function_requires<AssignableConcept<facet_descriptor> >();
 
-	   BOOST_STATIC_ASSERT(hds_traits<HDS>::supports_facets);
-	   f = facet(h, hds);
+           BOOST_STATIC_ASSERT(hds_traits<HDS>::supports_facets);
+           f = facet(h, hds);
            const_constraints(hds);
        }
 
@@ -145,12 +150,13 @@
            // Check that the non-modifiable 'HDS' template parameters
            // satisfies all the constraints of 'FacetHDSConcept'.
        {
-	   f = facet(h, hds);
+           f = facet(h, hds);
        }
 
      private:
        //DATA
        HDS hds;             // a halfedge data structure object
+       halfedge_descriptor h;  // a halfedge descriptor
        facet_descriptor f;  // a modifiable facet descriptor
    };
 
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/facet_hds_concept.t.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/facet_hds_concept.t.cpp	2007-06-28 21:28:25 EDT (Thu, 28 Jun 2007)
@@ -0,0 +1,87 @@
+//facet_hds_concept.t.cpp   -*- C++ -*-
+//
+//@OVERVIEW:  The component under test is a concept-checking class.  We
+// proceed with the standard test plan for such a class.
+//
+//@TEST_PLAN:  Create a (loose) archetype of the concept, and verify
+// (using the Boost.ConceptCheck library macros) that it satisfies all
+// the concept requirements of the concept.  Note that the purpose of
+// this test driver is to verify the validity of the concept checking
+// class, not of the archetype.  This is why it suffices to take the
+// 'halfedge_descriptor' as an 'int', although a real archetype would make
+// this into a custom-made class with the tailored minimal requirements.
+
+#include <boost/hdstl/hds_concepts/facet_hds_concept.hpp>
+#include <boost/test/minimal.hpp>
+#include <boost/concept_check.hpp>
+
+namespace hdstl1 {
+
+    struct facet_hds_archetype {
+        // This 'struct', intentionally defined in a namespace different from
+        // 'hdstl', the 'hds_traits' specialization defined in the namespace
+        // 'hdstl', and the supporting function 'opposite', defined in the same
+        // namespace as this 'struct' to take advantage of ADL
+        // (argument-dependent lookup) provide an archetype for the 'HDS'
+        // concept.
+
+        typedef int halfedge_descriptor;
+        typedef int facet_descriptor;
+    };
+
+    facet_hds_archetype::halfedge_descriptor
+        opposite(facet_hds_archetype::halfedge_descriptor h,  
+                const facet_hds_archetype&)
+    {
+        return h;
+    }
+    
+    facet_hds_archetype::facet_descriptor
+        facet(facet_hds_archetype::halfedge_descriptor h,  
+                const facet_hds_archetype&)
+    {
+        return facet_hds_archetype::facet_descriptor();
+    }
+
+}  // namespace hdstl
+
+namespace boost {
+namespace hdstl {
+    
+    template <>
+    struct hds_traits<hdstl1::facet_hds_archetype>
+    {
+        typedef hdstl1::facet_hds_archetype::halfedge_descriptor
+                halfedge_descriptor;
+        typedef hdstl1::facet_hds_archetype::facet_descriptor
+                facet_descriptor;
+        enum { supports_vertices = false};
+        static const int supports_facets = true;
+    };
+    
+}  // namespace hdstl
+}  // namespace boost
+
+// ===========================================================================
+//                              BOOST TEST APPARATUS
+// ===========================================================================
+
+template <class HDS>
+struct class_concept_requirements
+{
+    BOOST_CLASS_REQUIRE(HDS, boost::hdstl::concepts, FacetHDSConcept);
+};
+
+template <class HDS>
+bool concept_requirements()
+{
+    boost::function_requires<boost::hdstl::concepts::FacetHDSConcept<HDS> >();
+    class_concept_requirements<HDS>(); // force instantiation
+    return true;
+}
+
+int test_main(int, char **)
+{
+    BOOST_CHECK(( concept_requirements<hdstl1::facet_hds_archetype>() ));
+    return 0;
+}
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/facet_list_hds_concept.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/facet_list_hds_concept.hpp	(original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/facet_list_hds_concept.hpp	2007-06-28 21:28:25 EDT (Thu, 28 Jun 2007)
@@ -112,8 +112,7 @@
 //    private:
 //      HDS hds;   
 //      facet_descriptor f;
-//      facet_iterator b;
-//      facet_iterator e;
+//      facet_iterator b,e;
 //      size_type n; 
 //  };
 //..
@@ -121,10 +120,13 @@
 #ifndef BOOST_HDSTL_CONCEPTS_FACET_LIST_HDS_CONCEPT_HPP
 #define BOOST_HDSTL_CONCEPTS_FACET_LIST_HDS_CONCEPT_HPP 1
 
-#include <boost/concepts.h>
+#include <boost/concept_check.hpp>
+#include <boost/hdstl/hds_traits.hpp>
+#include <boost/hdstl/hds_concepts/hds_concept.hpp>
+#include <boost/hdstl/hds_concepts/facet_hds_concept.hpp>
 
 namespace boost {
-namespace hdstl{
+namespace hdstl {
 namespace concepts {
 
    template <class HDS> 
@@ -157,10 +159,9 @@
            // [facetlisthdsconcept].
        {
            using namespace boost;
-           function_requires<HDSConcept>();
+           function_requires<HDSConcept<HDS> >();
            function_requires<FacetHDSConcept>();
-           function_requires<hdstl_detail::ForwardIteratorConcept<
-                                                           facet_iterator> >();
+           function_requires<ForwardIteratorConcept<facet_iterator> >();
            function_requires<ConvertibleConcept<size_type,int> >();
 
            b = facets_begin(hds);
@@ -185,8 +186,7 @@
        //DATA
        HDS hds;              // a halfedge data structure object
        facet_descriptor f;   // a facet descriptor
-       facet_iterator b;     // a facet iterator
-       facet_iterator e;     // a facet iterator 
+       facet_iterator b,e;   // facet iterators
        size_type n;          // facet size type
 
    };
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/hds_concept.t.cpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/hds_concept.t.cpp	(original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/hds_concept.t.cpp	2007-06-28 21:28:25 EDT (Thu, 28 Jun 2007)
@@ -59,13 +59,13 @@
 template <class HDS>
 struct class_concept_requirements
 {
-    BOOST_CLASS_REQUIRE(HDS, boost::hdstl, HDSConcept);
+    BOOST_CLASS_REQUIRE(HDS, boost::hdstl::concepts, HDSConcept);
 };
 
 template <class HDS>
 bool concept_requirements()
 {
-    boost::function_requires<boost::hdstl::HDSConcept<HDS> >();
+    boost::function_requires<boost::hdstl::concepts::HDSConcept<HDS> >();
     class_concept_requirements<HDS>(); // force instantiation
     return true;
 }
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_forward_hds_concept.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_forward_hds_concept.cpp	2007-06-28 21:28:25 EDT (Thu, 28 Jun 2007)
@@ -0,0 +1,4 @@
+// mutable_forward_hds_concept.cpp    -*- C++ -*-
+
+#include <boost/hdstl/hds_concepts/mutable_forward_hds_concept.hpp>
+
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_forward_hds_concept.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_forward_hds_concept.hpp	(original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_forward_hds_concept.hpp	2007-06-28 21:28:25 EDT (Thu, 28 Jun 2007)
@@ -107,10 +107,13 @@
 #ifndef BOOST_HDSTL_CONCEPTS_MUTABLE_FORWARD_HDS_CONCEPT_HPP
 #define BOOST_HDSTL_CONCEPTS_MUTABLE_FORWARD_HDS_CONCEPT_HPP 1
 
-#include <boost/concepts.h>
+#include <boost/concept_check.hpp>
+#include <boost/hdstl/hds_traits.hpp>
+#include <boost/hdstl/hds_concepts/forward_hds_concept.hpp>
+#include <boost/hdstl/hds_concepts/mutable_hds_concept.hpp>
 
 namespace boost {
-namespace hdstl{
+namespace hdstl {
 namespace concepts{
 
     template <class HDS> 
@@ -150,19 +153,12 @@
             set_next_in_facet(h, g, hds);
             set_next_at_source(h, g, hds);
             set_next_at_target(h, g, hds);
-            const_constraints(hds);
         }
 
-        // OPAQUE 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
+        HDS hds; // a halfedge data structure object
         halfedge_descriptor h,g;  // halfedge descriptors
     };
 
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_forward_hds_concept.t.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_forward_hds_concept.t.cpp	2007-06-28 21:28:25 EDT (Thu, 28 Jun 2007)
@@ -0,0 +1,167 @@
+//mutable_forward_hds_concept.t.cpp   -*- C++ -*-
+//
+//@OVERVIEW:  The component under test is a concept-checking class.  We
+// proceed with the standard test plan for such a class.
+//
+//@TEST_PLAN:  Create a (loose) archetype of the concept, and verify
+// (using the Boost.ConceptCheck library macros) that it satisfies all
+// the concept requirements of the concept.  Note that the purpose of
+// this test driver is to verify the validity of the concept checking
+// class, not of the archetype.  This is why it suffices to take the
+// 'halfedge_descriptor' as an 'int', although a real archetype would make
+// this into a custom-made class with the tailored minimal requirements.
+
+#include <boost/hdstl/hds_concepts/mutable_forward_hds_concept.hpp>
+#include <boost/test/minimal.hpp>
+#include <boost/concept_check.hpp>
+
+namespace hdstl1 {
+
+    struct TT : public boost::hdstl::forward_traversal_tag {};
+
+    template<typename ForwardCategory>
+    struct mutable_forward_hds_archetype {
+        // This 'struct', intentionally defined in a namespace different from
+        // 'hdstl', the 'hds_traits' specialization defined in the namespace
+        // 'hdstl', and the supporting functions 'opposite', 'next_in_facet',
+        // 'next_at_source', and 'next_at_target' defined in the same
+        // namespace as this 'struct' to take advantage of ADL
+        // (argument-dependent lookup) provide an archetype for the 'MutableForwardHDS'
+        // concept.
+
+        typedef int halfedge_descriptor;
+        typedef TT  traversal_category;
+        typedef ForwardCategory forward_category;
+    };
+
+    template<typename ForwardCategory>
+    typename mutable_forward_hds_archetype<ForwardCategory>::halfedge_descriptor
+    opposite(typename mutable_forward_hds_archetype<ForwardCategory>
+                                                        ::halfedge_descriptor h,
+             const mutable_forward_hds_archetype<ForwardCategory>&)
+    {
+        return h;
+    }
+
+    template<typename ForwardCategory>
+    typename mutable_forward_hds_archetype<ForwardCategory>::halfedge_descriptor
+    next_in_facet(typename mutable_forward_hds_archetype<ForwardCategory>
+                                                        ::halfedge_descriptor h,
+             const mutable_forward_hds_archetype<ForwardCategory>&)
+    {
+        return h;
+    }
+
+    template<typename ForwardCategory>
+    typename mutable_forward_hds_archetype<ForwardCategory>::halfedge_descriptor
+    next_at_source(typename mutable_forward_hds_archetype<ForwardCategory>
+                                                        ::halfedge_descriptor h,
+             const mutable_forward_hds_archetype<ForwardCategory>&)
+    {
+        return h;
+    }
+
+    template<typename ForwardCategory>
+    typename mutable_forward_hds_archetype<ForwardCategory>::halfedge_descriptor
+    next_at_target(typename mutable_forward_hds_archetype<ForwardCategory>
+                                                        ::halfedge_descriptor h,
+             const mutable_forward_hds_archetype<ForwardCategory>&)
+    {
+        return h;
+    }
+
+    template<typename ForwardCategory>
+    void
+    set_next_in_facet(typename mutable_forward_hds_archetype<ForwardCategory>
+                                                        ::halfedge_descriptor,
+                      typename mutable_forward_hds_archetype<ForwardCategory>
+                                                        ::halfedge_descriptor,
+                      const mutable_forward_hds_archetype<ForwardCategory>&)
+    {
+    }
+
+    template<typename ForwardCategory>
+    void
+    set_next_at_source(typename mutable_forward_hds_archetype<ForwardCategory>
+                                                        ::halfedge_descriptor,
+                      typename mutable_forward_hds_archetype<ForwardCategory>
+                                                        ::halfedge_descriptor,
+                      const mutable_forward_hds_archetype<ForwardCategory>&)
+    {
+    }
+    
+    template<typename ForwardCategory>
+    void
+    set_next_at_target(typename mutable_forward_hds_archetype<ForwardCategory>
+                                                        ::halfedge_descriptor,
+                      typename mutable_forward_hds_archetype<ForwardCategory>
+                                                        ::halfedge_descriptor,
+                      const mutable_forward_hds_archetype<ForwardCategory>&)
+    {
+    }
+
+    template<typename ForwardCategory>
+    typename mutable_forward_hds_archetype<ForwardCategory>::halfedge_descriptor
+    new_edge(mutable_forward_hds_archetype<ForwardCategory>&)
+    {
+        return mutable_forward_hds_archetype<ForwardCategory>::halfedge_descriptor();
+    }
+
+    template<typename ForwardCategory>
+    void
+    delete_edge(typename mutable_forward_hds_archetype<ForwardCategory>::halfedge_descriptor,
+             mutable_forward_hds_archetype<ForwardCategory>&)
+    { }
+
+}  // namespace hdstl
+
+namespace boost {
+namespace hdstl {
+    
+    template <typename ForwardCategory>
+    struct hds_traits<hdstl1::mutable_forward_hds_archetype<ForwardCategory> >
+    {
+        typedef typename hdstl1::mutable_forward_hds_archetype<ForwardCategory>
+                                                          ::halfedge_descriptor
+                                                           halfedge_descriptor;
+        typedef typename hdstl1::mutable_forward_hds_archetype<ForwardCategory>
+                                                           ::traversal_category
+                                                           traversal_category;
+        typedef typename hdstl1::mutable_forward_hds_archetype<ForwardCategory>
+                                                           ::forward_category
+                                                           forward_category;
+        enum { supports_vertices = false};
+        static const int supports_facets = true;
+    };
+    
+}  // namespace hdstl
+}  // namespace boost
+
+// ===========================================================================
+//                              BOOST TEST APPARATUS
+// ===========================================================================
+
+template <class HDS>
+struct class_concept_requirements
+{
+    BOOST_CLASS_REQUIRE(HDS, boost::hdstl::concepts, MutableForwardHDSConcept);
+};
+
+template <class HDS>
+bool concept_requirements()
+{
+    boost::function_requires<boost::hdstl::concepts::MutableForwardHDSConcept<HDS> >();
+    class_concept_requirements<HDS>(); // force instantiation
+    return true;
+}
+
+int test_main(int, char **)
+{
+    BOOST_CHECK(( concept_requirements<
+         hdstl1::mutable_forward_hds_archetype<boost::hdstl::next_in_facet_tag> >() ));
+    BOOST_CHECK(( concept_requirements<
+         hdstl1::mutable_forward_hds_archetype<boost::hdstl::next_at_source_tag> >() ));
+    BOOST_CHECK(( concept_requirements<
+         hdstl1::mutable_forward_hds_archetype<boost::hdstl::next_at_target_tag> >() ));
+    return 0;
+}
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_hds_concept.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_hds_concept.cpp	2007-06-28 21:28:25 EDT (Thu, 28 Jun 2007)
@@ -0,0 +1,4 @@
+// mutable_hds_concept.cpp    -*- C++ -*-
+
+#include <boost/hdstl/hds_concepts/mutable_hds_concept.hpp>
+
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-28 21:28:25 EDT (Thu, 28 Jun 2007)
@@ -91,7 +91,9 @@
 #ifndef BOOST_HDSTL_CONCEPTS_MUTABLE_HDS_CONCEPT_HPP
 #define BOOST_HDSTL_CONCEPTS_MUTABLE_HDS_CONCEPT_HPP 1
 
-#include <boost/concepts.h>
+#include <boost/concept_check.hpp>
+#include <boost/hdstl/hds_traits.hpp>
+#include <boost/hdstl/hds_concepts/hds_concept.hpp>
 
 namespace boost {
 namespace hdstl {
@@ -130,14 +132,6 @@
 
             h = new_edge(hds);
             delete_edge(h, hds);
-            const_constraints(hds);
-        }
-
-        // OPAQUE ACCESSORS
-        void const_constraints(HDS const& hds) 
-            // Check that the non-modifiable 'HDS' template parameters
-            // satisfies all the constraints of 'MutableHDSConcept'.
-        {
         }
 
         private:
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_hds_concept.t.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/mutable_hds_concept.t.cpp	2007-06-28 21:28:25 EDT (Thu, 28 Jun 2007)
@@ -0,0 +1,88 @@
+// mutable_hds_concept.t.cpp   -*- C++ -*-
+//
+//@OVERVIEW:  The component under test is a concept-checking class.  We
+// proceed with the standard test plan for such a class.
+//
+//@TEST_PLAN:  Create a (loose) archetype of the concept, and verify
+// (using the Boost.ConceptCheck library macros) that it satisfies all
+// the concept requirements of the concept.  Note that the purpose of
+// this test driver is to verify the validity of the concept checking
+// class, not of the archetype.  This is why it suffices to take the
+// 'halfedge_descriptor' as an 'int', although a real archetype would make
+// this into a custom-made class with the tailored minimal requirements.
+
+#include <boost/hdstl/hds_concepts/mutable_hds_concept.hpp>
+#include <boost/test/minimal.hpp>
+#include <boost/concept_check.hpp>
+
+namespace hdstl1 {
+
+    struct mutable_hds_archetype {
+        // This 'struct', intentionally defined in a namespace different from
+        // 'hdstl', the 'hds_traits' specialization defined in the namespace
+        // 'hdstl', and the supporting function 'opposite', defined in the same
+        // namespace as this 'struct' to take advantage of ADL
+        // (argument-dependent lookup) provide an archetype for the 'HDS'
+        // concept.
+
+        typedef int halfedge_descriptor;
+    };
+
+    mutable_hds_archetype::halfedge_descriptor
+    opposite(mutable_hds_archetype::halfedge_descriptor h,
+             const mutable_hds_archetype&)
+    {
+        return h;
+    }
+
+    mutable_hds_archetype::halfedge_descriptor
+    new_edge(mutable_hds_archetype&)
+    {
+        return mutable_hds_archetype::halfedge_descriptor();
+    }
+
+    void
+    delete_edge(mutable_hds_archetype::halfedge_descriptor,
+             mutable_hds_archetype&)
+    { }
+
+}  // namespace hdstl
+
+namespace boost {
+namespace hdstl {
+    
+    template <>
+    struct hds_traits<hdstl1::mutable_hds_archetype>
+    {
+        typedef hdstl1::mutable_hds_archetype::halfedge_descriptor
+                halfedge_descriptor;
+        enum { supports_vertices = false};
+        static const int supports_facets = true;
+    };
+    
+}  // namespace hdstl
+}  // namespace boost
+
+// ===========================================================================
+//                              BOOST TEST APPARATUS
+// ===========================================================================
+
+template <class HDS>
+struct class_concept_requirements
+{
+    BOOST_CLASS_REQUIRE(HDS, boost::hdstl::concepts, MutableHDSConcept);
+};
+
+template <class HDS>
+bool concept_requirements()
+{
+    boost::function_requires<boost::hdstl::concepts::MutableHDSConcept<HDS> >();
+    class_concept_requirements<HDS>(); // force instantiation
+    return true;
+}
+
+int test_main(int, char **)
+{
+    BOOST_CHECK(( concept_requirements<hdstl1::mutable_hds_archetype>() ));
+    return 0;
+}
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/vertex_hds_concept.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/vertex_hds_concept.cpp	2007-06-28 21:28:25 EDT (Thu, 28 Jun 2007)
@@ -0,0 +1,4 @@
+// vertex_hds_concept.cpp    -*- C++ -*-
+
+#include <boost/hdstl/hds_concepts/vertex_hds_concept.hpp>
+
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-28 21:28:25 EDT (Thu, 28 Jun 2007)
@@ -95,13 +95,16 @@
 //    }
 //    HDS hds;
 //    vertex_descriptor v;
+//    halfedge_descriptor h;
 // };
 //..
 
 #ifndef BOOST_HDSTL_CONCEPTS_VERTEX_HDS_CONCEPT_HPP
 #define BOOST_HDSTL_CONCEPTS_VERTEX_HDS_CONCEPT_HPP 1
 
-#include <boost/concepts.h>
+#include <boost/concept_check.hpp>
+#include <boost/hdstl/hds_traits.hpp>
+#include <boost/hdstl/hds_concepts/hds_concept.hpp>
 
 namespace boost {
 namespace hdstl{
@@ -122,6 +125,8 @@
         // if the type HDS does not model the 'VertexHDSConcept'.
 
         // OPAQUE TYPES
+        typedef typename hds_traits<HDS>::halfedge_descriptor 
+                                                        halfedge_descriptor; 
         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
@@ -158,6 +163,7 @@
         //DATA
         HDS hds;               // a halfedge data structure object
         vertex_descriptor v;   // a vertex descriptor
+        halfedge_descriptor h;   // a halfedge descriptor
    };
 
 }  // close namespace concepts
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/vertex_hds_concept.t.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/vertex_hds_concept.t.cpp	2007-06-28 21:28:25 EDT (Thu, 28 Jun 2007)
@@ -0,0 +1,94 @@
+//vertex_hds_concept.t.cpp   -*- C++ -*-
+//
+//@OVERVIEW:  The component under test is a concept-checking class.  We
+// proceed with the standard test plan for such a class.
+//
+//@TEST_PLAN:  Create a (loose) archetype of the concept, and verify
+// (using the Boost.ConceptCheck library macros) that it satisfies all
+// the concept requirements of the concept.  Note that the purpose of
+// this test driver is to verify the validity of the concept checking
+// class, not of the archetype.  This is why it suffices to take the
+// 'halfedge_descriptor' as an 'int', although a real archetype would make
+// this into a custom-made class with the tailored minimal requirements.
+
+#include <boost/hdstl/hds_concepts/vertex_hds_concept.hpp>
+#include <boost/test/minimal.hpp>
+#include <boost/concept_check.hpp>
+
+namespace hdstl1 {
+
+    struct vertex_hds_archetype {
+        // This 'struct', intentionally defined in a namespace different from
+        // 'hdstl', the 'hds_traits' specialization defined in the namespace
+        // 'hdstl', and the supporting function 'opposite', defined in the same
+        // namespace as this 'struct' to take advantage of ADL
+        // (argument-dependent lookup) provide an archetype for the 'HDS'
+        // concept.
+
+        typedef int halfedge_descriptor;
+        typedef int vertex_descriptor;
+    };
+
+    vertex_hds_archetype::halfedge_descriptor
+    opposite(vertex_hds_archetype::halfedge_descriptor h,
+             const vertex_hds_archetype&)
+    {
+        return h;
+    }
+    
+    vertex_hds_archetype::vertex_descriptor
+    source(vertex_hds_archetype::halfedge_descriptor h,
+             const vertex_hds_archetype&)
+    {
+        return vertex_hds_archetype::vertex_descriptor();
+    }
+
+    vertex_hds_archetype::vertex_descriptor
+    target(vertex_hds_archetype::halfedge_descriptor h,
+             const vertex_hds_archetype&)
+    {
+        return vertex_hds_archetype::vertex_descriptor();
+    }
+
+}  // namespace hdstl
+
+namespace boost {
+namespace hdstl {
+    
+    template <>
+    struct hds_traits<hdstl1::vertex_hds_archetype>
+    {
+        typedef hdstl1::vertex_hds_archetype::halfedge_descriptor
+                halfedge_descriptor;
+        typedef hdstl1::vertex_hds_archetype::vertex_descriptor
+                vertex_descriptor;
+        enum { supports_vertices = true};
+        static const int supports_facets = false;
+    };
+    
+}  // namespace hdstl
+}  // namespace boost
+
+// ===========================================================================
+//                              BOOST TEST APPARATUS
+// ===========================================================================
+
+template <class HDS>
+struct class_concept_requirements
+{
+    BOOST_CLASS_REQUIRE(HDS, boost::hdstl::concepts, VertexHDSConcept);
+};
+
+template <class HDS>
+bool concept_requirements()
+{
+    boost::function_requires<boost::hdstl::concepts::VertexHDSConcept<HDS> >();
+    class_concept_requirements<HDS>(); // force instantiation
+    return true;
+}
+
+int test_main(int, char **)
+{
+    BOOST_CHECK(( concept_requirements<hdstl1::vertex_hds_archetype>() ));
+    return 0;
+}