|
Boost-Commit : |
From: huseyinakcan_at_[hidden]
Date: 2007-07-01 01:29:21
Author: huseyinakcan
Date: 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
New Revision: 7330
URL: http://svn.boost.org/trac/boost/changeset/7330
Log:
all the archetype tests.
Added:
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/backward_hds_concept_archetype.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/backward_hds_concept_archetype.t.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/bidirectional_hds_concept_archetype.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/bidirectional_hds_concept_archetype.t.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/facet_hds_concept_archetype.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/facet_hds_concept_archetype.t.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/facet_list_hds_concept_archetype.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/facet_list_hds_concept_archetype.t.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/forward_hds_concept_archetype.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/forward_hds_concept_archetype.t.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/halfedge_list_hds_concept_archetype.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/halfedge_list_hds_concept_archetype.t.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_backward_hds_concept_archetype.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_backward_hds_concept_archetype.t.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_bidirectional_hds_concept_archetype.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_bidirectional_hds_concept_archetype.t.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_facet_hds_concept_archetype.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_facet_hds_concept_archetype.t.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_forward_hds_concept_archetype.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_forward_hds_concept_archetype.t.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_hds_concept_archetype.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_hds_concept_archetype.t.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_vertex_hds_concept_archetype.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_vertex_hds_concept_archetype.t.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/vertex_hds_concept_archetype.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/vertex_hds_concept_archetype.t.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/vertex_list_hds_concept_archetype.cpp
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/vertex_list_hds_concept_archetype.t.cpp
Text files modified:
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/Makefile.dbg_exc_mt | 96 +++++++++++++++++++------
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/backward_hds_concept_archetype.hpp | 87 +++++++++++++---------
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/bidirectional_hds_concept_archetype.hpp | 20 +++--
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/facet_hds_concept_archetype.hpp | 47 +++++++++++-
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/facet_list_hds_concept_archetype.hpp | 66 ++++++++++------
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/forward_hds_concept_archetype.hpp | 69 ++++++++++-------
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/halfedge_list_hds_concept_archetype.hpp | 78 ++++++++++++--------
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_backward_hds_concept_archetype.hpp | 153 +++++++++++++++++++++++++++------------
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_bidirectional_hds_concept_archetype.hpp | 122 +++++++++++++++++++++++--------
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_facet_hds_concept_archetype.hpp | 130 ++++++++++++++++++++++-----------
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_forward_hds_concept_archetype.hpp | 137 +++++++++++++++++++++++++----------
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_hds_concept_archetype.hpp | 74 +++++++++++-------
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_vertex_hds_concept_archetype.hpp | 88 +++++++++++++++-------
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/vertex_hds_concept_archetype.hpp | 62 +++++++++++----
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/vertex_list_hds_concept_archetype.hpp | 96 +++++++++++++++---------
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/facet_hds_concept.t.cpp | 2
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/forward_hds_concept.hpp | 2
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/halfedge_list_hds_concept.t.cpp | 2
sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/vertex_hds_concept.t.cpp | 2
19 files changed, 897 insertions(+), 436 deletions(-)
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/Makefile.dbg_exc_mt
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/Makefile.dbg_exc_mt (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/Makefile.dbg_exc_mt 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -1,5 +1,6 @@
CXX=g++
-CXXFLAGS=-pedantic -W -Wall -I${BOOST} -I.
+CXXFLAGS=-pedantic -W -Wall -I.
+#CXXFLAGS=-pedantic -W -Wall -I${BOOST} -I.
LD=g++
@@ -8,22 +9,36 @@
PACKAGE_OBJECTS=backward_hds_concept_archetype.o \
bidirectional_hds_concept_archetype.o \
facet_hds_concept_archetype.o \
+ facet_list_hds_concept_archetype.o \
forward_hds_concept_archetype.o \
hds_concept_archetype.o \
+ halfedge_list_hds_concept_archetype.o \
mutable_forward_hds_concept_archetype.o \
+ mutable_backward_hds_concept_archetype.o \
+ mutable_bidirectional_hds_concept_archetype.o \
mutable_hds_concept_archetype.o \
- vertex_hds_concept_archetype.o
+ mutable_facet_hds_concept_archetype.o \
+ mutable_vertex_hds_concept_archetype.o \
+ vertex_hds_concept_archetype.o \
+ vertex_list_hds_concept_archetype.o
PACKAGE_LIBRARY=libhds_archetypes.a
TEST_DRIVERS=backward_hds_concept_archetype.t \
bidirectional_hds_concept_archetype.t \
facet_hds_concept_archetype.t \
+ facet_list_hds_concept_archetype.t \
forward_hds_concept_archetype.t \
hds_concept_archetype.t \
+ halfedge_list_hds_concept_archetype.t \
mutable_forward_hds_concept_archetype.t \
+ mutable_backward_hds_concept_archetype.t \
+ mutable_bidirectional_hds_concept_archetype.t \
mutable_hds_concept_archetype.t \
- vertex_hds_concept_archetype.t
+ mutable_facet_hds_concept_archetype.t \
+ mutable_vertex_hds_concept_archetype.t \
+ vertex_hds_concept_archetype.t \
+ vertex_list_hds_concept_archetype.t
.SUFFIXES:
.SUFFIXES: ${TARGET}.o .o .cpp .hpp
@@ -45,11 +60,21 @@
facet_hds_concept.o: hds_concept.hpp
forward_hds_concept.o: hds_concept.hpp
hds_concept.o:
+halfedge_list_hds_concept.o: hds_concept.hpp
mutable_forward_hds_concept.o: forward_hds_concept.hpp \
hds_concept.hpp mutable_hds_concept.hpp
+mutable_backward_hds_concept.o: backward_hds_concept.hpp \
+ hds_concept.hpp mutable_hds_concept.hpp
+mutable_bidirectional_hds_concept.o: mutable_forward_hds_concept.hpp \
+ mutable_backward_hds_concept.hpp hds_concept.hpp \
+ mutable_hds_concept.hpp
mutable_hds_concept.o: hds_concept.hpp
+mutable_facet_hds_concept.o: facet_hds_concept.hpp \
+ mutable_hds_concept.hpp
+mutable_vertex_hds_concept.o: vertex_hds_concept.hpp \
+ mutable_hds_concept.hpp
vertex_hds_concept.o: hds_concept.hpp
-
+vertex_list_hds_concept.o: vertex_hds_concept.hpp
### BUILDING TEST DRIVERS AND DEPENDENCIES OF TEST DRIVER
@@ -59,31 +84,56 @@
%.t: %.t.o %.o
${LD} ${LDFLAGS} -o $*.t $^
-backward_hds_concept_archetype.t.o: hds_concept.hpp
-bidirectional_hds_concept_archetype.t.o: forward_hds_concept.hpp \
- backward_hds_concept.hpp hds_concept.hpp
-facet_hds_concept_archetype.t.o: hds_concept.hpp
-forward_hds_concept_archetype.t.o: hds_concept.hpp
+backward_hds_concept_archetype.t.o: hds_concept_archetype.hpp
+bidirectional_hds_concept_archetype.t.o: forward_hds_concept_archetype.hpp \
+ backward_hds_concept_archetype.hpp hds_concept_archetype.hpp
+facet_hds_concept_archetype.t.o: hds_concept_archetype.hpp
+facet_list_hds_concept_archetype.t.o: hds_concept_archetype.hpp \
+ facet_hds_concept_archetype.hpp
+forward_hds_concept_archetype.t.o: hds_concept_archetype.hpp
hds_concept_archetype.t.o:
-mutable_forward_hds_concept_archetype.t.o: forward_hds_concept.hpp \
- hds_concept.hpp mutable_hds_concept.hpp
-mutable_hds_concept_archetype.t.o: hds_concept.hpp
-vertex_hds_concept_archetype.t.o: hds_concept.hpp
+halfedge_list_hds_concept_archetype.t.o: hds_concept_archetype.hpp
+mutable_forward_hds_concept_archetype.t.o: forward_hds_concept_archetype.hpp \
+ hds_concept_archetype.hpp mutable_hds_concept_archetype.hpp
+mutable_backward_hds_concept_archetype.t.o: backward_hds_concept_archetype.hpp \
+ hds_concept_archetype.hpp mutable_hds_concept_archetype.hpp
+mutable_bidirectional_hds_concept_archetype.t.o: mutable_forward_hds_concept_archetype.hpp \
+ mutable_backward_hds_concept_archetype.hpp hds_concept_archetype.hpp \
+ mutable_hds_concept_archetype.hpp
+mutable_hds_concept_archetype.t.o: hds_concept_archetype.hpp
+mutable_facet_hds_concept_archetype.t.o: facet_hds_concept_archetype.hpp \
+ mutable_hds_concept_archetype.hpp
+mutable_vertex_hds_concept_archetype.t.o: vertex_hds_concept_archetype.hpp \
+ mutable_hds_concept_archetype.hpp
+vertex_hds_concept_archetype.t.o: hds_concept_archetype.hpp
+vertex_list_hds_concept_archetype.t.o: vertex_hds_concept_archetype.hpp
%.t.o: %.t.cpp %.h
${CXX} ${CXXFLAGS} ${CXXINCLUDES} -c -o $*.t.o $<
-backward_hds_concept.t: hds_concept_archetype.o
-bidirectional_hds_concept.t: forward_hds_concept_archetype.o \
- backward_hds_concept_archetype.o hds_concept.o
-facet_hds_concept.t.o: hds_concept_archetype.o
-forward_hds_concept.t.o: hds_concept_archetype.o
+backward_hds_concept.t: hds_concept.o
+bidirectional_hds_concept.t: forward_hds_concept.o \
+ backward_hds_concept.o hds_concept.o
+facet_hds_concept.t.o: hds_concept.o
+facet_list_hds_concept.t.o: hds_concept.o \
+ facet_hds_concept.o
+forward_hds_concept.t.o: hds_concept.o
hds_concept.t.o:
-mutable_forward_hds_concept.t.o: forward_hds_concept_archetype.o \
- hds_concept_archetype.o mutable_hds_concept.o
-mutable_hds_concept.t.o: hds_concept_archetype.o
-vertex_hds_concept.t.o: hds_concept_archetype.o
-
+halfedge_list_hds_concept.t.o: hds_concept.o
+mutable_forward_hds_concept.t.o: forward_hds_concept.o \
+ hds_concept.o mutable_hds_concept.o
+mutable_backward_hds_concept.t.o: backward_hds_concept.o \
+ hds_concept.o mutable_hds_concept.o
+mutable_bidirectional_hds_concept.t.o: mutable_forward_hds_concept.hpp \
+ mutable_backward_hds_concept.o hds_concept.o \
+ mutable_hds_concept.o
+mutable_hds_concept.t.o: hds_concept.o
+mutable_facet_hds_concept.o: facet_hds_concept.o \
+ mutable_hds_concept.o
+mutable_vertex_hds_concept.o: vertex_hds_concept.o \
+ mutable_hds_concept.o
+vertex_hds_concept.t.o: hds_concept.o
+vertex_list_hds_concept.t.o: vertex_hds_concept.o
## UTILITIES
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/backward_hds_concept_archetype.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/backward_hds_concept_archetype.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,4 @@
+// backward_hds_concept_archetype.cpp -*- C++ -*-
+
+#include <boost/hdstl/hds_archetypes/backward_hds_concept_archetype.hpp>
+
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/backward_hds_concept_archetype.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/backward_hds_concept_archetype.hpp (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/backward_hds_concept_archetype.hpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -21,6 +21,8 @@
// typedef boost::convertible_to_archetype<backward_traversal_tag>
// traversal_category;
// typedef BackwardCategory backward_category;
+// enum {supports_vertices = false};
+// enum {supports_facets = false};
// };
// template <typename BackwardCategory>
// class BackwardHDSConcept_archetype : public HDSConcept_archetype {
@@ -30,21 +32,23 @@
// BackwardHDSConcept_archetype(const BackwardHDSConcept_archetype&);
// public:
// halfedge_descriptor
-// prev_in_facet(BackwardHDSConcept_archetype const& hds,
-// halfedge_descriptor h) const;
+// prev_in_facet(halfedge_descriptor h,
+// BackwardHDSConcept_archetype const& hds);
// halfedge_descriptor
-// prev_at_source(BackwardHDSConcept_archetype const& hds,
-// halfedge_descriptor h) const;
+// prev_at_source(halfedge_descriptor h,
+// BackwardHDSConcept_archetype const& hds);
// halfedge_descriptor
-// prev_at_target(BackwardHDSConcept_archetype const& hds,
-// halfedge_descriptor h) const;
+// prev_at_target(halfedge_descriptor h,
+// BackwardHDSConcept_archetype const& hds);
// };
//..
#ifndef BOOST_HDSTL_BACKWARD_HDS_CONCEPT_ARCHETYPE_HPP
#define BOOST_HDSTL_BACKWARD_HDS_CONCEPT_ARCHETYPE_HPP
-#include <boost/hds_archetype/hds_concept_archetypes.hpp>
+#include <boost/hdstl/hds_archetypes/hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_traits.hpp>
+#include <boost/concept_archetype.hpp>
namespace boost {
namespace hdstl {
@@ -68,17 +72,21 @@
typedef boost::convertible_to_archetype<backward_traversal_tag>
traversal_category;
// This type, convertible to 'backward_traversal_tag', indicates that
- // the 'BackwardHDSConcept' archetype is a model of 'BackwardHDSConcept'.
+ // the 'BackwardHDSConcept' archetype is a model of
+ // 'BackwardHDSConcept'.
typedef BackwardCategory backward_category;
// This type, convertible to one or more of 'prev_in_facet_tag',
// 'prev_at_source_tag', or 'prev_at_target_tag', indicates which is
// the primary accessor(s) for which the 'set_...' methods are defined.
+
+ enum {supports_vertices = false};
+ enum {supports_facets = false};
};
template <typename BackwardCategory>
-class BackwardHDSConcept_archetype : public HDSConcept_archetype {
+class BackwardHDSConcept_archetype : virtual public HDSConcept_archetype {
// This class provides an exact implementation (no more, no less) of the
// 'BackwardHDS' concept. It can be used to instantiate class and function
// templates that require their template arguments to be a model of this
@@ -86,60 +94,65 @@
// requirements.
// PRIVATE TYPES
- typedef typename hds_traits<BackwardHDSConcept_archetype
- >::halfedge_descriptor halfedge_descriptor;
-
- // NOT IMPLEMENTED
- BackwardHDSConcept_archetype();
- BackwardHDSConcept_archetype(const BackwardHDSConcept_archetype&);
+ typedef typename hds_traits<BackwardHDSConcept_archetype<BackwardCategory> >
+ ::halfedge_descriptor halfedge_descriptor;
public:
// MANIPULATORS
halfedge_descriptor
- prev_in_facet(BackwardHDSConcept_archetype const& hds,
- halfedge_descriptor h) const;
+ prev_in_facet(halfedge_descriptor h,
+ BackwardHDSConcept_archetype const& hds);
// Return the halfedge preceding 'h' in the (counter-clockwise) facet
// cycle of 'h' in 'hds'.
halfedge_descriptor
- prev_at_source(BackwardHDSConcept_archetype const& hds,
- halfedge_descriptor h) const;
+ prev_at_source(halfedge_descriptor h,
+ BackwardHDSConcept_archetype const& hds);
// Returns the halfedge preceding 'h' in the (clockwise) vertex
// cycle of the source of 'h' in 'hds'.
- halfedge_descriptor
- prev_at_target(BackwardHDSConcept_archetype const& hds,
- halfedge_descriptor h) const;
+ halfedge_descriptor
+ prev_at_target(halfedge_descriptor h,
+ BackwardHDSConcept_archetype const& hds);
// Returns the halfedge preceding 'h' in the (clockwise) vertex
// cycle of the target of 'h' in 'hds'.
};
// MANIPULATORS
template <typename BackwardCategory>
-typename hds_traits<BackwardHDSConcept_archetype>::halfedge_descriptor
-BackwardHDSConcept_archetype<BackwardCategory>::prev_in_facet(
- BackwardHDSConcept_archetype const& hds,
- halfedge_descriptor h)
+inline
+typename hds_traits<BackwardHDSConcept_archetype<BackwardCategory> >
+ ::halfedge_descriptor
+prev_in_facet(typename hds_traits<BackwardHDSConcept_archetype<
+ BackwardCategory> >::halfedge_descriptor h,
+ BackwardHDSConcept_archetype<BackwardCategory> const& hds)
{
- return halfedge_descriptor();
+ (void)hds; // eliminate unused variable warning
+ return h;
}
template <typename BackwardCategory>
-typename hds_traits<BackwardHDSConcept_archetype>::halfedge_descriptor
-BackwardHDSConcept_archetype<BackwardCategory>::prev_at_source(
- BackwardHDSConcept_archetype const& hds,
- halfedge_descriptor h)
+inline
+typename hds_traits<BackwardHDSConcept_archetype<BackwardCategory> >
+ ::halfedge_descriptor
+prev_at_source(typename hds_traits<BackwardHDSConcept_archetype<
+ BackwardCategory> >::halfedge_descriptor h,
+ BackwardHDSConcept_archetype<BackwardCategory> const& hds)
{
- return halfedge_descriptor();
+ (void)hds; // eliminate unused variable warning
+ return h;
}
template <typename BackwardCategory>
-typename hds_traits<BackwardHDSConcept_archetype>::halfedge_descriptor
-BackwardHDSConcept_archetype<BackwardCategory>::prev_at_target(
- BackwardHDSConcept_archetype const& hds,
- halfedge_descriptor h)
+inline
+typename hds_traits<BackwardHDSConcept_archetype<BackwardCategory> >
+ ::halfedge_descriptor
+prev_at_target(typename hds_traits<BackwardHDSConcept_archetype<
+ BackwardCategory> >::halfedge_descriptor h,
+ BackwardHDSConcept_archetype<BackwardCategory> const& hds)
{
- return halfedge_descriptor();
+ (void)hds; // eliminate unused variable warning
+ return h;
}
} // end namespace hdstl
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/backward_hds_concept_archetype.t.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/backward_hds_concept_archetype.t.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,48 @@
+//backward_hds_concept_archetype.t.cpp -*- C++ -*-
+//
+//@OVERVIEW: The component under test is a concept-archetype class. We
+// proceed with the standard test plan for such a class.
+//
+//@TEST_PLAN: Verify (using the Boost.ConceptCheck library macros) that the
+//class 'backward_hds_concept_archetype' satisfies all the concept requirements
+//of the 'HDS' concept.
+
+#include <boost/hdstl/hds_archetypes/backward_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_concepts/backward_hds_concept.hpp>
+#include <boost/test/minimal.hpp>
+#include <boost/concept_check.hpp>
+
+// ===========================================================================
+// BOOST TEST APPARATUS
+// ===========================================================================
+
+template <class HDS>
+struct class_concept_requirements
+{
+ BOOST_CLASS_REQUIRE(HDS, boost::hdstl::concepts, BackwardHDSConcept);
+};
+
+template <class HDS>
+bool concept_requirements()
+{
+ using namespace boost;
+ function_requires<hdstl::concepts::BackwardHDSConcept<HDS> >();
+ class_concept_requirements<HDS>(); // force instantiation
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_vertices);
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_facets);
+ return true;
+}
+
+int test_main(int, char **)
+{
+ BOOST_CHECK(( concept_requirements<
+ boost::hdstl::BackwardHDSConcept_archetype<
+ boost::hdstl::prev_in_facet_tag> >() ));
+ BOOST_CHECK(( concept_requirements<
+ boost::hdstl::BackwardHDSConcept_archetype<
+ boost::hdstl::prev_at_source_tag> >() ));
+ BOOST_CHECK(( concept_requirements<
+ boost::hdstl::BackwardHDSConcept_archetype<
+ boost::hdstl::prev_at_target_tag> >() ));
+ return 0;
+}
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/bidirectional_hds_concept_archetype.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/bidirectional_hds_concept_archetype.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,4 @@
+// bidirectional_hds_concept_archetype.cpp -*- C++ -*-
+
+#include <boost/hdstl/hds_archetypes/bidirectional_hds_concept_archetype.hpp>
+
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/bidirectional_hds_concept_archetype.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/bidirectional_hds_concept_archetype.hpp (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/bidirectional_hds_concept_archetype.hpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -39,7 +39,10 @@
#ifndef BOOST_HDSTL_BIDIRECTIONAL_HDS_CONCEPT_ARCHETYPE_HPP
#define BOOST_HDSTL_BIDIRECTIONAL_HDS_CONCEPT_ARCHETYPE_HPP
-#include <boost/hds_archetype/hds_concept_archetypes.hpp>
+#include <boost/hdstl/hds_archetypes/forward_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_archetypes/backward_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_traits.hpp>
+#include <boost/concept_archetype.hpp>
namespace boost {
namespace hdstl {
@@ -76,13 +79,16 @@
// This type, convertible to one or more of 'prev_in_facet_tag',
// 'prev_at_source_tag', or 'prev_at_target_tag', indicates which is
// the primary accessor(s) for which the 'set_...' methods are defined.
+
+ enum{supports_vertices = false};
+ enum{supports_facets = false};
};
template <typename ForwardCategory, typename BackwardCategory>
class BidirectionalHDSConcept_archetype
-: public ForwardHDSConcept_archetype<ForwardCategory>,
- BackwardHDSConcept_archetype<BackwardCategory> {
+: virtual public ForwardHDSConcept_archetype<ForwardCategory>,
+ virtual public BackwardHDSConcept_archetype<BackwardCategory> {
// This class provides an exact implementation (no more, no less) of the
// 'BidirectionalHDS' concept. It can be used to instantiate class and
// function templates that require their template arguments to be a model
@@ -90,12 +96,10 @@
// requirements.
// PRIVATE TYPES
- typedef typename hds_traits<BidirectionalHDSConcept_archetype
- >::halfedge_descriptor halfedge_descriptor;
+ typedef typename hds_traits<BidirectionalHDSConcept_archetype<
+ ForwardCategory, BackwardCategory> >::halfedge_descriptor
+ halfedge_descriptor;
- // NOT IMPLEMENTED
- BidirectionalHDSConcept_archetype();
- BidirectionalHDSConcept_archetype(const BidirectionalHDSConcept_archetype&);
};
} // end namespace hdstl
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/bidirectional_hds_concept_archetype.t.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/bidirectional_hds_concept_archetype.t.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,51 @@
+//bidirectional_hds_concept_archetype.t.cpp -*- C++ -*-
+//
+//@OVERVIEW: The component under test is a concept-archetype class. We
+// proceed with the standard test plan for such a class.
+//
+//@TEST_PLAN: Verify (using the Boost.ConceptCheck library macros) that the
+//class 'bidirectional_hds_concept_archetype' satisfies all the concept requirements
+//of the 'HDS' concept.
+
+#include <boost/hdstl/hds_archetypes/bidirectional_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_concepts/bidirectional_hds_concept.hpp>
+#include <boost/test/minimal.hpp>
+#include <boost/concept_check.hpp>
+
+// ===========================================================================
+// BOOST TEST APPARATUS
+// ===========================================================================
+
+template <class HDS>
+struct class_concept_requirements
+{
+ BOOST_CLASS_REQUIRE(HDS, boost::hdstl::concepts, BidirectionalHDSConcept);
+};
+
+template <class HDS>
+bool concept_requirements()
+{
+ using namespace boost;
+ function_requires<hdstl::concepts::BidirectionalHDSConcept<HDS> >();
+ class_concept_requirements<HDS>(); // force instantiation
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_vertices);
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_facets);
+ return true;
+}
+
+int test_main(int, char **)
+{
+ BOOST_CHECK(( concept_requirements<
+ boost::hdstl::BidirectionalHDSConcept_archetype<
+ boost::hdstl::next_in_facet_tag,
+ boost::hdstl::prev_in_facet_tag> >() ));
+ BOOST_CHECK(( concept_requirements<
+ boost::hdstl::BidirectionalHDSConcept_archetype<
+ boost::hdstl::next_at_source_tag,
+ boost::hdstl::prev_at_source_tag> >() ));
+ BOOST_CHECK(( concept_requirements<
+ boost::hdstl::BidirectionalHDSConcept_archetype<
+ boost::hdstl::next_at_target_tag,
+ boost::hdstl::prev_at_target_tag> >() ));
+ return 0;
+}
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/facet_hds_concept_archetype.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/facet_hds_concept_archetype.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,4 @@
+// facet_hds_concept_archetype.cpp -*- C++ -*-
+
+#include <boost/hdstl/hds_archetypes/facet_hds_concept_archetype.hpp>
+
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/facet_hds_concept_archetype.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/facet_hds_concept_archetype.hpp (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/facet_hds_concept_archetype.hpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -12,9 +12,11 @@
///Archetype class
///---------------
//..
-// class FacetHDSConcept_archetype : public HDSConcept_archetype {
+// class FacetHDSConcept_archetype : virtual public HDSConcept_archetype {
// typedef typename hds_traits<FacetHDSConcept_archetype
// >::facet_descriptor facet_descriptor;
+// facet_descriptor&
+// facet(halfedge_descriptor &h, FacetHDSConcept_archetype const& hds);
// };
//
// template<>
@@ -22,13 +24,21 @@
// typedef boost::default_constructible_archetype<
// boost::copy_constructible_archetype<
// boost::equality_comparable_archetype<
+// boost::assignable_archetype<> > > > halfedge_descriptor;
+// typedef boost::default_constructible_archetype<
+// boost::copy_constructible_archetype<
+// boost::equality_comparable_archetype<
// boost::assignable_archetype<> > > > facet_descriptor;
+// enum {supports_vertices = false};
+// enum {supports_facets = true};
// };
//..
#ifndef BOOST_HDSTL_FACET_HDS_CONCEPT_ARCHETYPE_HPP
#define BOOST_HDSTL_FACET_HDS_CONCEPT_ARCHETYPE_HPP
+#include <boost/hdstl/hds_archetypes/hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_traits.hpp>
#include <boost/concept_archetype.hpp>
namespace boost {
@@ -45,11 +55,20 @@
typedef boost::default_constructible_archetype<
boost::copy_constructible_archetype<
boost::equality_comparable_archetype<
+ boost::assignable_archetype<> > > > halfedge_descriptor;
+ // Halfedge descriptor type for the 'FacetHDSConcept' archetype.
+
+ typedef boost::default_constructible_archetype<
+ boost::copy_constructible_archetype<
+ boost::equality_comparable_archetype<
boost::assignable_archetype<> > > > facet_descriptor;
// Facet descriptor type for the 'FacetHDSConcept' archetype.
+
+ enum {supports_vertices = false};
+ enum {supports_facets = true};
};
-class FacetHDSConcept_archetype : public HDSConcept_archetype {
+class FacetHDSConcept_archetype : virtual public HDSConcept_archetype {
// This archetype class for the 'FacetHDSConcept' class can be used
// wherever a template parameter of a class or of a function template is
// required to be a model of the 'FacetHDS' concept, in order to ensure
@@ -57,10 +76,30 @@
// are stated in the 'FacetHDS' concept.
// PRIVATE TYPES
- typedef typename hds_traits<FacetHDSConcept_archetype
- >::facet_descriptor facet_descriptor;
+ typedef hds_traits<FacetHDSConcept_archetype>::halfedge_descriptor
+ halfedge_descriptor;
+ typedef hds_traits<FacetHDSConcept_archetype>::facet_descriptor
+ facet_descriptor;
+
+ public:
+ // MANIPULATORS
+ facet_descriptor&
+ facet(halfedge_descriptor &h, FacetHDSConcept_archetype const& hds);
+ // returns the facet descriptor of the facet to the left of 'h', when
+ // forward facet cycles are oriented in counter-clockwise order.
+
};
+// MANIPULATORS
+inline
+hds_traits<FacetHDSConcept_archetype>::facet_descriptor
+facet(hds_traits<FacetHDSConcept_archetype>::halfedge_descriptor&,
+ FacetHDSConcept_archetype const& hds)
+{
+ (void)hds; // eliminate unused variable warning
+ return hds_traits<FacetHDSConcept_archetype>::facet_descriptor();
+}
+
} // end namespace hdstl
} // end namespace boost
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/facet_hds_concept_archetype.t.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/facet_hds_concept_archetype.t.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,40 @@
+//facet_hds_concept_archetype.t.cpp -*- C++ -*-
+//
+//@OVERVIEW: The component under test is a concept-archetype class. We
+// proceed with the standard test plan for such a class.
+//
+//@TEST_PLAN: Verify (using the Boost.ConceptCheck library macros) that the
+// class 'facet_hds_concept_archetype' satisfies all the concept requirements of the
+// 'HDS' concept.
+
+#include <boost/hdstl/hds_archetypes/facet_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_concepts/facet_hds_concept.hpp>
+#include <boost/test/minimal.hpp>
+#include <boost/concept_check.hpp>
+
+// ===========================================================================
+// BOOST TEST APPARATUS
+// ===========================================================================
+
+template <class HDS>
+struct class_concept_requirements
+{
+ BOOST_CLASS_REQUIRE(HDS, boost::hdstl::concepts, FacetHDSConcept);
+};
+
+template <class HDS>
+bool concept_requirements()
+{
+ using namespace boost;
+ function_requires<hdstl::concepts::FacetHDSConcept<HDS> >();
+ class_concept_requirements<HDS>(); // force instantiation
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_vertices);
+ BOOST_CHECK(true == hdstl::hds_traits<HDS>::supports_facets);
+ return true;
+}
+
+int test_main(int, char **)
+{
+ BOOST_CHECK(( concept_requirements<boost::hdstl::FacetHDSConcept_archetype>() ));
+ return 0;
+}
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/facet_list_hds_concept_archetype.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/facet_list_hds_concept_archetype.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,4 @@
+// facet_list_hds_concept_archetype.cpp -*- C++ -*-
+
+#include <boost/hdstl/hds_archetypes/facet_list_hds_concept_archetype.hpp>
+
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-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -40,7 +40,9 @@
#ifndef BOOST_HDSTL_FACET_LIST_HDS_CONCEPT_ARCHETYPE_HPP
#define BOOST_HDSTL_FACET_LIST_HDS_CONCEPT_ARCHETYPE_HPP
-#include <boost/hds_archetype/hds_concept_archetypes.hpp>
+#include <boost/hdstl/hds_archetypes/facet_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_traits.hpp>
+#include <boost/concept_archetype.hpp>
namespace boost {
namespace hdstl {
@@ -54,16 +56,30 @@
// and 'size_type' types.
// TYPES
- typedef hdstl_detail::ForwardIteratorConcept<> facet_iterator;
+ typedef boost::default_constructible_archetype<
+ boost::copy_constructible_archetype<
+ boost::equality_comparable_archetype<
+ boost::assignable_archetype<> > > > halfedge_descriptor;
+ // Halfedge descriptor type for the 'FacetListHDSConcept' archetype.
+
+ typedef boost::default_constructible_archetype<
+ boost::copy_constructible_archetype<
+ boost::equality_comparable_archetype<
+ boost::assignable_archetype<> > > > facet_descriptor;
+ // Facet descriptor type for the 'FacetHDSConcept' archetype.
+
+ typedef boost::forward_iterator_archetype<facet_descriptor> facet_iterator;
// Facet iterator type for the 'FacetListHDSConcept' archetype.
- typedef size_type size_type;
+ typedef int size_type;
// Facet size type for the 'FacetListHDSConcept' archetype.
+
+ enum {supports_vertices = false};
+ enum {supports_facets = true};
};
-class FacetListHDSConcept_archetype : public HDSConcept_archetype,
- public FacetHDSConcept_archetype {
+class FacetListHDSConcept_archetype : public FacetHDSConcept_archetype {
// This class provides an exact implementation (no more, no less) of the
// 'FacetListHDS' concept. It can be used to instantiate class and function
// templates that require their template arguments to be a model of this
@@ -71,20 +87,19 @@
// requirements.
// PRIVATE TYPES
- typedef typename hds_traits<FacetListHDSConcept_archetype
+ typedef hds_traits<FacetListHDSConcept_archetype
>::facet_iterator facet_iterator;
- typedef typename hds_traits<FacetHDSConcept_archetype
+ typedef hds_traits<FacetHDSConcept_archetype
+ >::halfedge_descriptor halfedge_descriptor;
+
+ typedef hds_traits<FacetHDSConcept_archetype
>::facet_descriptor facet_descriptor;
//facet_descriptor from the FacetHDSConcept used here.
- typedef typename hds_traits<FacetListHDSConcept_archetype
+ typedef hds_traits<FacetListHDSConcept_archetype
>::size_type size_type;
- // NOT IMPLEMENTED
- FacetListHDSConcept_archetype();
- FacetListHDSConcept_archetype(const FacetListHDSConcept_archetype&);
-
public:
// MANIPULATORS
facet_iterator
@@ -103,25 +118,28 @@
};
// MANIPULATORS
-typename hds_traits<FacetListHDSConcept_archetype>::facet_iterator
-FacetListHDSConcept_archetype<>::facets_begin(
- FacetListHDSConcept_archetype const& hds) const
+inline
+hds_traits<FacetListHDSConcept_archetype>::facet_iterator
+facets_begin(FacetListHDSConcept_archetype const& hds)
{
- return facet_iterator();
+ (void)hds; // eliminate unused variable warning
+ return hds_traits<FacetListHDSConcept_archetype>::facet_iterator();
}
-typename hds_traits<FacetListHDSConcept_archetype>::facet_iterator
-FacetListHDSConcept_archetype<>::facets_end(
- FacetListHDSConcept_archetype const& hds) const
+inline
+hds_traits<FacetListHDSConcept_archetype>::facet_iterator
+facets_end(FacetListHDSConcept_archetype const& hds)
{
- return facet_iterator();
+ (void)hds; // eliminate unused variable warning
+ return hds_traits<FacetListHDSConcept_archetype>::facet_iterator();
}
-typename hds_traits<FacetListHDSConcept_archetype>::size_type
-FacetListHDSConcept_archetype<>::num_facets(
- FacetListHDSConcept_archetype const& hds) const
+inline
+hds_traits<FacetListHDSConcept_archetype>::size_type
+num_facets(FacetListHDSConcept_archetype const& hds)
{
- return size_type();
+ (void)hds; // eliminate unused variable warning
+ return (int)0;
}
} // end namespace hdstl
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/facet_list_hds_concept_archetype.t.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/facet_list_hds_concept_archetype.t.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,40 @@
+//facet_list_hds_concept_archetype.t.cpp -*- C++ -*-
+//
+//@OVERVIEW: The component under test is a concept-archetype class. We
+// proceed with the standard test plan for such a class.
+//
+//@TEST_PLAN: Verify (using the Boost.ConceptCheck library macros) that the
+// class 'facet_list_hds_concept_archetype' satisfies all the concept requirements of the
+// 'HDS' concept.
+
+#include <boost/hdstl/hds_archetypes/facet_list_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_concepts/facet_list_hds_concept.hpp>
+#include <boost/test/minimal.hpp>
+#include <boost/concept_check.hpp>
+
+// ===========================================================================
+// BOOST TEST APPARATUS
+// ===========================================================================
+
+template <class HDS>
+struct class_concept_requirements
+{
+ BOOST_CLASS_REQUIRE(HDS, boost::hdstl::concepts, FacetListHDSConcept);
+};
+
+template <class HDS>
+bool concept_requirements()
+{
+ using namespace boost;
+ function_requires<hdstl::concepts::FacetListHDSConcept<HDS> >();
+ class_concept_requirements<HDS>(); // force instantiation
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_vertices);
+ BOOST_CHECK(true == hdstl::hds_traits<HDS>::supports_facets);
+ return true;
+}
+
+int test_main(int, char **)
+{
+ BOOST_CHECK(( concept_requirements<boost::hdstl::FacetListHDSConcept_archetype>() ));
+ return 0;
+}
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/forward_hds_concept_archetype.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/forward_hds_concept_archetype.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,4 @@
+// forward_hds_concept_archetype.cpp -*- C++ -*-
+
+#include <boost/hdstl/hds_archetypes/forward_hds_concept_archetype.hpp>
+
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/forward_hds_concept_archetype.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/forward_hds_concept_archetype.hpp (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/forward_hds_concept_archetype.hpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -40,7 +40,9 @@
#ifndef BOOST_HDSTL_FORWARD_HDS_CONCEPT_ARCHETYPE_HPP
#define BOOST_HDSTL_FORWARD_HDS_CONCEPT_ARCHETYPE_HPP
-#include <boost/hds_archetype/hds_concept_archetypes.hpp>
+#include <boost/hdstl/hds_archetypes/hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_traits.hpp>
+#include <boost/concept_archetype.hpp>
namespace boost {
namespace hdstl {
@@ -70,11 +72,14 @@
// This type, convertible to one or more of 'next_in_facet_tag',
// 'next_at_source_tag', or 'next_at_target_tag', indicates which is
// the primary accessor(s) for which the 'set_...' methods are defined.
+
+ enum {supports_vertices = false};
+ enum {supports_facets = false};
};
template <typename ForwardCategory>
-class ForwardHDSConcept_archetype : public HDSConcept_archetype {
+class ForwardHDSConcept_archetype : virtual public HDSConcept_archetype {
// This class provides an exact implementation (no more, no less) of the
// 'ForwardHDS' concept. It can be used to instantiate class and function
// templates that require their template arguments to be a model of this
@@ -82,62 +87,68 @@
// requirements.
// PRIVATE TYPES
- typedef typename hds_traits<ForwardHDSConcept_archetype
- >::halfedge_descriptor halfedge_descriptor;
-
- // NOT IMPLEMENTED
- ForwardHDSConcept_archetype();
- ForwardHDSConcept_archetype(const ForwardHDSConcept_archetype&);
+ typedef typename hds_traits<ForwardHDSConcept_archetype<ForwardCategory> >
+ ::halfedge_descriptor halfedge_descriptor;
public:
// MANIPULATORS
halfedge_descriptor
- next_in_facet(ForwardHDSConcept_archetype const& hds,
- halfedge_descriptor h) const;
+ next_in_facet(halfedge_descriptor h,
+ ForwardHDSConcept_archetype const& hds);
// Return the halfedge following 'h' in the (counter-clockwise) facet
// cycle of 'h' in 'hds'.
halfedge_descriptor
- next_at_source(ForwardHDSConcept_archetype const& hds,
- halfedge_descriptor h) const;
+ next_at_source(halfedge_descriptor h,
+ ForwardHDSConcept_archetype const& hds);
// Returns the halfedge following 'h' in the (clockwise) vertex
// cycle of the source of 'h' in 'hds'.
halfedge_descriptor
- next_at_target(ForwardHDSConcept_archetype const& hds,
- halfedge_descriptor h) const;
+ next_at_target(halfedge_descriptor h,
+ ForwardHDSConcept_archetype const& hds);
// Returns the halfedge following 'h' in the (clockwise) vertex
// cycle of the target of 'h' in 'hds'.
};
// MANIPULATORS
template <typename ForwardCategory>
-typename hds_traits<ForwardHDSConcept_archetype>::halfedge_descriptor
-ForwardHDSConcept_archetype<ForwardCategory>::next_in_facet(
- ForwardHDSConcept_archetype const& hds,
- halfedge_descriptor h)
+inline
+typename hds_traits<ForwardHDSConcept_archetype<ForwardCategory> >
+ ::halfedge_descriptor
+next_in_facet(typename hds_traits<ForwardHDSConcept_archetype<
+ ForwardCategory> >::halfedge_descriptor h,
+ ForwardHDSConcept_archetype<ForwardCategory> const& hds)
{
- return halfedge_descriptor();
+ (void)hds; // eliminate unused variable warning
+ return h;
}
template <typename ForwardCategory>
-typename hds_traits<ForwardHDSConcept_archetype>::halfedge_descriptor
-ForwardHDSConcept_archetype<ForwardCategory>::next_at_source(
- ForwardHDSConcept_archetype const& hds,
- halfedge_descriptor h)
+inline
+typename hds_traits<ForwardHDSConcept_archetype<ForwardCategory> >
+ ::halfedge_descriptor
+next_at_source(typename hds_traits<ForwardHDSConcept_archetype<
+ ForwardCategory> >::halfedge_descriptor h,
+ ForwardHDSConcept_archetype<ForwardCategory> const& hds)
{
- return halfedge_descriptor();
+ (void)hds; // eliminate unused variable warning
+ return h;
}
template <typename ForwardCategory>
-typename hds_traits<ForwardHDSConcept_archetype>::halfedge_descriptor
-ForwardHDSConcept_archetype<ForwardCategory>::next_at_target(
- ForwardHDSConcept_archetype const& hds,
- halfedge_descriptor h)
+inline
+typename hds_traits<ForwardHDSConcept_archetype<ForwardCategory> >
+ ::halfedge_descriptor
+next_at_target(typename hds_traits<ForwardHDSConcept_archetype<
+ ForwardCategory> >::halfedge_descriptor h,
+ ForwardHDSConcept_archetype<ForwardCategory> const& hds)
{
- return halfedge_descriptor();
+ (void)hds; // eliminate unused variable warning
+ return h;
}
+
} // end namespace hdstl
} // end namespace boost
#endif
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/forward_hds_concept_archetype.t.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/forward_hds_concept_archetype.t.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,48 @@
+//forward_hds_concept_archetype.t.cpp -*- C++ -*-
+//
+//@OVERVIEW: The component under test is a concept-archetype class. We
+// proceed with the standard test plan for such a class.
+//
+//@TEST_PLAN: Verify (using the Boost.ConceptCheck library macros) that the
+//class 'forward_hds_concept_archetype' satisfies all the concept requirements
+//of the 'HDS' concept.
+
+#include <boost/hdstl/hds_archetypes/forward_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_concepts/forward_hds_concept.hpp>
+#include <boost/test/minimal.hpp>
+#include <boost/concept_check.hpp>
+
+// ===========================================================================
+// BOOST TEST APPARATUS
+// ===========================================================================
+
+template <class HDS>
+struct class_concept_requirements
+{
+ BOOST_CLASS_REQUIRE(HDS, boost::hdstl::concepts, ForwardHDSConcept);
+};
+
+template <class HDS>
+bool concept_requirements()
+{
+ using namespace boost;
+ function_requires<hdstl::concepts::ForwardHDSConcept<HDS> >();
+ class_concept_requirements<HDS>(); // force instantiation
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_vertices);
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_facets);
+ return true;
+}
+
+int test_main(int, char **)
+{
+ BOOST_CHECK(( concept_requirements<
+ boost::hdstl::ForwardHDSConcept_archetype<
+ boost::hdstl::next_in_facet_tag> >() ));
+ BOOST_CHECK(( concept_requirements<
+ boost::hdstl::ForwardHDSConcept_archetype<
+ boost::hdstl::next_at_source_tag> >() ));
+ BOOST_CHECK(( concept_requirements<
+ boost::hdstl::ForwardHDSConcept_archetype<
+ boost::hdstl::next_at_target_tag> >() ));
+ return 0;
+}
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/halfedge_list_hds_concept_archetype.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/halfedge_list_hds_concept_archetype.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,4 @@
+// halfedge_list_hds_concept_archetype.cpp -*- C++ -*-
+
+#include <boost/hdstl/hds_archetypes/halfedge_list_hds_concept_archetype.hpp>
+
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/halfedge_list_hds_concept_archetype.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/halfedge_list_hds_concept_archetype.hpp (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/halfedge_list_hds_concept_archetype.hpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -14,18 +14,22 @@
//..
// template <>
// struct hds_traits<HalfedgeListHDSConcept_archetype> {
-// typedef hdstl_detail::MultiPassInputIteratorConcept<> halfedge_iterator;
-// typedef size_type size_type;
+// typedef boost::default_constructible_archetype<
+// boost::copy_constructible_archetype<
+// boost::equality_comparable_archetype<
+// boost::assignable_archetype<> > > > halfedge_descriptor;
+// typedef boost::forward_iterator_archetype<halfedge_descriptor>
+// halfedge_iterator;
+// typedef int size_type;
+// enum { supports_vertices = false };
+// enum { supports_facets = false };
// };
// class HalfedgeListHDSConcept_archetype : public HDSConcept_archetype {
-// typedef typename hds_traits<HalfedgeListHDSConcept_archetype
+// typedef hds_traits<HalfedgeListHDSConcept_archetype
// >::halfedge_iterator halfedge_iterator;
-// typedef typename hds_traits<HalfedgeHDSConcept_archetype
+// typedef hds_traits<HalfedgeListHDSConcept_archetype
// >::halfedge_descriptor halfedge_descriptor;
-// typedef typename hds_traits<HalfedgeListHDSConcept_archetype
-// >::size_type size_type;
-// HalfedgeListHDSConcept_archetype();
-// HalfedgeListHDSConcept_archetype(const HalfedgeListHDSConcept_archetype&);
+// typedef hds_traits<HalfedgeListHDSConcept_archetype>::size_type size_type;
// public:
// halfedge_iterator
// halfedges_begin(HalfedgeListHDSConcept_archetype const& hds) const;
@@ -39,7 +43,9 @@
#ifndef BOOST_HDSTL_HALFEDGE_LIST_HDS_CONCEPT_ARCHETYPE_HPP
#define BOOST_HDSTL_HALFEDGE_LIST_HDS_CONCEPT_ARCHETYPE_HPP
-#include <boost/hds_archetype/hds_concept_archetypes.hpp>
+#include <boost/hdstl/hds_archetypes/hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_traits.hpp>
+#include <boost/concept_archetype.hpp>
namespace boost {
namespace hdstl {
@@ -53,11 +59,21 @@
// and 'size_type' types.
// TYPES
- typedef hdstl_detail::MultiPassInputIteratorConcept<> halfedge_iterator;
+ typedef boost::default_constructible_archetype<
+ boost::copy_constructible_archetype<
+ boost::equality_comparable_archetype<
+ boost::assignable_archetype<> > > > halfedge_descriptor;
+ // Halfedge descriptor type for the 'HalfedgeListHDSConcept' archetype.
+
+ typedef boost::forward_iterator_archetype<halfedge_descriptor>
+ halfedge_iterator;
// Halfedge iterator type for the 'HalfedgeListHDSConcept' archetype.
- typedef size_type size_type;
+ typedef int size_type;
// Halfedge size type for the 'HalfedgeListHDSConcept' archetype.
+
+ enum { supports_vertices = false };
+ enum { supports_facets = false };
};
class HalfedgeListHDSConcept_archetype : public HDSConcept_archetype {
@@ -68,20 +84,15 @@
// requirements.
// PRIVATE TYPES
- typedef typename hds_traits<HalfedgeListHDSConcept_archetype
+ typedef hds_traits<HalfedgeListHDSConcept_archetype
>::halfedge_iterator halfedge_iterator;
- typedef typename hds_traits<HalfedgeHDSConcept_archetype
+ typedef hds_traits<HalfedgeListHDSConcept_archetype
>::halfedge_descriptor halfedge_descriptor;
- //halfedge_descriptor from the HalfedgeHDSConcept used here.
+ //halfedge_descriptor from the HalfedgeListHDSConcept used here.
- typedef typename hds_traits<HalfedgeListHDSConcept_archetype
- >::size_type size_type;
+ typedef hds_traits<HalfedgeListHDSConcept_archetype>::size_type size_type;
- // NOT IMPLEMENTED
- HalfedgeListHDSConcept_archetype();
- HalfedgeListHDSConcept_archetype(const HalfedgeListHDSConcept_archetype&);
-
public:
// MANIPULATORS
halfedge_iterator
@@ -100,25 +111,28 @@
};
// MANIPULATORS
-typename hds_traits<HalfedgeListHDSConcept_archetype>::halfedge_iterator
-HalfedgeListHDSConcept_archetype<>::halfedges_begin(
- HalfedgeListHDSConcept_archetype const& hds) const
+inline
+hds_traits<HalfedgeListHDSConcept_archetype>::halfedge_iterator
+halfedges_begin(HalfedgeListHDSConcept_archetype const& hds)
{
- return halfedge_iterator();
+ (void)hds; // eliminate unused variable warning
+ return hds_traits<HalfedgeListHDSConcept_archetype>::halfedge_iterator();
}
-typename hds_traits<HalfedgeListHDSConcept_archetype>::halfedge_iterator
-HalfedgeListHDSConcept_archetype<>::halfedges_end(
- HalfedgeListHDSConcept_archetype const& hds) const
+inline
+hds_traits<HalfedgeListHDSConcept_archetype>::halfedge_iterator
+halfedges_end(HalfedgeListHDSConcept_archetype const& hds)
{
- return halfedge_iterator();
+ (void)hds; // eliminate unused variable warning
+ return hds_traits<HalfedgeListHDSConcept_archetype>::halfedge_iterator();
}
-typename hds_traits<HalfedgeListHDSConcept_archetype>::size_type
-HalfedgeListHDSConcept_archetype<>::num_halfedges(
- HalfedgeListHDSConcept_archetype const& hds) const
+inline
+hds_traits<HalfedgeListHDSConcept_archetype>::size_type
+num_halfedges(HalfedgeListHDSConcept_archetype const& hds)
{
- return size_type();
+ (void)hds; // eliminate unused variable warning
+ return 0;
}
} // end namespace hdstl
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/halfedge_list_hds_concept_archetype.t.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/halfedge_list_hds_concept_archetype.t.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,40 @@
+//halfedge_list_hds_concept_archetype.t.cpp -*- C++ -*-
+//
+//@OVERVIEW: The component under test is a concept-archetype class. We
+// proceed with the standard test plan for such a class.
+//
+//@TEST_PLAN: Verify (using the Boost.ConceptCheck library macros) that the
+// class 'halfedge_list_hds_concept_archetype' satisfies all the concept requirements of the
+// 'HDS' concept.
+
+#include <boost/hdstl/hds_archetypes/halfedge_list_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_concepts/halfedge_list_hds_concept.hpp>
+#include <boost/test/minimal.hpp>
+#include <boost/concept_check.hpp>
+
+// ===========================================================================
+// BOOST TEST APPARATUS
+// ===========================================================================
+
+template <class HDS>
+struct class_concept_requirements
+{
+ BOOST_CLASS_REQUIRE(HDS, boost::hdstl::concepts, HalfedgeListHDSConcept);
+};
+
+template <class HDS>
+bool concept_requirements()
+{
+ using namespace boost;
+ function_requires<hdstl::concepts::HalfedgeListHDSConcept<HDS> >();
+ class_concept_requirements<HDS>(); // force instantiation
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_vertices);
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_facets);
+ return true;
+}
+
+int test_main(int, char **)
+{
+ BOOST_CHECK(( concept_requirements<boost::hdstl::HalfedgeListHDSConcept_archetype>() ));
+ return 0;
+}
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_backward_hds_concept_archetype.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_backward_hds_concept_archetype.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,4 @@
+// mutable_backward_hds_concept_archetype.cpp -*- C++ -*-
+
+#include <boost/hdstl/hds_archetypes/mutable_backward_hds_concept_archetype.hpp>
+
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_backward_hds_concept_archetype.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_backward_hds_concept_archetype.hpp (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_backward_hds_concept_archetype.hpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -13,34 +13,48 @@
///---------------
//..
// template <typename BackwardCategory>
+// struct hds_traits<MutableBackwardHDSConcept_archetype<BackwardCategory> > {
+// typedef boost::default_constructible_archetype<
+// boost::copy_constructible_archetype<
+// boost::equality_comparable_archetype<
+// boost::assignable_archetype<> > > > halfedge_descriptor;
+// typedef boost::convertible_to_archetype<backward_traversal_tag>
+// traversal_category;
+// typedef BackwardCategory backward_category;
+// enum {supports_vertices = false};
+// enum {supports_facets = false};
+// };
+// template <typename BackwardCategory>
// class MutableBackwardHDSConcept_archetype
// : public BackwardHDSConcept_archetype<BackwardCategory>,
// public MutableHDSConcept_archetype {
-// typedef typename hds_traits<HDSConcept_archetype
-// >::halfedge_descriptor halfedge_descriptor;
-// typedef typename hds_traits<BackwardHDSConcept_archetype<BackwardCategory>
-// >::traversal_category traversal_category;
+// typedef typename hds_traits<MutableBackwardHDSConcept_archetype<
+// BackwardCategory> >::halfedge_descriptor
+// halfedge_descriptor;
+// typedef typename hds_traits<MutableBackwardHDSConcept_archetype<
+// BackwardCategory> >::traversal_category
+// traversal_category;
// typedef BackwardCategory backward_category;
-// MutableBackwardHDSConcept_archetype();
-// MutableBackwardHDSConcept_archetype(
-// const MutableBackwardHDSConcept_archetype&);
// public:
// void
-// set_prev_in_facet(MutableBackwardHDSConcept_archetype& hds,
-// halfedge_descriptor h, halfedge_descriptor g);
+// set_prev_in_facet(halfedge_descriptor h, halfedge_descriptor g,
+// MutableBackwardHDSConcept_archetype& hds);
// void
-// set_prev_at_source(MutableBackwardHDSConcept_archetype& hds,
-// halfedge_descriptor h, halfedge_descriptor g);
+// set_prev_at_source(halfedge_descriptor h, halfedge_descriptor g,
+// MutableBackwardHDSConcept_archetype& hds);
// void
-// set_prev_at_target(MutableBackwardHDSConcept_archetype& hds,
-// halfedge_descriptor h, halfedge_descriptor g);
+// set_prev_at_target(halfedge_descriptor h, halfedge_descriptor g,
+// MutableBackwardHDSConcept_archetype& hds);
// };
//..
#ifndef BOOST_HDSTL_MUTABLE_BACKWARD_HDS_CONCEPT_ARCHETYPE_HPP
#define BOOST_HDSTL_MUTABLE_BACKWARD_HDS_CONCEPT_ARCHETYPE_HPP
-#include <boost/hds_archetype/hds_concept_archetypes.hpp>
+#include <boost/hdstl/hds_archetypes/backward_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_archetypes/mutable_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_traits.hpp>
+#include <boost/concept_archetype.hpp>
namespace boost {
namespace hdstl {
@@ -49,9 +63,38 @@
class MutableBackwardHDSConcept_archetype; // forward declaration
template <typename BackwardCategory>
+struct hds_traits<MutableBackwardHDSConcept_archetype<BackwardCategory> > {
+ // This template specialization of 'hds_traits' for the
+ // 'MutableBackwardHDSConcept_archetype' provides the 'halfedge_descriptor'
+ // and 'traversal_category' types.
+
+ // TYPES
+ typedef boost::default_constructible_archetype<
+ boost::copy_constructible_archetype<
+ boost::equality_comparable_archetype<
+ boost::assignable_archetype<> > > > halfedge_descriptor;
+ // Halfedge descriptor type for the 'MutableBackwardHDSConcept'
+ // archetype.
+
+ typedef boost::convertible_to_archetype<backward_traversal_tag>
+ traversal_category;
+ // This type, convertible to 'backward_traversal_tag', indicates that
+ // the 'MutableBackwardHDSConcept' archetype is a model of
+ // 'MutableBackwardHDSConcept'.
+
+ typedef BackwardCategory backward_category;
+ // This type, convertible to one or more of 'prev_in_facet_tag',
+ // 'prev_at_source_tag', or 'prev_at_target_tag', indicates which is
+ // the primary accessor(s) for which the 'set_...' methods are defined.
+
+ enum {supports_vertices = false};
+ enum {supports_facets = false};
+};
+
+template <typename BackwardCategory>
class MutableBackwardHDSConcept_archetype
-: public BackwardHDSConcept_archetype<BackwardCategory>,
- public MutableHDSConcept_archetype {
+: virtual public BackwardHDSConcept_archetype<BackwardCategory>,
+ virtual public MutableHDSConcept_archetype {
// This class provides an exact implementation (no more, no less) of the
// 'MutableBackwardHDS' concept. It can be used to instantiate class and
// function templates that require their template arguments to be a model
@@ -59,13 +102,15 @@
// requirements.
// PRIVATE TYPES
- typedef typename hds_traits<HDSConcept_archetype
- >::halfedge_descriptor halfedge_descriptor;
- //Halfedge descriptor type from 'HDSConcept'
-
- typedef typename hds_traits<BackwardHDSConcept_archetype<BackwardCategory>
- >::traversal_category traversal_category;
- //traversal category type from from 'BackwardHDSConcept',
+ typedef typename hds_traits<MutableBackwardHDSConcept_archetype<
+ BackwardCategory> >::halfedge_descriptor
+ halfedge_descriptor;
+ //Halfedge descriptor type from 'MutableBackwardHDSConcept'
+
+ typedef typename hds_traits<MutableBackwardHDSConcept_archetype<
+ BackwardCategory> >::traversal_category
+ traversal_category;
+ //traversal category type from from 'MutableBackwardHDSConcept',
//has to be convertible to 'backward_traversal_tag'.
typedef BackwardCategory backward_category;
@@ -73,53 +118,69 @@
// 'prev_at_source_tag', or 'prev_at_target_tag', indicates which is
// the primary accessor(s) for which the 'set_...' methods are defined.
- // NOT IMPLEMENTED
- MutableBackwardHDSConcept_archetype();
- MutableBackwardHDSConcept_archetype(
- const MutableBackwardHDSConcept_archetype&);
-
public:
// MANIPULATORS
void
- set_prev_in_facet(MutableBackwardHDSConcept_archetype& hds,
- halfedge_descriptor h, halfedge_descriptor g);
+ set_prev_in_facet(halfedge_descriptor h, halfedge_descriptor g,
+ MutableBackwardHDSConcept_archetype<BackwardCategory>& hds);
// set 'g' as the halfedge preceding 'h' in the (counter-clockwise)
// facet cycle of 'h' in 'hds'.
void
- set_prev_at_source(MutableBackwardHDSConcept_archetype& hds,
- halfedge_descriptor h, halfedge_descriptor g);
+ set_prev_at_source(halfedge_descriptor h, halfedge_descriptor g,
+ MutableBackwardHDSConcept_archetype<BackwardCategory>& hds);
// set 'g' as the halfedge preceding 'h' in the (clockwise) vertex
// cycle of the source of 'h' in 'hds'.
void
- set_prev_at_target(MutableBackwardHDSConcept_archetype& hds,
- halfedge_descriptor h, halfedge_descriptor g);
+ set_prev_at_target(halfedge_descriptor h, halfedge_descriptor g,
+ MutableBackwardHDSConcept_archetype<BackwardCategory>& hds);
// set 'g' as the halfedge preceding 'h' in the (clockwise) vertex
// cycle of the target of 'h' in 'hds'.
};
// MANIPULATORS
template <typename BackwardCategory>
+inline
void
-MutableBackwardHDSConcept_archetype<BackwardCategory>::set_prev_in_facet(
- MutableBackwardHDSConcept_archetype& hds,
- halfedge_descriptor h, halfedge_descriptor g)
-{}
+set_prev_in_facet(typename hds_traits<MutableBackwardHDSConcept_archetype<
+ BackwardCategory> >::halfedge_descriptor h,
+ typename hds_traits<MutableBackwardHDSConcept_archetype<
+ BackwardCategory> >::halfedge_descriptor g,
+ MutableBackwardHDSConcept_archetype<BackwardCategory>& hds)
+{
+ (void)hds; // eliminate unused variable warning
+ (void)h; // eliminate unused variable warning
+ (void)g; // eliminate unused variable warning
+}
template <typename BackwardCategory>
+inline
void
-MutableBackwardHDSConcept_archetype<BackwardCategory>::set_prev_at_source(
- MutableBackwardHDSConcept_archetype& hds,
- halfedge_descriptor h, halfedge_descriptor g)
-{}
+set_prev_at_source(typename hds_traits<MutableBackwardHDSConcept_archetype<
+ BackwardCategory> >::halfedge_descriptor h,
+ typename hds_traits<MutableBackwardHDSConcept_archetype<
+ BackwardCategory> >::halfedge_descriptor g,
+ MutableBackwardHDSConcept_archetype<BackwardCategory>& hds)
+{
+ (void)hds; // eliminate unused variable warning
+ (void)h; // eliminate unused variable warning
+ (void)g; // eliminate unused variable warning
+}
template <typename BackwardCategory>
+inline
void
-MutableBackwardHDSConcept_archetype<BackwardCategory>::set_prev_at_target(
- MutableBackwardHDSConcept_archetype& hds,
- halfedge_descriptor h, halfedge_descriptor g)
-{}
+set_prev_at_target(typename hds_traits<MutableBackwardHDSConcept_archetype<
+ BackwardCategory> >::halfedge_descriptor h,
+ typename hds_traits<MutableBackwardHDSConcept_archetype<
+ BackwardCategory> >::halfedge_descriptor g,
+ MutableBackwardHDSConcept_archetype<BackwardCategory>& hds)
+{
+ (void)hds; // eliminate unused variable warning
+ (void)h; // eliminate unused variable warning
+ (void)g; // eliminate unused variable warning
+}
} // end namespace hdstl
} // end namespace boost
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_backward_hds_concept_archetype.t.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_backward_hds_concept_archetype.t.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,48 @@
+//mutable_backward_hds_concept_archetype.t.cpp -*- C++ -*-
+//
+//@OVERVIEW: The component under test is a concept-archetype class. We
+// proceed with the standard test plan for such a class.
+//
+//@TEST_PLAN: Verify (using the Boost.ConceptCheck library macros) that the
+// class 'mutable_backward_hds_concept_archetype' satisfies all the concept requirements of the
+// 'HDS' concept.
+
+#include <boost/hdstl/hds_archetypes/mutable_backward_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_concepts/mutable_backward_hds_concept.hpp>
+#include <boost/test/minimal.hpp>
+#include <boost/concept_check.hpp>
+
+// ===========================================================================
+// BOOST TEST APPARATUS
+// ===========================================================================
+
+template <class HDS>
+struct class_concept_requirements
+{
+ BOOST_CLASS_REQUIRE(HDS, boost::hdstl::concepts, MutableBackwardHDSConcept);
+};
+
+template <class HDS>
+bool concept_requirements()
+{
+ using namespace boost;
+ function_requires<hdstl::concepts::MutableBackwardHDSConcept<HDS> >();
+ class_concept_requirements<HDS>(); // force instantiation
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_vertices);
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_facets);
+ return true;
+}
+
+int test_main(int, char **)
+{
+ BOOST_CHECK(( concept_requirements<
+ boost::hdstl::MutableBackwardHDSConcept_archetype<
+ boost::hdstl::prev_in_facet_tag> >() ));
+ BOOST_CHECK(( concept_requirements<
+ boost::hdstl::MutableBackwardHDSConcept_archetype<
+ boost::hdstl::prev_at_source_tag> >() ));
+ BOOST_CHECK(( concept_requirements<
+ boost::hdstl::MutableBackwardHDSConcept_archetype<
+ boost::hdstl::prev_at_target_tag> >() ));
+ return 0;
+}
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_bidirectional_hds_concept_archetype.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_bidirectional_hds_concept_archetype.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,4 @@
+// mutable_bidirectional_hds_concept_archetype.cpp -*- C++ -*-
+
+#include <boost/hdstl/hds_archetypes/mutable_bidirectional_hds_concept_archetype.hpp>
+
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_bidirectional_hds_concept_archetype.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_bidirectional_hds_concept_archetype.hpp (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_bidirectional_hds_concept_archetype.hpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -13,28 +13,48 @@
///---------------
//..
// template <typename ForwardCategory, typename BackwardCategory>
-// class MutableBidirectionalHDSConcept_archetype
-// : public MutableForwardHDSConcept_archetype<ForwardCategory>,
-// public MutableBackwardHDSConcept_archetype<BackwardCategory>,
-// public BidirectionalHDSConcept_archetype {
-// typedef typename hds_traits<HDSConcept_archetype
-// >::halfedge_descriptor halfedge_descriptor;
-// typedef typename hds_traits<ForwardHDSConcept_archetype
-// >::forward_category forward_category;
-// typedef typename hds_traits<BackwardHDSConcept_archetype
-// >::backward_category backward_category;
-// typedef typename hds_traits<BidirectionalHDSConcept_archetype
-// >::traversal_category traversal_category;
-// MutableBidirectionalHDSConcept_archetype();
-// MutableBidirectionalHDSConcept_archetype(
-// const MutableBidirectionalHDSConcept_archetype&);
+// struct hds_traits<MutableBidirectionalHDSConcept_archetype<
+// ForwardCategory, BackwardCategory> > {
+// typedef boost::default_constructible_archetype<
+// boost::copy_constructible_archetype<
+// boost::equality_comparable_archetype<
+// boost::assignable_archetype<> > > > halfedge_descriptor;
+// typedef boost::convertible_to_archetype<bidirectional_traversal_tag>
+// traversal_category;
+// typedef ForwardCategory forward_category;
+// typedef BackwardCategory backward_category;
+// enum {supports_vertices = false};
+// enum {supports_facets = false};
+// };
+// template <typename ForwardCategory, typename BackwardCategory>
+// class MutableBidirectionalHDSConcept_archetype
+// : public MutableForwardHDSConcept_archetype<ForwardCategory>,
+// public MutableBackwardHDSConcept_archetype<BackwardCategory>,
+// public BidirectionalHDSConcept_archetype<
+// ForwardCategory, BackwardCategory> {
+// typedef typename hds_traits<MutableBidirectionalHDSConcept_archetype<
+// ForwardCategory, BackwardCategory> >::halfedge_descriptor
+// halfedge_descriptor;
+// typedef typename hds_traits<MutableBidirectionalHDSConcept_archetype<
+// ForwardCategory, BackwardCategory> >::forward_category
+// forward_category;
+// typedef typename hds_traits<MutableBidirectionalHDSConcept_archetype<
+// ForwardCategory, BackwardCategory> >::backward_category
+// backward_category;
+// typedef typename hds_traits<MutableBidirectionalHDSConcept_archetype<
+// ForwardCategory, BackwardCategory> >::traversal_category
+// traversal_category;
// };
//..
#ifndef BOOST_HDSTL_MUTABLE_BIDIRECTIONAL_HDS_CONCEPT_ARCHETYPE_HPP
#define BOOST_HDSTL_MUTABLE_BIDIRECTIONAL_HDS_CONCEPT_ARCHETYPE_HPP
-#include <boost/hds_archetype/hds_concept_archetypes.hpp>
+#include <boost/hdstl/hds_archetypes/mutable_forward_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_archetypes/mutable_backward_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_archetypes/bidirectional_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_traits.hpp>
+#include <boost/concept_archetype.hpp>
namespace boost {
namespace hdstl {
@@ -43,10 +63,46 @@
class MutableBidirectionalHDSConcept_archetype; // forward declaration
template <typename ForwardCategory, typename BackwardCategory>
-class MutableBidirectionalHDSConcept_archetype
-: public MutableForwardHDSConcept_archetype<ForwardCategory>,
- public MutableBackwardHDSConcept_archetype<BackwardCategory>,
- public BidirectionalHDSConcept_archetype {
+struct hds_traits<MutableBidirectionalHDSConcept_archetype<
+ ForwardCategory, BackwardCategory> > {
+ // This template specialization of 'hds_traits' for the
+ // 'MutableBidirectionalHDSConcept_archetype' provides the
+ // 'halfedge_descriptor' and 'traversal_category' types.
+
+ // TYPES
+ typedef boost::default_constructible_archetype<
+ boost::copy_constructible_archetype<
+ boost::equality_comparable_archetype<
+ boost::assignable_archetype<> > > > halfedge_descriptor;
+ // Halfedge descriptor type for the 'MutableBidirectionalHDSConcept'
+ // archetype.
+
+ typedef boost::convertible_to_archetype<bidirectional_traversal_tag>
+ traversal_category;
+ // This type, convertible to 'backward_traversal_tag', indicates that
+ // the 'MutableBidirectionalHDSConcept' archetype is a model of
+ // 'MutableBidirectionalHDSConcept'.
+
+ typedef ForwardCategory forward_category;
+ // This type, convertible to one or more of 'next_in_facet_tag',
+ // 'next_at_source_tag', or 'next_at_target_tag', indicates which is
+ // the primary accessor(s) for which the 'set_...' methods are defined.
+
+ typedef BackwardCategory backward_category;
+ // This type, convertible to one or more of 'prev_in_facet_tag',
+ // 'prev_at_source_tag', or 'prev_at_target_tag', indicates which is
+ // the primary accessor(s) for which the 'set_...' methods are defined.
+
+ enum {supports_vertices = false};
+ enum {supports_facets = false};
+};
+
+template <typename ForwardCategory, typename BackwardCategory>
+class MutableBidirectionalHDSConcept_archetype
+ : public MutableForwardHDSConcept_archetype<ForwardCategory>,
+ public MutableBackwardHDSConcept_archetype<BackwardCategory>,
+ public BidirectionalHDSConcept_archetype<
+ ForwardCategory, BackwardCategory> {
// This class provides an exact implementation (no more, no less) of the
// 'MutableBidirectionalHDS' concept. It can be used to instantiate class
// and function templates that require their template arguments to be a
@@ -54,22 +110,22 @@
// syntactic requirements.
// PRIVATE TYPES
- typedef typename hds_traits<HDSConcept_archetype
- >::halfedge_descriptor halfedge_descriptor;
+ typedef typename hds_traits<MutableBidirectionalHDSConcept_archetype<
+ ForwardCategory, BackwardCategory> >::halfedge_descriptor
+ halfedge_descriptor;
- typedef typename hds_traits<ForwardHDSConcept_archetype
- >::forward_category forward_category;
-
- typedef typename hds_traits<BackwardHDSConcept_archetype
- >::backward_category backward_category;
+ typedef typename hds_traits<MutableBidirectionalHDSConcept_archetype<
+ ForwardCategory, BackwardCategory> >::forward_category
+ forward_category;
+
+ typedef typename hds_traits<MutableBidirectionalHDSConcept_archetype<
+ ForwardCategory, BackwardCategory> >::backward_category
+ backward_category;
- typedef typename hds_traits<BidirectionalHDSConcept_archetype
- >::traversal_category traversal_category;
+ typedef typename hds_traits<MutableBidirectionalHDSConcept_archetype<
+ ForwardCategory, BackwardCategory> >::traversal_category
+ traversal_category;
- // NOT IMPLEMENTED
- MutableBidirectionalHDSConcept_archetype();
- MutableBidirectionalHDSConcept_archetype(
- const MutableBidirectionalHDSConcept_archetype&);
};
} // end namespace hdstl
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_bidirectional_hds_concept_archetype.t.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_bidirectional_hds_concept_archetype.t.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,51 @@
+//mutable_bidirectional_hds_concept_archetype.t.cpp -*- C++ -*-
+//
+//@OVERVIEW: The component under test is a concept-archetype class. We
+// proceed with the standard test plan for such a class.
+//
+//@TEST_PLAN: Verify (using the Boost.ConceptCheck library macros) that the
+// class 'mutable_bidirectional_hds_concept_archetype' satisfies all the concept requirements of the
+// 'HDS' concept.
+
+#include <boost/hdstl/hds_archetypes/mutable_bidirectional_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_concepts/mutable_bidirectional_hds_concept.hpp>
+#include <boost/test/minimal.hpp>
+#include <boost/concept_check.hpp>
+
+// ===========================================================================
+// BOOST TEST APPARATUS
+// ===========================================================================
+
+template <class HDS>
+struct class_concept_requirements
+{
+ BOOST_CLASS_REQUIRE(HDS, boost::hdstl::concepts, MutableBidirectionalHDSConcept);
+};
+
+template <class HDS>
+bool concept_requirements()
+{
+ using namespace boost;
+ function_requires<hdstl::concepts::MutableBidirectionalHDSConcept<HDS> >();
+ class_concept_requirements<HDS>(); // force instantiation
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_vertices);
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_facets);
+ return true;
+}
+
+int test_main(int, char **)
+{
+ BOOST_CHECK(( concept_requirements<
+ boost::hdstl::MutableBidirectionalHDSConcept_archetype<
+ boost::hdstl::next_in_facet_tag,
+ boost::hdstl::prev_in_facet_tag > >() ));
+ BOOST_CHECK(( concept_requirements<
+ boost::hdstl::MutableBidirectionalHDSConcept_archetype<
+ boost::hdstl::next_at_source_tag,
+ boost::hdstl::prev_at_source_tag > >() ));
+ BOOST_CHECK(( concept_requirements<
+ boost::hdstl::MutableBidirectionalHDSConcept_archetype<
+ boost::hdstl::next_at_target_tag,
+ boost::hdstl::prev_at_target_tag > >() ));
+ return 0;
+}
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_facet_hds_concept_archetype.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_facet_hds_concept_archetype.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,4 @@
+// mutable_facet_hds_concept_archetype.cpp -*- C++ -*-
+
+#include <boost/hdstl/hds_archetypes/mutable_facet_hds_concept_archetype.hpp>
+
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_facet_hds_concept_archetype.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_facet_hds_concept_archetype.hpp (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_facet_hds_concept_archetype.hpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -12,31 +12,44 @@
///Archetype class
///---------------
//..
-// class MutableFacetHDSConcept_archetype : public HDSConcept_archetype,
-// public FacetHDSConcept_archetype {
-// typedef typename hds_traits<FacetHDSConcept_archetype
+// template<>
+// struct hds_traits<MutableFacetHDSConcept_archetype> {
+// typedef boost::default_constructible_archetype<
+// boost::copy_constructible_archetype<
+// boost::equality_comparable_archetype<
+// boost::assignable_archetype<> > > > halfedge_descriptor;
+// typedef boost::default_constructible_archetype<
+// boost::copy_constructible_archetype<
+// boost::equality_comparable_archetype<
+// boost::assignable_archetype<> > > > facet_descriptor;
+// enum {supports_vertices = false};
+// enum {supports_facets = true};
+// };
+// class MutableFacetHDSConcept_archetype
+// : public MutableHDSConcept_archetype,
+// public FacetHDSConcept_archetype {
+// // PRIVATE TYPES
+// typedef hds_traits<MutableFacetHDSConcept_archetype
// >::facet_descriptor facet_descriptor;
-// typedef typename hds_traits<HDSConcept_archetype
+// typedef hds_traits<MutableFacetHDSConcept_archetype
// >::halfedge_descriptor halfedge_descriptor;
-// MutableFacetHDSConcept_archetype();
-// MutableFacetHDSConcept_archetype(
-// const MutableFacetHDSConcept_archetype&);
// public:
-// void
-// set_facet(MutableFacetHDSConcept_archetype& hds,
-// halfedge_descriptor h, facet_descriptor f);
-// void
-// add_facet(MutableFacetHDSConcept_archetype& hds,
-// facet_descriptor f);
-// void
-// remove_facet(MutableFacetHDSConcept_archetype& hds,
-// facet_descriptor f);
+// void
+// set_facet(halfedge_descriptor h, facet_descriptor f,
+// MutableFacetHDSConcept_archetype& hds);
+// facet_descriptor
+// new_facet(MutableFacetHDSConcept_archetype& hds);
+// void
+// delete_facet(facet_descriptor f, MutableFacetHDSConcept_archetype& hds);
// };
//..
#ifndef BOOST_HDSTL_MUTABLE_FACET_HDS_CONCEPT_ARCHETYPE_HPP
#define BOOST_HDSTL_MUTABLE_FACET_HDS_CONCEPT_ARCHETYPE_HPP
+#include <boost/hdstl/hds_archetypes/mutable_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_archetypes/facet_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_traits.hpp>
#include <boost/concept_archetype.hpp>
namespace boost {
@@ -44,8 +57,31 @@
class MutableFacetHDSConcept_archetype; // forward declaration
-class MutableFacetHDSConcept_archetype : public HDSConcept_archetype,
- public FacetHDSConcept_archetype {
+template<>
+struct hds_traits<MutableFacetHDSConcept_archetype> {
+ // This template specialization of 'hds_traits' for the
+ // 'MutableFacetHDSConcept_archetype' provides the 'facet_descriptor' type.
+
+ // TYPES
+ typedef boost::default_constructible_archetype<
+ boost::copy_constructible_archetype<
+ boost::equality_comparable_archetype<
+ boost::assignable_archetype<> > > > halfedge_descriptor;
+ // Halfedge descriptor type for the 'MutableFacetHDSConcept' archetype.
+
+ typedef boost::default_constructible_archetype<
+ boost::copy_constructible_archetype<
+ boost::equality_comparable_archetype<
+ boost::assignable_archetype<> > > > facet_descriptor;
+ // Facet descriptor type for the 'MutableFacetHDSConcept' archetype.
+
+ enum {supports_vertices = false};
+ enum {supports_facets = true};
+};
+
+class MutableFacetHDSConcept_archetype
+ : public MutableHDSConcept_archetype,
+ public FacetHDSConcept_archetype {
// This archetype class for the 'MutableFacetHDSConcept' class can be used
// wherever a template parameter of a class or of a function template is
// required to be a model of the 'MutableFacetHDS' concept, in order to
@@ -53,35 +89,29 @@
// than are stated in the 'MutableFacetHDS' concept.
// PRIVATE TYPES
- typedef typename hds_traits<FacetHDSConcept_archetype
+ typedef hds_traits<MutableFacetHDSConcept_archetype
>::facet_descriptor facet_descriptor;
- typedef typename hds_traits<HDSConcept_archetype
+ typedef hds_traits<MutableFacetHDSConcept_archetype
>::halfedge_descriptor halfedge_descriptor;
- // NOT IMPLEMENTED
- MutableFacetHDSConcept_archetype();
- MutableFacetHDSConcept_archetype(
- const MutableFacetHDSConcept_archetype&);
public:
//MANIPULATORS
void
- set_facet(MutableFacetHDSConcept_archetype& hds,
- halfedge_descriptor h, facet_descriptor f);
+ set_facet(halfedge_descriptor h, facet_descriptor f,
+ MutableFacetHDSConcept_archetype& hds);
// sets the source facet descriptor value of 'h' to 'v' for a single
// halfedge in the 'hds' data structure.
- void
- add_facet(MutableFacetHDSConcept_archetype& hds,
- facet_descriptor f);
+ facet_descriptor
+ new_facet(MutableFacetHDSConcept_archetype& hds);
// adds a new facet 'v' to the 'hds' data structure. By this operation
// the facet is added but no connections to the halfedges are set. In
// order to assign vertces to halfedges 'set_facet(hds,h,v)' operation
// should be used.
void
- remove_facet(MutableFacetHDSConcept_archetype& hds,
- facet_descriptor f);
+ delete_facet(facet_descriptor f, MutableFacetHDSConcept_archetype& hds);
// removes the facet 'v' from the 'hds' data structure, by iterating
// in clockwise order around the facet and removing the connections
// with the halfedges.
@@ -90,23 +120,33 @@
//MANIPULATORS
+inline
void
-MutableFacetHDSConcept_archetype::set_facet(
- MutableFacetHDSConcept_archetype& hds,
- halfedge_descriptor h, facet_descriptor f)
-{}
-
-void
-MutableFacetHDSConcept_archetype::add_facet(
- MutableFacetHDSConcept_archetype& hds,
- facet_descriptor f)
-{}
+set_facet(hds_traits<MutableFacetHDSConcept_archetype>::halfedge_descriptor h,
+ hds_traits<MutableFacetHDSConcept_archetype>::facet_descriptor f,
+ MutableFacetHDSConcept_archetype& hds)
+{
+ (void)hds; // eliminate unused variable warning
+ (void)h; // eliminate unused variable warning
+ (void)f; // eliminate unused variable warning
+}
+
+inline
+hds_traits<MutableFacetHDSConcept_archetype>::facet_descriptor
+new_facet(MutableFacetHDSConcept_archetype& hds)
+{
+ (void)hds; // eliminate unused variable warning
+ return hds_traits<MutableFacetHDSConcept_archetype>::facet_descriptor();
+}
+inline
void
-MutableFacetHDSConcept_archetype::remove_facet(
- MutableFacetHDSConcept_archetype& hds,
- facet_descriptor f)
-{}
+delete_facet(hds_traits<MutableFacetHDSConcept_archetype>::facet_descriptor f,
+ MutableFacetHDSConcept_archetype& hds)
+{
+ (void)hds; // eliminate unused variable warning
+ (void)f; // eliminate unused variable warning
+}
} // end namespace hdstl
} // end namespace boost
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_facet_hds_concept_archetype.t.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_facet_hds_concept_archetype.t.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,41 @@
+//mutable_facet_hds_concept_archetype.t.cpp -*- C++ -*-
+//
+//@OVERVIEW: The component under test is a concept-archetype class. We
+// proceed with the standard test plan for such a class.
+//
+//@TEST_PLAN: Verify (using the Boost.ConceptCheck library macros) that the
+// class 'mutable_facet_hds_concept_archetype' satisfies all the concept requirements of the
+// 'HDS' concept.
+
+#include <boost/hdstl/hds_archetypes/mutable_facet_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_concepts/mutable_facet_hds_concept.hpp>
+#include <boost/test/minimal.hpp>
+#include <boost/concept_check.hpp>
+
+// ===========================================================================
+// BOOST TEST APPARATUS
+// ===========================================================================
+
+template <class HDS>
+struct class_concept_requirements
+{
+ BOOST_CLASS_REQUIRE(HDS, boost::hdstl::concepts, MutableFacetHDSConcept);
+};
+
+template <class HDS>
+bool concept_requirements()
+{
+ using namespace boost;
+ function_requires<hdstl::concepts::MutableFacetHDSConcept<HDS> >();
+ class_concept_requirements<HDS>(); // force instantiation
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_vertices);
+ BOOST_CHECK(true == hdstl::hds_traits<HDS>::supports_facets);
+ return true;
+}
+
+int test_main(int, char **)
+{
+ BOOST_CHECK(( concept_requirements<
+ boost::hdstl::MutableFacetHDSConcept_archetype>() ));
+ return 0;
+}
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_forward_hds_concept_archetype.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_forward_hds_concept_archetype.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,4 @@
+// mutable_forward_hds_concept_archetype.cpp -*- C++ -*-
+
+#include <boost/hdstl/hds_archetypes/mutable_forward_hds_concept_archetype.hpp>
+
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_forward_hds_concept_archetype.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_forward_hds_concept_archetype.hpp (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_forward_hds_concept_archetype.hpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -13,6 +13,18 @@
///---------------
//..
// template <typename ForwardCategory>
+// struct hds_traits<MutableForwardHDSConcept_archetype<ForwardCategory> > {
+// typedef boost::default_constructible_archetype<
+// boost::copy_constructible_archetype<
+// boost::equality_comparable_archetype<
+// boost::assignable_archetype<> > > > halfedge_descriptor;
+// typedef boost::convertible_to_archetype<forward_traversal_tag>
+// traversal_category;
+// typedef ForwardCategory forward_category;
+// enum {supports_vertices = false};
+// enum {supports_facets = false};
+// };
+// template <typename ForwardCategory>
// class MutableForwardHDSConcept_archetype
// : public ForwardHDSConcept_archetype<ForwardCategory>,
// public MutableHDSConcept_archetype {
@@ -21,26 +33,26 @@
// typedef typename hds_traits<ForwardHDSConcept_archetype<ForwardCategory>
// >::traversal_category traversal_category;
// typedef ForwardCategory forward_category;
-// MutableForwardHDSConcept_archetype();
-// MutableForwardHDSConcept_archetype(
-// const MutableForwardHDSConcept_archetype&);
// public:
// void
-// set_next_in_facet(MutableForwardHDSConcept_archetype& hds,
-// halfedge_descriptor h, halfedge_descriptor g);
+// set_next_in_facet(halfedge_descriptor h, halfedge_descriptor g,
+// MutableForwardHDSConcept_archetype& hds);
// void
-// set_next_at_source(MutableForwardHDSConcept_archetype& hds,
-// halfedge_descriptor h, halfedge_descriptor g);
+// set_next_at_source(halfedge_descriptor h, halfedge_descriptor g,
+// MutableForwardHDSConcept_archetype& hds);
// void
-// set_next_at_target(MutableForwardHDSConcept_archetype& hds,
-// halfedge_descriptor h, halfedge_descriptor g);
+// set_next_at_target(halfedge_descriptor h, halfedge_descriptor g,
+// MutableForwardHDSConcept_archetype& hds);
// };
//..
#ifndef BOOST_HDSTL_MUTABLE_FORWARD_HDS_CONCEPT_ARCHETYPE_HPP
#define BOOST_HDSTL_MUTABLE_FORWARD_HDS_CONCEPT_ARCHETYPE_HPP
-#include <boost/hds_archetype/hds_concept_archetypes.hpp>
+#include <boost/hdstl/hds_archetypes/forward_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_archetypes/mutable_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_traits.hpp>
+#include <boost/concept_archetype.hpp>
namespace boost {
namespace hdstl {
@@ -49,9 +61,38 @@
class MutableForwardHDSConcept_archetype; // forward declaration
template <typename ForwardCategory>
+struct hds_traits<MutableForwardHDSConcept_archetype<ForwardCategory> > {
+ // This template specialization of 'hds_traits' for the
+ // 'MutableForwardHDSConcept_archetype' provides the 'halfedge_descriptor'
+ // and 'traversal_category' types.
+
+ // TYPES
+ typedef boost::default_constructible_archetype<
+ boost::copy_constructible_archetype<
+ boost::equality_comparable_archetype<
+ boost::assignable_archetype<> > > > halfedge_descriptor;
+ // Halfedge descriptor type for the 'MutableForwardHDSConcept'
+ // archetype.
+
+ typedef boost::convertible_to_archetype<forward_traversal_tag>
+ traversal_category;
+ // This type, convertible to 'forward_traversal_tag', indicates that
+ // the 'MutableForwardHDSConcept' archetype is a model of
+ // 'MutableForwardHDSConcept'.
+
+ typedef ForwardCategory forward_category;
+ // This type, convertible to one or more of 'next_in_facet_tag',
+ // 'next_at_source_tag', or 'next_at_target_tag', indicates which is
+ // the primary accessor(s) for which the 'set_...' methods are defined.
+
+ enum {supports_vertices = false};
+ enum {supports_facets = false};
+};
+
+template <typename ForwardCategory>
class MutableForwardHDSConcept_archetype
-: public ForwardHDSConcept_archetype<ForwardCategory>,
- public MutableHDSConcept_archetype {
+: virtual public ForwardHDSConcept_archetype<ForwardCategory>,
+ virtual public MutableHDSConcept_archetype {
// This class provides an exact implementation (no more, no less) of the
// 'MutableForwardHDS' concept. It can be used to instantiate class and
// function templates that require their template arguments to be a model
@@ -59,12 +100,14 @@
// requirements.
// PRIVATE TYPES
- typedef typename hds_traits<HDSConcept_archetype
- >::halfedge_descriptor halfedge_descriptor;
+ typedef typename hds_traits<MutableForwardHDSConcept_archetype<
+ ForwardCategory> >::halfedge_descriptor
+ halfedge_descriptor;
//Halfedge descriptor type from 'HDSConcept'
- typedef typename hds_traits<ForwardHDSConcept_archetype<ForwardCategory>
- >::traversal_category traversal_category;
+ typedef typename hds_traits<MutableForwardHDSConcept_archetype<
+ ForwardCategory> >::traversal_category
+ traversal_category;
//traversal category type from from 'ForwardHDSConcept',
//has to be convertible to 'forward_traversal_tag'.
@@ -73,53 +116,69 @@
// 'next_at_source_tag', or 'next_at_target_tag', indicates which is
// the primary accessor(s) for which the 'set_...' methods are defined.
- // NOT IMPLEMENTED
- MutableForwardHDSConcept_archetype();
- MutableForwardHDSConcept_archetype(
- const MutableForwardHDSConcept_archetype&);
-
public:
// MANIPULATORS
void
- set_next_in_facet(MutableForwardHDSConcept_archetype& hds,
- halfedge_descriptor h, halfedge_descriptor g);
+ set_next_in_facet(halfedge_descriptor h, halfedge_descriptor g,
+ MutableForwardHDSConcept_archetype<ForwardCategory>& hds);
// set 'g' as the halfedge following 'h' in the (counter-clockwise)
// facet cycle of 'h' in 'hds'.
void
- set_next_at_source(MutableForwardHDSConcept_archetype& hds,
- halfedge_descriptor h, halfedge_descriptor g);
+ set_next_at_source(halfedge_descriptor h, halfedge_descriptor g,
+ MutableForwardHDSConcept_archetype<ForwardCategory>& hds);
// set 'g' as the halfedge following 'h' in the (clockwise) vertex
// cycle of the source of 'h' in 'hds'.
void
- set_next_at_target(MutableForwardHDSConcept_archetype& hds,
- halfedge_descriptor h, halfedge_descriptor g);
+ set_next_at_target(halfedge_descriptor h, halfedge_descriptor g,
+ MutableForwardHDSConcept_archetype<ForwardCategory>& hds);
// set 'g' as the halfedge following 'h' in the (clockwise) vertex
// cycle of the target of 'h' in 'hds'.
};
// MANIPULATORS
template <typename ForwardCategory>
+inline
void
-MutableForwardHDSConcept_archetype<ForwardCategory>::set_next_in_facet(
- MutableForwardHDSConcept_archetype& hds,
- halfedge_descriptor h, halfedge_descriptor g)
-{}
+set_next_in_facet(typename hds_traits<MutableForwardHDSConcept_archetype<
+ ForwardCategory> >::halfedge_descriptor h,
+ typename hds_traits<MutableForwardHDSConcept_archetype<
+ ForwardCategory> >::halfedge_descriptor g,
+ MutableForwardHDSConcept_archetype<ForwardCategory>& hds)
+{
+ (void)hds; // eliminate unused variable warning
+ (void)h; // eliminate unused variable warning
+ (void)g; // eliminate unused variable warning
+}
template <typename ForwardCategory>
+inline
void
-MutableForwardHDSConcept_archetype<ForwardCategory>::set_next_at_source(
- MutableForwardHDSConcept_archetype& hds,
- halfedge_descriptor h, halfedge_descriptor g)
-{}
+set_next_at_source(typename hds_traits<MutableForwardHDSConcept_archetype<
+ ForwardCategory> >::halfedge_descriptor h,
+ typename hds_traits<MutableForwardHDSConcept_archetype<
+ ForwardCategory> >::halfedge_descriptor g,
+ MutableForwardHDSConcept_archetype<ForwardCategory>& hds)
+{
+ (void)hds; // eliminate unused variable warning
+ (void)h; // eliminate unused variable warning
+ (void)g; // eliminate unused variable warning
+}
template <typename ForwardCategory>
+inline
void
-MutableForwardHDSConcept_archetype<ForwardCategory>::set_next_at_target(
- MutableForwardHDSConcept_archetype& hds,
- halfedge_descriptor h, halfedge_descriptor g)
-{}
+set_next_at_target(typename hds_traits<MutableForwardHDSConcept_archetype<
+ ForwardCategory> >::halfedge_descriptor h,
+ typename hds_traits<MutableForwardHDSConcept_archetype<
+ ForwardCategory> >::halfedge_descriptor g,
+ MutableForwardHDSConcept_archetype<ForwardCategory>& hds)
+{
+ (void)hds; // eliminate unused variable warning
+ (void)h; // eliminate unused variable warning
+ (void)g; // eliminate unused variable warning
+}
} // end namespace hdstl
} // end namespace boost
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_forward_hds_concept_archetype.t.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_forward_hds_concept_archetype.t.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,48 @@
+//mutable_forward_hds_concept_archetype.t.cpp -*- C++ -*-
+//
+//@OVERVIEW: The component under test is a concept-archetype class. We
+// proceed with the standard test plan for such a class.
+//
+//@TEST_PLAN: Verify (using the Boost.ConceptCheck library macros) that the
+// class 'mutable_forward_hds_concept_archetype' satisfies all the concept requirements of the
+// 'HDS' concept.
+
+#include <boost/hdstl/hds_archetypes/mutable_forward_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_concepts/mutable_forward_hds_concept.hpp>
+#include <boost/test/minimal.hpp>
+#include <boost/concept_check.hpp>
+
+// ===========================================================================
+// BOOST TEST APPARATUS
+// ===========================================================================
+
+template <class HDS>
+struct class_concept_requirements
+{
+ BOOST_CLASS_REQUIRE(HDS, boost::hdstl::concepts, MutableForwardHDSConcept);
+};
+
+template <class HDS>
+bool concept_requirements()
+{
+ using namespace boost;
+ function_requires<hdstl::concepts::MutableForwardHDSConcept<HDS> >();
+ class_concept_requirements<HDS>(); // force instantiation
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_vertices);
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_facets);
+ return true;
+}
+
+int test_main(int, char **)
+{
+ BOOST_CHECK(( concept_requirements<
+ boost::hdstl::MutableForwardHDSConcept_archetype<
+ boost::hdstl::next_in_facet_tag> >() ));
+ BOOST_CHECK(( concept_requirements<
+ boost::hdstl::MutableForwardHDSConcept_archetype<
+ boost::hdstl::next_at_source_tag> >() ));
+ BOOST_CHECK(( concept_requirements<
+ boost::hdstl::MutableForwardHDSConcept_archetype<
+ boost::hdstl::next_at_target_tag> >() ));
+ return 0;
+}
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_hds_concept_archetype.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_hds_concept_archetype.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,4 @@
+// mutable_hds_concept_archetype.cpp -*- C++ -*-
+
+#include <boost/hdstl/hds_archetypes/mutable_hds_concept_archetype.hpp>
+
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_hds_concept_archetype.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_hds_concept_archetype.hpp (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_hds_concept_archetype.hpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -12,22 +12,29 @@
///Archetype class
///---------------
//..
+// template<>
+// struct hds_traits<MutableHDSConcept_archetype> {
+// typedef boost::default_constructible_archetype<
+// boost::copy_constructible_archetype<
+// boost::equality_comparable_archetype<
+// boost::assignable_archetype<> > > > halfedge_descriptor;
+// enum { supports_facets = false };
+// enum { supports_vertices = false };
+// };
// class MutableHDSConcept_archetype : public HDSConcept_archetype {
-// typedef typename hds_traits<HDSConcept_archetype
+// typedef hds_traits<MutableHDSConcept_archetype
// >::halfedge_descriptor halfedge_descriptor;
// public:
-// void set_opposite(MutableHDSConcept_archetype&,
-// halfedge_descriptor&, halfedge_descriptor&);
-// halfedge_descriptor& new_edge(MutableHDSConcept_archetype&,
-// halfedge_descriptor&, halfedge_descriptor&);
-// void delete_edge(MutableHDSConcept_archetype&,
-// halfedge_descriptor&, halfedge_descriptor&);
+// halfedge_descriptor& new_edge(MutableHDSConcept_archetype&);
+// void delete_edge(halfedge_descriptor h, MutableHDSConcept_archetype&);
// };
//..
#ifndef BOOST_HDSTL_MUTABLE_HDS_CONCEPT_ARCHETYPE_HPP
#define BOOST_HDSTL_MUTABLE_HDS_CONCEPT_ARCHETYPE_HPP
+#include <boost/hdstl/hds_archetypes/hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_traits.hpp>
#include <boost/concept_archetype.hpp>
namespace boost {
@@ -35,7 +42,24 @@
class MutableHDSConcept_archetype; // forward declaration
-class MutableHDSConcept_archetype : public HDSConcept_archetype {
+template<>
+struct hds_traits<MutableHDSConcept_archetype> {
+ // This template specialization of 'hds_traits' for the
+ // 'MutableHDSConcept_archetype' provides the 'halfedge_descriptor' type.
+
+ // TYPES
+ typedef boost::default_constructible_archetype<
+ boost::copy_constructible_archetype<
+ boost::equality_comparable_archetype<
+ boost::assignable_archetype<> > > > halfedge_descriptor;
+ // Halfedge descriptor type for the 'MutableHDSConcept' archetype.
+
+ enum { supports_facets = false };
+ enum { supports_vertices = false };
+
+};
+
+class MutableHDSConcept_archetype : virtual public HDSConcept_archetype {
// This archetype class for the 'MutableHDSConcept' class can be used
// wherever a template parameter of a class or of a function template is
// required to be a model of the 'MutableHDS' concept, in order to ensure
@@ -43,42 +67,32 @@
// are stated in the 'MutableHDS' concept.
// PRIVATE TYPES
- typedef typename hds_traits<HDSConcept_archetype
+ typedef hds_traits<MutableHDSConcept_archetype
>::halfedge_descriptor halfedge_descriptor;
public:
// MANIPULATORS
- void set_opposite(MutableHDSConcept_archetype&,
- halfedge_descriptor&, halfedge_descriptor&);
- // Set the second halfedge descriptor as the opposite of the first
- // halfedge descriptor in 'hds'.
-
- halfedge_descriptor& new_edge(MutableHDSConcept_archetype&,
- halfedge_descriptor&, halfedge_descriptor&);
+ halfedge_descriptor& new_edge(MutableHDSConcept_archetype&);
// add two halfedges to the data structure.
- void delete_edge(MutableHDSConcept_archetype&,
- halfedge_descriptor&, halfedge_descriptor&);
+ void delete_edge(halfedge_descriptor h, MutableHDSConcept_archetype&);
// delete two halfedges from the data structure.
};
// MANIPULATORS
-void
-MutableHDSConcept_archetype::set_opposite(MutableHDSConcept_archetype&,
- halfedge_descriptor&, halfedge_descriptor&)
-{}
-
-typename hds_traits<MutableHDSConcept_archetype>::halfedge_descriptor
-MutableHDSConcept_archetype::new_edge(MutableHDSConcept_archetype&,
- halfedge_descriptor&, halfedge_descriptor&)
+inline
+hds_traits<MutableHDSConcept_archetype>::halfedge_descriptor
+new_edge(MutableHDSConcept_archetype&)
{
- return halfedge_descriptor();
+ return hds_traits<MutableHDSConcept_archetype>::halfedge_descriptor();
}
+inline
void
-MutableHDSConcept_archetype::delete_edge(MutableHDSConcept_archetype&,
- halfedge_descriptor&, halfedge_descriptor&)
-{}
+delete_edge(hds_traits<MutableHDSConcept_archetype>::halfedge_descriptor&,
+ MutableHDSConcept_archetype&)
+{
+}
} // end namespace hdstl
} // end namespace boost
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_hds_concept_archetype.t.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_hds_concept_archetype.t.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,40 @@
+//mutable_hds_concept_archetype.t.cpp -*- C++ -*-
+//
+//@OVERVIEW: The component under test is a concept-archetype class. We
+// proceed with the standard test plan for such a class.
+//
+//@TEST_PLAN: Verify (using the Boost.ConceptCheck library macros) that the
+// class 'mutable_hds_concept_archetype' satisfies all the concept requirements of the
+// 'HDS' concept.
+
+#include <boost/hdstl/hds_archetypes/mutable_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_concepts/mutable_hds_concept.hpp>
+#include <boost/test/minimal.hpp>
+#include <boost/concept_check.hpp>
+
+// ===========================================================================
+// BOOST TEST APPARATUS
+// ===========================================================================
+
+template <class HDS>
+struct class_concept_requirements
+{
+ BOOST_CLASS_REQUIRE(HDS, boost::hdstl::concepts, MutableHDSConcept);
+};
+
+template <class HDS>
+bool concept_requirements()
+{
+ using namespace boost;
+ function_requires<hdstl::concepts::MutableHDSConcept<HDS> >();
+ class_concept_requirements<HDS>(); // force instantiation
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_vertices);
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_facets);
+ return true;
+}
+
+int test_main(int, char **)
+{
+ BOOST_CHECK(( concept_requirements<boost::hdstl::MutableHDSConcept_archetype>() ));
+ return 0;
+}
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_vertex_hds_concept_archetype.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_vertex_hds_concept_archetype.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,4 @@
+// mutable_vertex_hds_concept_archetype.cpp -*- C++ -*-
+
+#include <boost/hdstl/hds_archetypes/mutable_vertex_hds_concept_archetype.hpp>
+
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_vertex_hds_concept_archetype.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_vertex_hds_concept_archetype.hpp (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_vertex_hds_concept_archetype.hpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -37,6 +37,9 @@
#ifndef BOOST_HDSTL_MUTABLE_VERTEX_HDS_CONCEPT_ARCHETYPE_HPP
#define BOOST_HDSTL_MUTABLE_VERTEX_HDS_CONCEPT_ARCHETYPE_HPP
+#include <boost/hdstl/hds_archetypes/mutable_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_archetypes/vertex_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_traits.hpp>
#include <boost/concept_archetype.hpp>
namespace boost {
@@ -44,7 +47,29 @@
class MutableVertexHDSConcept_archetype; // forward declaration
-class MutableVertexHDSConcept_archetype : public HDSConcept_archetype,
+template<>
+struct hds_traits<MutableVertexHDSConcept_archetype> {
+ // This template specialization of 'hds_traits' for the
+ // 'MutableVertexHDSConcept_archetype' provides the 'vertex_descriptor'
+ // type.
+
+ // TYPES
+ typedef boost::default_constructible_archetype<
+ boost::copy_constructible_archetype<
+ boost::equality_comparable_archetype<
+ boost::assignable_archetype<> > > > halfedge_descriptor;
+ // Halfedge descriptor type for the 'MutableVertexHDSConcept' archetype.
+
+ typedef boost::default_constructible_archetype<
+ boost::copy_constructible_archetype<
+ boost::equality_comparable_archetype<
+ boost::assignable_archetype<> > > > vertex_descriptor;
+ // Vertex descriptor type for the 'MutableVertexHDSConcept' archetype.
+
+ enum { supports_vertices = true };
+ enum { supports_facets = false };
+};
+class MutableVertexHDSConcept_archetype : public MutableHDSConcept_archetype,
public VertexHDSConcept_archetype {
// This archetype class for the 'MutableVertexHDSConcept' class can be used
// wherever a template parameter of a class or of a function template is
@@ -53,35 +78,30 @@
// than are stated in the 'MutableVertexHDS' concept.
// PRIVATE TYPES
- typedef typename hds_traits<VertexHDSConcept_archetype
+ typedef hds_traits<MutableVertexHDSConcept_archetype
>::vertex_descriptor vertex_descriptor;
- typedef typename hds_traits<HDSConcept_archetype
+ typedef hds_traits<MutableVertexHDSConcept_archetype
>::halfedge_descriptor halfedge_descriptor;
- // NOT IMPLEMENTED
- MutableVertexHDSConcept_archetype();
- MutableVertexHDSConcept_archetype(
- const MutableVertexHDSConcept_archetype&);
public:
//MANIPULATORS
void
- set_vertex(MutableVertexHDSConcept_archetype& hds,
- halfedge_descriptor h, vertex_descriptor v);
+ set_vertex(halfedge_descriptor h, vertex_descriptor v,
+ MutableVertexHDSConcept_archetype& hds);
// sets the source vertex descriptor value of 'h' to 'v' for a single
// halfedge in the 'hds' data structure.
- void
- add_vertex(MutableVertexHDSConcept_archetype& hds,
- vertex_descriptor v);
+ vertex_descriptor
+ new_vertex(MutableVertexHDSConcept_archetype& hds);
// 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.
void
- remove_vertex(MutableVertexHDSConcept_archetype& hds,
- vertex_descriptor v);
+ delete_vertex(vertex_descriptor v,
+ MutableVertexHDSConcept_archetype& hds);
// removes the vertex 'v' from the 'hds' data structure, by iterating
// in clockwise order around the vertex and removing the connections
// with the halfedges.
@@ -89,24 +109,34 @@
};
//MANIPULATORS
-
-void
-MutableVertexHDSConcept_archetype::set_vertex(
- MutableVertexHDSConcept_archetype& hds,
- halfedge_descriptor h, vertex_descriptor v)
-{}
-
+inline
void
-MutableVertexHDSConcept_archetype::add_vertex(
- MutableVertexHDSConcept_archetype& hds,
- vertex_descriptor v)
-{}
+set_vertex(hds_traits<MutableVertexHDSConcept_archetype>::halfedge_descriptor h,
+ hds_traits<MutableVertexHDSConcept_archetype>::vertex_descriptor v,
+ MutableVertexHDSConcept_archetype& hds)
+{
+ (void)hds; // eliminate unused variable warning
+ (void)h; // eliminate unused variable warning
+ (void)v; // eliminate unused variable warning
+}
+
+inline
+hds_traits<MutableVertexHDSConcept_archetype>::vertex_descriptor
+new_vertex(MutableVertexHDSConcept_archetype& hds)
+{
+ (void)hds; // eliminate unused variable warning
+ return hds_traits<MutableVertexHDSConcept_archetype>::vertex_descriptor();
+}
+inline
void
-MutableVertexHDSConcept_archetype::remove_vertex(
- MutableVertexHDSConcept_archetype& hds,
- vertex_descriptor v)
-{}
+delete_vertex(hds_traits<MutableVertexHDSConcept_archetype>
+ ::vertex_descriptor v,
+ MutableVertexHDSConcept_archetype& hds)
+{
+ (void)hds; // eliminate unused variable warning
+ (void)v; // eliminate unused variable warning
+}
} // end namespace hdstl
} // end namespace boost
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_vertex_hds_concept_archetype.t.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/mutable_vertex_hds_concept_archetype.t.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,41 @@
+//mutable_vertex_hds_concept_archetype.t.cpp -*- C++ -*-
+//
+//@OVERVIEW: The component under test is a concept-archetype class. We
+// proceed with the standard test plan for such a class.
+//
+//@TEST_PLAN: Verify (using the Boost.ConceptCheck library macros) that the
+// class 'mutable_vertex_hds_concept_archetype' satisfies all the concept requirements of the
+// 'HDS' concept.
+
+#include <boost/hdstl/hds_archetypes/mutable_vertex_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_concepts/mutable_vertex_hds_concept.hpp>
+#include <boost/test/minimal.hpp>
+#include <boost/concept_check.hpp>
+
+// ===========================================================================
+// BOOST TEST APPARATUS
+// ===========================================================================
+
+template <class HDS>
+struct class_concept_requirements
+{
+ BOOST_CLASS_REQUIRE(HDS, boost::hdstl::concepts, MutableVertexHDSConcept);
+};
+
+template <class HDS>
+bool concept_requirements()
+{
+ using namespace boost;
+ function_requires<hdstl::concepts::MutableVertexHDSConcept<HDS> >();
+ class_concept_requirements<HDS>(); // force instantiation
+ BOOST_CHECK(true == hdstl::hds_traits<HDS>::supports_vertices);
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_facets);
+ return true;
+}
+
+int test_main(int, char **)
+{
+ BOOST_CHECK(( concept_requirements<
+ boost::hdstl::MutableVertexHDSConcept_archetype>() ));
+ return 0;
+}
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/vertex_hds_concept_archetype.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/vertex_hds_concept_archetype.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,4 @@
+// vertex_hds_concept_archetype.cpp -*- C++ -*-
+
+#include <boost/hdstl/hds_archetypes/vertex_hds_concept_archetype.hpp>
+
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-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -12,23 +12,36 @@
///Archetype class
///---------------
//..
-// class VertexHDSConcept_archetype : public HDSConcept_archetype {
-// typedef typename hds_traits<VertexHDSConcept_archetype
-// >::vertex_descriptor vertex_descriptor;
-// };
-//
-// template<>
// struct hds_traits<VertexHDSConcept_archetype> {
// typedef boost::default_constructible_archetype<
// boost::copy_constructible_archetype<
// boost::equality_comparable_archetype<
+// boost::assignable_archetype<> > > > halfedge_descriptor;
+// typedef boost::default_constructible_archetype<
+// boost::copy_constructible_archetype<
+// boost::equality_comparable_archetype<
// boost::assignable_archetype<> > > > vertex_descriptor;
+// enum { supports_facets = false };
+// enum { supports_vertices = true };
+// };
+// class VertexHDSConcept_archetype : virtual public HDSConcept_archetype {
+// typedef hds_traits<VertexHDSConcept_archetype
+// >::vertex_descriptor vertex_descriptor;
+// typedef hds_traits<VertexHDSConcept_archetype
+// >::halfedge_descriptor halfedge_descriptor;
+// public:
+// vertex_descriptor
+// source(halfedge_descriptor, VertexHDSConcept_archetype const& hds) const;
+// vertex_descriptor
+// target(halfedge_descriptor, VertexHDSConcept_archetype const& hds) const;
// };
//..
#ifndef BOOST_HDSTL_VERTEX_HDS_CONCEPT_ARCHETYPE_HPP
#define BOOST_HDSTL_VERTEX_HDS_CONCEPT_ARCHETYPE_HPP
+#include <boost/hdstl/hds_archetypes/hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_traits.hpp>
#include <boost/concept_archetype.hpp>
namespace boost {
@@ -45,11 +58,20 @@
typedef boost::default_constructible_archetype<
boost::copy_constructible_archetype<
boost::equality_comparable_archetype<
+ boost::assignable_archetype<> > > > halfedge_descriptor;
+ // Halfedge descriptor type for the 'HDSConcept' archetype.
+
+ typedef boost::default_constructible_archetype<
+ boost::copy_constructible_archetype<
+ boost::equality_comparable_archetype<
boost::assignable_archetype<> > > > vertex_descriptor;
// Vertex descriptor type for the 'VertexHDSConcept' archetype.
+
+ enum { supports_facets = false };
+ enum { supports_vertices = true };
};
-class VertexHDSConcept_archetype : public HDSConcept_archetype {
+class VertexHDSConcept_archetype : virtual public HDSConcept_archetype {
// This archetype class for the 'VertexHDSConcept' class can be used
// wherever a template parameter of a class or of a function template is
// required to be a model of the 'VertexHDS' concept, in order to ensure
@@ -57,12 +79,10 @@
// are stated in the 'VertexHDS' concept.
// PRIVATE TYPES
- typedef typename hds_traits<VertexHDSConcept_archetype
+ typedef hds_traits<VertexHDSConcept_archetype
>::vertex_descriptor vertex_descriptor;
-
- // NOT IMPLEMENTED
- VertexHDSConcept_archetype();
- VertexHDSConcept_archetype(const VertexHDSConcept_archetype&);
+ typedef hds_traits<VertexHDSConcept_archetype
+ >::halfedge_descriptor halfedge_descriptor;
public:
// MANIPULATORS
@@ -76,16 +96,22 @@
};
//MANIPULATORS
-typename hds_traits<VertexHDSConcept_archetype>::vertex_descriptor
-VertexHDSConcept_archetype::source(halfedge_descriptor, VertexHDSConcept_archetype const& hds) const
+inline
+hds_traits<VertexHDSConcept_archetype>::vertex_descriptor
+source(hds_traits<VertexHDSConcept_archetype>::halfedge_descriptor,
+ VertexHDSConcept_archetype const& hds)
{
- return vertex_descriptor();
+ (void)hds; // eliminate unused variable warning
+ return hds_traits<VertexHDSConcept_archetype>::vertex_descriptor();
}
-typename hds_traits<VertexHDSConcept_archetype>::vertex_descriptor
-VertexHDSConcept_archetype::target(halfedge_descriptor, VertexHDSConcept_archetype const& hds) const
+inline
+hds_traits<VertexHDSConcept_archetype>::vertex_descriptor
+target(hds_traits<VertexHDSConcept_archetype>::halfedge_descriptor,
+ VertexHDSConcept_archetype const& hds)
{
- return vertex_descriptor();
+ (void)hds; // eliminate unused variable warning
+ return hds_traits<VertexHDSConcept_archetype>::vertex_descriptor();
}
} // end namespace hdstl
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/vertex_hds_concept_archetype.t.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/vertex_hds_concept_archetype.t.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,40 @@
+//vertex_hds_concept_archetype.t.cpp -*- C++ -*-
+//
+//@OVERVIEW: The component under test is a concept-archetype class. We
+// proceed with the standard test plan for such a class.
+//
+//@TEST_PLAN: Verify (using the Boost.ConceptCheck library macros) that the
+// class 'vertex_hds_concept_archetype' satisfies all the concept requirements of the
+// 'HDS' concept.
+
+#include <boost/hdstl/hds_archetypes/vertex_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_concepts/vertex_hds_concept.hpp>
+#include <boost/test/minimal.hpp>
+#include <boost/concept_check.hpp>
+
+// ===========================================================================
+// BOOST TEST APPARATUS
+// ===========================================================================
+
+template <class HDS>
+struct class_concept_requirements
+{
+ BOOST_CLASS_REQUIRE(HDS, boost::hdstl::concepts, VertexHDSConcept);
+};
+
+template <class HDS>
+bool concept_requirements()
+{
+ using namespace boost;
+ function_requires<hdstl::concepts::VertexHDSConcept<HDS> >();
+ class_concept_requirements<HDS>(); // force instantiation
+ BOOST_CHECK(true == hdstl::hds_traits<HDS>::supports_vertices);
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_facets);
+ return true;
+}
+
+int test_main(int, char **)
+{
+ BOOST_CHECK(( concept_requirements<boost::hdstl::VertexHDSConcept_archetype>() ));
+ return 0;
+}
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/vertex_list_hds_concept_archetype.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/vertex_list_hds_concept_archetype.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,4 @@
+// vertex_list_hds_concept_archetype.cpp -*- C++ -*-
+
+#include <boost/hdstl/hds_archetypes/vertex_list_hds_concept_archetype.hpp>
+
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/vertex_list_hds_concept_archetype.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/vertex_list_hds_concept_archetype.hpp (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/vertex_list_hds_concept_archetype.hpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -14,19 +14,27 @@
//..
// template <>
// struct hds_traits<VertexListHDSConcept_archetype> {
-// typedef hdstl_detail::MultiPassInputIteratorConcept<> vertex_iterator;
-// typedef size_type size_type;
+// typedef boost::default_constructible_archetype<
+// boost::copy_constructible_archetype<
+// boost::equality_comparable_archetype<
+// boost::assignable_archetype<> > > > halfedge_descriptor;
+// typedef boost::default_constructible_archetype<
+// boost::copy_constructible_archetype<
+// boost::equality_comparable_archetype<
+// boost::assignable_archetype<> > > > vertex_descriptor;
+// typedef boost::forward_iterator_archetype<vertex_descriptor> vertex_iterator;
+// typedef int size_type;
+// enum { supports_vertices = true };
+// enum { supports_facets = false };
// };
-// class VertexListHDSConcept_archetype : public HDSConcept_archetype,
-// public VertexHDSConcept_archetype {
-// typedef typename hds_traits<VertexListHDSConcept_archetype
+// class VertexListHDSConcept_archetype : public VertexHDSConcept_archetype {
+// typedef hds_traits<VertexListHDSConcept_archetype
// >::vertex_iterator vertex_iterator;
-// typedef typename hds_traits<VertexHDSConcept_archetype
+// typedef hds_traits<VertexHDSConcept_archetype
+// >::halfedge_descriptor halfedge_descriptor;
+// typedef hds_traits<VertexHDSConcept_archetype
// >::vertex_descriptor vertex_descriptor;
-// typedef typename hds_traits<VertexListHDSConcept_archetype
-// >::size_type size_type;
-// VertexListHDSConcept_archetype();
-// VertexListHDSConcept_archetype(const VertexListHDSConcept_archetype&);
+// typedef hds_traits<VertexListHDSConcept_archetype>::size_type size_type;
// public:
// vertex_iterator
// vertices_begin(VertexListHDSConcept_archetype const& hds) const;
@@ -40,7 +48,9 @@
#ifndef BOOST_HDSTL_VERTEX_LIST_HDS_CONCEPT_ARCHETYPE_HPP
#define BOOST_HDSTL_VERTEX_LIST_HDS_CONCEPT_ARCHETYPE_HPP
-#include <boost/hds_archetype/hds_concept_archetypes.hpp>
+#include <boost/hdstl/hds_archetypes/vertex_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_traits.hpp>
+#include <boost/concept_archetype.hpp>
namespace boost {
namespace hdstl {
@@ -54,16 +64,29 @@
// and 'size_type' types.
// TYPES
- typedef hdstl_detail::MultiPassInputIteratorConcept<> vertex_iterator;
+ typedef boost::default_constructible_archetype<
+ boost::copy_constructible_archetype<
+ boost::equality_comparable_archetype<
+ boost::assignable_archetype<> > > > halfedge_descriptor;
+ // Halfedge descriptor type for the 'VertexListHDSConcept' archetype.
+
+ typedef boost::default_constructible_archetype<
+ boost::copy_constructible_archetype<
+ boost::equality_comparable_archetype<
+ boost::assignable_archetype<> > > > vertex_descriptor;
+ // Vertex descriptor type for the 'VertexHDSConcept' archetype.
+
+ typedef boost::forward_iterator_archetype<vertex_descriptor> vertex_iterator;
// Vertex iterator type for the 'VertexListHDSConcept' archetype.
- typedef size_type size_type;
+ typedef int size_type;
// Vertex size type for the 'VertexListHDSConcept' archetype.
+
+ enum { supports_vertices = true };
+ enum { supports_facets = false };
};
-
-class VertexListHDSConcept_archetype : public HDSConcept_archetype,
- public VertexHDSConcept_archetype {
+class VertexListHDSConcept_archetype : public VertexHDSConcept_archetype {
// This class provides an exact implementation (no more, no less) of the
// 'VertexListHDS' concept. It can be used to instantiate class and
// function templates that require their template arguments to be a model
@@ -71,20 +94,18 @@
// requirements.
// PRIVATE TYPES
- typedef typename hds_traits<VertexListHDSConcept_archetype
+ typedef hds_traits<VertexListHDSConcept_archetype
>::vertex_iterator vertex_iterator;
- typedef typename hds_traits<VertexHDSConcept_archetype
+ typedef hds_traits<VertexHDSConcept_archetype
+ >::halfedge_descriptor halfedge_descriptor;
+
+ typedef hds_traits<VertexHDSConcept_archetype
>::vertex_descriptor vertex_descriptor;
//vertex_descriptor from the VertexHDSConcept used here.
- typedef typename hds_traits<VertexListHDSConcept_archetype
- >::size_type size_type;
+ typedef hds_traits<VertexListHDSConcept_archetype>::size_type size_type;
- // NOT IMPLEMENTED
- VertexListHDSConcept_archetype();
- VertexListHDSConcept_archetype(const VertexListHDSConcept_archetype&);
-
public:
// MANIPULATORS
vertex_iterator
@@ -103,25 +124,28 @@
};
// MANIPULATORS
-typename hds_traits<VertexListHDSConcept_archetype>::vertex_iterator
-VertexListHDSConcept_archetype<>::vertices_begin(
- VertexListHDSConcept_archetype const& hds) const
+inline
+hds_traits<VertexListHDSConcept_archetype>::vertex_iterator
+vertices_begin(VertexListHDSConcept_archetype const& hds)
{
- return vertex_iterator();
+ (void)hds; // eliminate unused variable warning
+ return hds_traits<VertexListHDSConcept_archetype>::vertex_iterator();
}
-typename hds_traits<VertexListHDSConcept_archetype>::vertex_iterator
-VertexListHDSConcept_archetype<>::vertices_end(
- VertexListHDSConcept_archetype const& hds) const
+inline
+hds_traits<VertexListHDSConcept_archetype>::vertex_iterator
+vertices_end(VertexListHDSConcept_archetype const& hds)
{
- return vertex_iterator();
+ (void)hds; // eliminate unused variable warning
+ return hds_traits<VertexListHDSConcept_archetype>::vertex_iterator();
}
-typename hds_traits<VertexListHDSConcept_archetype>::size_type
-VertexListHDSConcept_archetype<>::num_vertices(
- VertexListHDSConcept_archetype const& hds) const
+inline
+hds_traits<VertexListHDSConcept_archetype>::size_type
+num_vertices(VertexListHDSConcept_archetype const& hds)
{
- return size_type();
+ (void)hds; // eliminate unused variable warning
+ return 0;
}
} // end namespace hdstl
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/vertex_list_hds_concept_archetype.t.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_archetypes/vertex_list_hds_concept_archetype.t.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -0,0 +1,40 @@
+//vertex_list_hds_concept_archetype.t.cpp -*- C++ -*-
+//
+//@OVERVIEW: The component under test is a concept-archetype class. We
+// proceed with the standard test plan for such a class.
+//
+//@TEST_PLAN: Verify (using the Boost.ConceptCheck library macros) that the
+// class 'vertex_list_hds_concept_archetype' satisfies all the concept requirements of the
+// 'HDS' concept.
+
+#include <boost/hdstl/hds_archetypes/vertex_list_hds_concept_archetype.hpp>
+#include <boost/hdstl/hds_concepts/vertex_list_hds_concept.hpp>
+#include <boost/test/minimal.hpp>
+#include <boost/concept_check.hpp>
+
+// ===========================================================================
+// BOOST TEST APPARATUS
+// ===========================================================================
+
+template <class HDS>
+struct class_concept_requirements
+{
+ BOOST_CLASS_REQUIRE(HDS, boost::hdstl::concepts, VertexListHDSConcept);
+};
+
+template <class HDS>
+bool concept_requirements()
+{
+ using namespace boost;
+ function_requires<hdstl::concepts::VertexListHDSConcept<HDS> >();
+ class_concept_requirements<HDS>(); // force instantiation
+ BOOST_CHECK(true == hdstl::hds_traits<HDS>::supports_vertices);
+ BOOST_CHECK(false == hdstl::hds_traits<HDS>::supports_facets);
+ return true;
+}
+
+int test_main(int, char **)
+{
+ BOOST_CHECK(( concept_requirements<boost::hdstl::VertexListHDSConcept_archetype>() ));
+ return 0;
+}
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/facet_hds_concept.t.cpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/facet_hds_concept.t.cpp (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/facet_hds_concept.t.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -33,6 +33,7 @@
opposite(facet_hds_archetype::halfedge_descriptor h,
const facet_hds_archetype&)
{
+ (void)h; // eliminate unused variable warning
return h;
}
@@ -40,6 +41,7 @@
facet(facet_hds_archetype::halfedge_descriptor h,
const facet_hds_archetype&)
{
+ (void)h; // eliminate unused variable warning
return facet_hds_archetype::facet_descriptor();
}
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-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -191,7 +191,7 @@
void const_constraints(HDS const& hds)
// Check that the non-modifiable 'HDS' template parameters
// satisfies all the constraints of 'ForwardHDSConcept'.
- {
+ {
h = next_in_facet(h, hds);
h = next_at_source(h, hds);
h = next_at_target(h, hds);
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/halfedge_list_hds_concept.t.cpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/halfedge_list_hds_concept.t.cpp (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/halfedge_list_hds_concept.t.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -72,8 +72,6 @@
{
typedef hdstl1::halfedge_list_hds_archetype::halfedge_descriptor
halfedge_descriptor;
- typedef hdstl1::halfedge_list_hds_archetype::halfedge_descriptor
- halfedge_descriptor;
typedef hdstl1::halfedge_list_hds_archetype::halfedge_iterator
halfedge_iterator;
typedef hdstl1::halfedge_list_hds_archetype::size_type size_type;
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/vertex_hds_concept.t.cpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/vertex_hds_concept.t.cpp (original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/hds_concepts/vertex_hds_concept.t.cpp 2007-07-01 01:29:17 EDT (Sun, 01 Jul 2007)
@@ -40,6 +40,7 @@
source(vertex_hds_archetype::halfedge_descriptor h,
const vertex_hds_archetype&)
{
+ (void)h; // eliminate unused variable warning
return vertex_hds_archetype::vertex_descriptor();
}
@@ -47,6 +48,7 @@
target(vertex_hds_archetype::halfedge_descriptor h,
const vertex_hds_archetype&)
{
+ (void)h; // eliminate unused variable warning
return vertex_hds_archetype::vertex_descriptor();
}
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