Boost logo

Boost-Commit :

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;
+}


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