$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: huseyinakcan_at_[hidden]
Date: 2007-07-17 21:47:03
Author: huseyinakcan
Date: 2007-07-17 21:47:01 EDT (Tue, 17 Jul 2007)
New Revision: 7461
URL: http://svn.boost.org/trac/boost/changeset/7461
Log:
halfedge_selector tests (not complete)
also I removed all the free functions from
halfedge_selectors.hpp and put them in halfedge_functions.hpp
Added:
   sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/halfedge_functions.hpp
   sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/halfedge_selectors.t.cpp
Text files modified: 
   sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/Makefile               |     5 +                                       
   sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/halfedge_ds.hpp        |    91 +++++++++++++++++++++++++++++---------- 
   sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/halfedge_selectors.hpp |    39 +++--------------                       
   sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/vertex_selectors.hpp   |     2                                         
   sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/vertex_selectors.t.cpp |     2                                         
   5 files changed, 79 insertions(+), 60 deletions(-)
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/Makefile
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/Makefile	(original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/Makefile	2007-07-17 21:47:01 EDT (Tue, 17 Jul 2007)
@@ -12,7 +12,7 @@
 PACKAGE_LIBRARY=libhalfedge_ds.a
 
 TEST_DRIVERS=container_selectors.t facet_selectors.t \
-	vertex_selectors.t
+	vertex_selectors.t halfedge_selectors.t
 
 .SUFFIXES:
 .SUFFIXES: ${TARGET}.o .o .cpp .hpp
@@ -50,6 +50,8 @@
 
 vertex_selectors.t.o: 
 
+halfedge_selectors.t.o: 
+
 %.t.o: %.t.cpp %.hpp
         ${CXX}  ${CXXFLAGS} ${CXXINCLUDES} -c -o $*.t.o $<
 
@@ -59,6 +61,7 @@
 
 vertex_selectors.t: 
 
+halfedge_selectors.t: 
 
 ## UTILITIES
 
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/halfedge_ds.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/halfedge_ds.hpp	(original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/halfedge_ds.hpp	2007-07-17 21:47:01 EDT (Tue, 17 Jul 2007)
@@ -47,7 +47,6 @@
                         typename HalfedgeS::container_selector, vecS>::value };
         enum { is_forward = HalfedgeS::is_forward };
         enum { is_backward = HalfedgeS::is_backward };
-        enum { is_bidir = HalfedgeS::is_bidir };
         typedef typename HalfedgeS::tag traversal_tag;
             // halfedge config
 
@@ -63,30 +62,72 @@
     };
 };
 
-//template<typename Selector, typename HalfedgeDescriptor>
-//struct opposite_helper {
-//    inline static
-//    HalfedgeDescriptor&
-//    opposite(HalfedgeDescriptor& h)
-//    {
-//        // halfedges come in pairs, point to each other as
-//        // opposite. If halfedges stored in a list, use the
-//        // opposite pointer.
-//        return h->opposite_;
-//    }
-//};
-//
-//template<typename HalfedgeDescriptor>
-//struct opposite_helper<vecS, HalfedgeDescriptor> {
-//    inline static
-//    HalfedgeDescriptor&
-//    opposite(HalfedgeDescriptor& h)
-//    {
-//        // halfedges come in pairs, point to each other as
-//        // opposite. If halfedges stored in a vector:
-//        return h^1;
-//    }
-//};
+template <typename HalfedgeS>
+struct halfedge_ds_gen<HalfedgeS, noVertexS, noFacetS> {
+    struct config {
+        
+        enum { halfedge_has_opposite_member =  !meta_is_same<
+                        typename HalfedgeS::container_selector, vecS>::value };
+        enum { is_forward = HalfedgeS::is_forward };
+        enum { is_backward = HalfedgeS::is_backward };
+        typedef typename HalfedgeS::tag traversal_tag;
+            // halfedge config
+        
+        enum { halfedge_supports_vertices = false };
+        enum { is_source = false }; // has no meaning here, 
+                                    // but vertex_helper in stored_halfedge 
+                                    // requires it defined even for noVertexS.
+        enum { is_target = false }; // has no meaning here 
+        
+        enum { halfedge_supports_facets = false };
+    };
+};
+
+template <typename HalfedgeS, typename FacetS>
+struct halfedge_ds_gen<HalfedgeS, noVertexS, FacetS> {
+    struct config {
+        
+        enum { halfedge_has_opposite_member =  !meta_is_same<
+                        typename HalfedgeS::container_selector, vecS>::value };
+        enum { is_forward = HalfedgeS::is_forward };
+        enum { is_backward = HalfedgeS::is_backward };
+        typedef typename HalfedgeS::tag traversal_tag;
+            // halfedge config
+
+        enum { halfedge_supports_vertices = false };
+        enum { is_source = false }; // has no meaning here, 
+                                    // but vertex_helper in stored_halfedge 
+                                    // requires it defined even for noVertexS.
+        enum { is_target = false }; // has no meaning here 
+        
+        enum { halfedge_supports_facets= !meta_is_same<FacetS,noFacetS>::value}; 
+            // facet config
+    };
+};
+
+template <typename HalfedgeS, typename VertexS>
+struct halfedge_ds_gen<HalfedgeS, VertexS, noFacetS> {
+    struct config {
+        
+        enum { halfedge_has_opposite_member =  !meta_is_same<
+                        typename HalfedgeS::container_selector, vecS>::value };
+        enum { is_forward = HalfedgeS::is_forward };
+        enum { is_backward = HalfedgeS::is_backward };
+        typedef typename HalfedgeS::tag traversal_tag;
+            // halfedge config
+
+        enum { halfedge_supports_vertices = !meta_is_same<
+                                                 VertexS,noVertexS>::value }; 
+        enum { is_source = VertexS::is_source };
+        enum { is_target = VertexS::is_target };
+        enum { has_vertex_link = VertexS::has_vertex_link };
+            // vertex config
+        
+        enum { halfedge_supports_facets= false }; 
+            // facet config
+    };
+};
+
 
 //template <typename HalfedgeS = halfedgeS<vecS, forwardS<next_in_facet_tag> >,
 //          typename VertexS = vertexS<vecS, vertexLinkS, sourceS>,
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/halfedge_functions.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/halfedge_functions.hpp	2007-07-17 21:47:01 EDT (Tue, 17 Jul 2007)
@@ -0,0 +1,96 @@
+//halfedge_functions.hpp   -*- C++ -*-
+//
+//@PURPOSE: Provide free functions for accessing and manipulating halfedges.
+//
+//@DESCRIPTION: This file provides free functions for accessing and
+// manipulating halfedges. The list of these functions are as follows:
+//
+//  - halfedges_begin: returns an iterator to the first halfedge in the 'hds' 
+//  - halfedges_end: returns an iterator after the last halfedge in the 'hds'
+//  - num_halfedges: returns the number of halfedges in the 'hds'
+//
+
+#ifndef BOOST_HDSTL_HALFEDGE_FUNCTIONS_HPP
+#define BOOST_HDSTL_HALFEDGE_FUNCTIONS_HPP 1
+
+#include <boost/hdstl/halfedge_ds/halfedge_selectors.hpp>
+
+namespace boost {
+namespace hdstl {
+
+// FREE FUNCTIONS
+template <typename HalfedgeS, typename HalfedgeDescriptor, 
+          typename VertexDescriptor, typename FacetDescriptor, typename Config>
+typename halfedge_gen<HalfedgeS, HalfedgeDescriptor, VertexDescriptor, 
+                                   FacetDescriptor, Config>::halfedge_iterator
+halfedges_begin(halfedge_gen<HalfedgeS, HalfedgeDescriptor, VertexDescriptor, 
+                                         FacetDescriptor, Config>& hds) {
+    typedef typename halfedge_gen<HalfedgeS, HalfedgeDescriptor,
+          VertexDescriptor,FacetDescriptor, Config>::ContainerGen ContainerGen;
+    return ContainerGen::container_begin(hds.m_container);
+}
+
+template <typename HalfedgeS, typename HalfedgeDescriptor, 
+          typename VertexDescriptor, typename FacetDescriptor, typename Config>
+typename halfedge_gen<HalfedgeS, HalfedgeDescriptor, VertexDescriptor, 
+                                    FacetDescriptor, Config>::halfedge_iterator
+halfedges_end(halfedge_gen<HalfedgeS, HalfedgeDescriptor, VertexDescriptor, 
+                                         FacetDescriptor, Config>& hds) {
+    typedef typename halfedge_gen<HalfedgeS, HalfedgeDescriptor,
+          VertexDescriptor,FacetDescriptor, Config>::ContainerGen ContainerGen;
+    return ContainerGen::container_end(hds.m_container);
+}
+
+template <typename HalfedgeS, typename HalfedgeDescriptor, 
+          typename VertexDescriptor, typename FacetDescriptor, typename Config>
+typename halfedge_gen<HalfedgeS, HalfedgeDescriptor, VertexDescriptor, 
+                                    FacetDescriptor, Config>::size_type
+num_halfedges(halfedge_gen<HalfedgeS, HalfedgeDescriptor, VertexDescriptor, 
+                                         FacetDescriptor, Config>& hds) {
+    return hds.m_container.size();
+}
+
+template<typename HalfedgeS, typename HalfedgeDescriptor>
+struct opposite_function_helper {
+    inline static
+    HalfedgeDescriptor&
+    opposite(HalfedgeDescriptor& h)
+    {
+        // halfedges come in pairs, point to each other as
+        // opposite. If halfedges stored in a list, use the
+        // opposite pointer.
+        return h->m_opposite;
+    }
+};
+
+template<typename HalfedgeDescriptor, typename TraversalS>
+struct opposite_function_helper<halfedgeS<vecS,TraversalS>, HalfedgeDescriptor> {
+    inline static
+    HalfedgeDescriptor&
+    opposite(HalfedgeDescriptor& h)
+    {
+        // halfedges come in pairs, point to each other as
+        // opposite. If halfedges stored in a vector:
+        return h^1;
+    }
+};
+
+template <typename HalfedgeS, typename HalfedgeDescriptor, 
+          typename VertexDescriptor, typename FacetDescriptor, typename Config>
+HalfedgeDescriptor&
+opposite(HalfedgeDescriptor& h, halfedge_gen<HalfedgeS, HalfedgeDescriptor, 
+                                VertexDescriptor, FacetDescriptor, Config>& hds)
+{
+    
+    typedef typename halfedge_gen<HalfedgeS, HalfedgeDescriptor,
+                                  VertexDescriptor,FacetDescriptor, Config>
+                                  ::halfedge_selector halfedge_selector;
+    return opposite_function_helper<halfedge_selector,HalfedgeDescriptor>
+                                   ::opposite(h);
+}
+
+
+} // namespace hdstl
+} // namespace boost
+
+#endif
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/halfedge_selectors.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/halfedge_selectors.hpp	(original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/halfedge_selectors.hpp	2007-07-17 21:47:01 EDT (Tue, 17 Jul 2007)
@@ -117,7 +117,7 @@
 template<bool IsSource, typename VertexDescriptor>
 struct vertex_helper<true, IsSource, VertexDescriptor> 
 : public source_helper<IsSource>
-, public target_helper<!IsTarget>
+, public target_helper<!IsSource>
 {
 };
 
@@ -165,7 +165,7 @@
 struct stored_halfedge 
 : public opposite_helper<Config::halfedge_has_opposite_member, HalfedgeDescriptor>,
   public vertex_helper<Config::halfedge_supports_vertices,
-                       Config::is_source, Config::is_target, VertexDescriptor>,
+                       Config::is_source, VertexDescriptor>,
   public facet_helper<Config::halfedge_supports_facets, FacetDescriptor>,
   public traversal_helper<Config::is_forward, Config::is_backward, HalfedgeDescriptor>
 {
@@ -199,6 +199,8 @@
 struct halfedge_gen<halfedgeS<ContainerS,TraversalS>, HalfedgeDescriptor,
                     VertexDescriptor, FacetDescriptor, Config> {
     // TYPES
+    typedef halfedgeS<ContainerS,TraversalS>            halfedge_selector;
+
     typedef stored_halfedge<HalfedgeDescriptor, VertexDescriptor, 
                                         FacetDescriptor, Config> halfedge_type;
         // The stored halfedge type for this halfedge generator.
@@ -209,6 +211,9 @@
     typedef typename ContainerGen::type                 container_type;
         // The halfedge container type for this halfedge generator.
 
+    typedef typename ContainerGen::size_type                 size_type;
+        // The halfedge container size type for this halfedge generator.
+    
     typedef typename ContainerGen::descriptor           halfedge_descriptor;
         // The halfedge descriptor type for this halfedge generator.
 
@@ -221,37 +226,7 @@
         // obtained.
 };
 
-// FREE FUNCTIONS
-template <typename HalfedgeS, typename HalfedgeDescriptor, 
-          typename VertexDescriptor, typename FacetDescriptor, typename Config>
-typename halfedge_gen<HalfedgeS, HalfedgeDescriptor, VertexDescriptor, 
-                                             FacetDescriptor, Config>::iterator
-halfedges_begin(halfedge_gen<HalfedgeS, HalfedgeDescriptor, VertexDescriptor, 
-                                         FacetDescriptor, Config> const& hds) {
-    typedef typename halfedge_gen<HalfedgeS, HalfedgeDescriptor,
-          VertexDescriptor,FacetDescriptor, Config>::ContainerGen ContainerGen;
-    return ContainerGen::container_begin(hds.m_container);
-}
-
-template <typename HalfedgeS, typename HalfedgeDescriptor, 
-          typename VertexDescriptor, typename FacetDescriptor, typename Config>
-typename halfedge_gen<HalfedgeS, HalfedgeDescriptor, VertexDescriptor, 
-                                             FacetDescriptor, Config>::iterator
-halfedges_end(halfedge_gen<HalfedgeS, HalfedgeDescriptor, VertexDescriptor, 
-                                         FacetDescriptor, Config> const& hds) {
-    typedef typename halfedge_gen<HalfedgeS, HalfedgeDescriptor,
-          VertexDescriptor,FacetDescriptor, Config>::ContainerGen ContainerGen;
-    return ContainerGen::container_end(hds.m_container);
-}
 
-template <typename HalfedgeS, typename HalfedgeDescriptor, 
-          typename VertexDescriptor, typename FacetDescriptor, typename Config>
-typename halfedge_gen<HalfedgeS, HalfedgeDescriptor, VertexDescriptor, 
-                                             FacetDescriptor, Config>::iterator
-num_halfedges(halfedge_gen<HalfedgeS, HalfedgeDescriptor, VertexDescriptor, 
-                                         FacetDescriptor, Config> const& hds) {
-    return hds.m_container.size();
-}
 } // namespace hdstl
 } // namespace boost
 
Added: sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/halfedge_selectors.t.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/halfedge_selectors.t.cpp	2007-07-17 21:47:01 EDT (Tue, 17 Jul 2007)
@@ -0,0 +1,361 @@
+//halfedge_selectors.hpp   -*- C++ -*-
+//
+//@OVERVIEW:  The component under test is a selector class.  We
+// must make sure that all selectors are suitably defined and that the
+// selection is done properly.
+//
+//@TEST_PLAN: First create an instance of all the selectors (to make sure they
+// exist, and verify that there are no more than tested).  Then instantiate the
+// 'container_gen<HalfedgeS,ValueType>' for a given value type and all
+// selectors, and verify that its members have the expected types and
+// signatures.  Finally, verify that the usage example compiles and executes
+// without errors, when assert is replaced by BOOST_CHECK.
+
+#include <boost/hdstl/halfedge_ds/halfedge_selectors.hpp>
+#include <boost/hdstl/halfedge_ds/halfedge_functions.hpp>
+
+#include <boost/test/minimal.hpp>
+
+#include <set>
+#include <string>
+#include <vector>
+
+using namespace boost::hdstl;
+using namespace std;
+
+// ===========================================================================
+//                              SELECTION CLASSES
+// ===========================================================================
+
+template <typename HalfedgeS>
+bool selection_requirements(HalfedgeS const&) {
+    return false;
+}
+
+template <typename Selector, typename ForwardCategory>
+bool selection_requirements(halfedgeS<Selector, 
+                            forwardS<ForwardCategory> > const&) {
+    return true;
+}
+
+template <typename Selector, typename BackwardCategory>
+bool selection_requirements(halfedgeS<Selector, 
+                            backwardS<BackwardCategory> > const&) {
+    return true;
+}
+
+template <typename Selector, typename ForwardCategory,
+                             typename BackwardCategory>
+bool selection_requirements(halfedgeS<Selector, 
+                            bidirS<ForwardCategory, 
+                            BackwardCategory> > const&) {
+    return true;
+}
+
+// ===========================================================================
+//                              CLASS HALFEDGE_GEN
+// ===========================================================================
+
+
+template <typename HalfedgeGen>
+bool halfedge_gen_requirements_void() {
+    
+    // Types must exist.
+    typedef typename HalfedgeGen::halfedge_selector   halfedge_selector;
+    typedef typename HalfedgeGen::halfedge_descriptor halfedge_descriptor;
+    typedef typename HalfedgeGen::halfedge_iterator   halfedge_iterator;
+    typedef typename HalfedgeGen::halfedge_type       halfedge_type;
+    typedef typename HalfedgeGen::container_type      container_type;
+
+    halfedge_type fa;
+    halfedge_type fb;
+    halfedge_type fc;
+    halfedge_type fd;
+    fa.m_opposite = 1;
+    fb.m_opposite = 2;
+    fc.m_opposite = 3;
+    fd.m_opposite = 4;
+    halfedge_type array[] = { fa, fb, fc, fd };  
+    
+    // Construct a halfedge_gen object whose container contains array.  Verify
+    // that halfedges_begin(), halfedges_end(), and num_halfedges() work.
+
+    container_type temp_con(array,array+4);
+    HalfedgeGen halfedgeGen;
+    halfedgeGen.m_container = temp_con;
+    BOOST_CHECK(( num_halfedges(halfedgeGen) == 4 ));
+    //BOOST_CHECK(( opposite(*halfedges_begin(halfedgeGen), halfedgeGen) == 1));
+    BOOST_CHECK(( halfedges_begin(halfedgeGen)->m_opposite == 1 ));
+    BOOST_CHECK(( (--halfedges_end(halfedgeGen))->m_opposite == 4 ));
+
+    //BOOST_CHECK(( halfedge(*halfedges_begin(halfedgeGen), halfedgeGen) == 1 ));
+    //BOOST_CHECK(( halfedge(*(--halfedges_end(halfedgeGen)), halfedgeGen) == 4 ));
+    return true;
+}
+
+template <typename HalfedgeGen, typename Base>
+bool halfedge_gen_requirements() {
+    
+    typedef typename HalfedgeGen::halfedge_selector   halfedge_selector;
+    typedef typename HalfedgeGen::halfedge_descriptor halfedge_descriptor;
+    typedef typename HalfedgeGen::halfedge_iterator   halfedge_iterator;
+    typedef typename HalfedgeGen::halfedge_type       halfedge_type;
+    typedef typename HalfedgeGen::container_type   container_type;
+
+    halfedge_type fa(1, Base(1));
+    halfedge_type fb(2, Base(2));
+    halfedge_type fc(3, Base(3));
+    halfedge_type fd(4, Base(4));
+    halfedge_type array[] = { fa, fb, fc, fd };  (void) array;
+    
+    // Same checks as before:
+    //BOOST_CHECK(( halfedge_gen_requirements_void<HalfedgeGen>() ));
+    container_type temp_con(array,array+4);
+    HalfedgeGen halfedgeGen;
+    halfedgeGen.m_container = temp_con;
+    BOOST_CHECK(( num_halfedges(halfedgeGen) == 4 ));
+
+    BOOST_CHECK(( halfedges_begin(halfedgeGen)->m_halfedgeLink == 1 ));
+    BOOST_CHECK(( (--halfedges_end(halfedgeGen))->m_halfedgeLink == 4 ));
+
+    //BOOST_CHECK(( halfedge(*halfedges_begin(halfedgeGen), halfedgeGen) == 1 ));
+    //BOOST_CHECK(( halfedge(*(--halfedges_end(halfedgeGen)), halfedgeGen) == 4 ));
+    
+    // Plus: get the base back from the halfedges and making sure it matches.
+    BOOST_CHECK(( halfedges_begin(halfedgeGen)->base() == 1 ));
+    BOOST_CHECK(( (--halfedges_end(halfedgeGen))->base() == 4 ));
+
+    return true;
+}
+
+// ===========================================================================
+//                              USAGE EXAMPLE
+// ===========================================================================
+
+// The usage example is the component itself.
+
+// ===========================================================================
+//                              BOOST TEST APPARATUS
+// ===========================================================================
+
+int test_main(int, char **)
+{
+    BOOST_CHECK(( selection_requirements(halfedgeS<listS,
+                                            forwardS<next_in_facet_tag> >()) ));
+    BOOST_CHECK(( selection_requirements(halfedgeS<listS,
+                                           forwardS<next_at_source_tag> >()) ));
+    BOOST_CHECK(( selection_requirements(halfedgeS<listS,
+                                           forwardS<next_at_target_tag> >()) ));
+    
+    BOOST_CHECK(( selection_requirements(halfedgeS<listS,
+                                           backwardS<prev_in_facet_tag> >()) ));
+    BOOST_CHECK(( selection_requirements(halfedgeS<listS,
+                                          backwardS<prev_at_source_tag> >()) ));
+    BOOST_CHECK(( selection_requirements(halfedgeS<listS,
+                                          backwardS<prev_at_target_tag> >()) ));
+    
+    BOOST_CHECK(( selection_requirements(halfedgeS<listS,
+                           bidirS<next_in_facet_tag, prev_in_facet_tag> >()) ));
+    BOOST_CHECK(( selection_requirements(halfedgeS<listS,
+                         bidirS<next_at_source_tag, prev_at_source_tag> >()) ));
+    BOOST_CHECK(( selection_requirements(halfedgeS<listS,
+                         bidirS<next_at_target_tag, prev_at_target_tag> >()) ));
+
+                    // ==============
+                    // check forwardS
+                    // ==============
+    BOOST_CHECK(( halfedge_gen_requirements_void<
+                  halfedge_gen<
+                  halfedgeS<listS, forwardS<next_in_facet_tag> >, 
+                  int, int, int, 
+                  halfedge_ds_gen<
+                  halfedgeS<listS, forwardS<next_in_facet_tag> >, 
+                  noVertexS, noFacetS>
+                  ::config> 
+                  >() ));
+    BOOST_CHECK(( halfedge_gen_requirements_void<
+                  halfedge_gen<
+                  halfedgeS<listS, forwardS<next_at_source_tag> >, 
+                  int, int, int, 
+                  halfedge_ds_gen<
+                  halfedgeS<listS, forwardS<next_at_source_tag> >, 
+                  noVertexS, noFacetS>
+                  ::config> 
+                  >() ));
+    BOOST_CHECK(( halfedge_gen_requirements_void<
+                  halfedge_gen<
+                  halfedgeS<listS, forwardS<next_at_target_tag> >, 
+                  int, int, int, 
+                  halfedge_ds_gen<
+                  halfedgeS<listS, forwardS<next_at_target_tag> >, 
+                  noVertexS, noFacetS>
+                  ::config> 
+                  >() ));
+                    
+                    // ===============
+                    // check backwardS
+                    // ===============
+
+    BOOST_CHECK(( halfedge_gen_requirements_void<
+                  halfedge_gen<
+                  halfedgeS<listS, backwardS<prev_in_facet_tag> >, 
+                  int, int, int, 
+                  halfedge_ds_gen<
+                  halfedgeS<listS, backwardS<prev_in_facet_tag> >, 
+                  noVertexS, noFacetS>
+                  ::config> 
+                  >() ));
+    BOOST_CHECK(( halfedge_gen_requirements_void<
+                  halfedge_gen<
+                  halfedgeS<listS, backwardS<prev_at_source_tag> >, 
+                  int, int, int, 
+                  halfedge_ds_gen<
+                  halfedgeS<listS, backwardS<prev_at_source_tag> >, 
+                  noVertexS, noFacetS>
+                  ::config> 
+                  >() ));
+    BOOST_CHECK(( halfedge_gen_requirements_void<
+                  halfedge_gen<
+                  halfedgeS<listS, backwardS<prev_at_target_tag> >, 
+                  int, int, int, 
+                  halfedge_ds_gen<
+                  halfedgeS<listS, backwardS<prev_at_target_tag> >, 
+                  noVertexS, noFacetS>
+                  ::config> 
+                  >() ));
+                    
+                    // ============
+                    // check bidirS
+                    // ============
+
+    BOOST_CHECK(( halfedge_gen_requirements_void<
+                  halfedge_gen<
+                  halfedgeS<listS, bidirS<next_in_facet_tag,
+                                          prev_in_facet_tag> >, 
+                  int, int, int, 
+                  halfedge_ds_gen<
+                  halfedgeS<listS, bidirS<next_in_facet_tag,
+                                          prev_in_facet_tag> >, 
+                  noVertexS, noFacetS>
+                  ::config> 
+                  >() ));
+    BOOST_CHECK(( halfedge_gen_requirements_void<
+                  halfedge_gen<
+                  halfedgeS<listS, bidirS<next_at_source_tag,
+                                          prev_at_source_tag> >, 
+                  int, int, int, 
+                  halfedge_ds_gen<
+                  halfedgeS<listS, bidirS<next_at_source_tag,
+                                          prev_at_source_tag> >, 
+                  noVertexS, noFacetS>
+                  ::config> 
+                  >() ));
+    BOOST_CHECK(( halfedge_gen_requirements_void<
+                  halfedge_gen<
+                  halfedgeS<listS, bidirS<next_at_target_tag,
+                                          prev_at_target_tag> >, 
+                  int, int, int, 
+                  halfedge_ds_gen<
+                  halfedgeS<listS, bidirS<next_at_target_tag,
+                                          prev_at_target_tag> >, 
+                  noVertexS, noFacetS>
+                  ::config> 
+                  >() ));
+                    
+                    // =============
+                    // check vertexS
+                    // =============
+    
+    BOOST_CHECK(( halfedge_gen_requirements_void<
+                  halfedge_gen<
+                  halfedgeS<listS, forwardS<next_in_facet_tag> >, 
+                  int, int, int, 
+                  halfedge_ds_gen<
+                  halfedgeS<listS, forwardS<next_in_facet_tag> >, 
+                  vertexS<listS,false,sourceS>, noFacetS>
+                  ::config> 
+                  >() ));
+    BOOST_CHECK(( halfedge_gen_requirements_void<
+                  halfedge_gen<
+                  halfedgeS<listS, forwardS<next_in_facet_tag> >, 
+                  int, int, int, 
+                  halfedge_ds_gen<
+                  halfedgeS<listS, forwardS<next_in_facet_tag> >, 
+                  vertexS<listS,false,targetS>, noFacetS>
+                  ::config> 
+                  >() ));
+    BOOST_CHECK(( halfedge_gen_requirements_void<
+                  halfedge_gen<
+                  halfedgeS<listS, forwardS<next_in_facet_tag> >, 
+                  int, int, int, 
+                  halfedge_ds_gen<
+                  halfedgeS<listS, forwardS<next_in_facet_tag> >, 
+                  vertexS<listS,true,sourceS>, noFacetS>
+                  ::config> 
+                  >() ));
+    BOOST_CHECK(( halfedge_gen_requirements_void<
+                  halfedge_gen<
+                  halfedgeS<listS, forwardS<next_in_facet_tag> >, 
+                  int, int, int, 
+                  halfedge_ds_gen<
+                  halfedgeS<listS, forwardS<next_in_facet_tag> >, 
+                  vertexS<listS,true,targetS>, noFacetS>
+                  ::config> 
+                  >() ));
+    
+                    // ============
+                    // check facetS
+                    // ============
+    
+    BOOST_CHECK(( halfedge_gen_requirements_void<
+                  halfedge_gen<
+                  halfedgeS<listS, forwardS<next_in_facet_tag> >, 
+                  int, int, int, 
+                  halfedge_ds_gen<
+                  halfedgeS<listS, forwardS<next_in_facet_tag> >, 
+                  noVertexS, facetS<listS,true> >
+                  ::config> 
+                  >() ));
+    BOOST_CHECK(( halfedge_gen_requirements_void<
+                  halfedge_gen<
+                  halfedgeS<listS, forwardS<next_in_facet_tag> >, 
+                  int, int, int, 
+                  halfedge_ds_gen<
+                  halfedgeS<listS, forwardS<next_in_facet_tag> >, 
+                  noVertexS, facetS<listS,false> >
+                  ::config> 
+                  >() ));
+/*
+    BOOST_CHECK(( halfedge_gen_requirements_noHalfedgeLink<
+                          halfedge_gen<halfedgeS<listS,false>, int, int>, int >() ));
+    BOOST_CHECK(( halfedge_gen_requirements<
+                          halfedge_gen<halfedgeS<listS,true>, int, int>, int >() ));
+   
+    // BOOST_CHECK(( halfedge_gen_requirements<
+    //           halfedge_gen<halfedgeS<listS,false>, int, custom_halfedge_base> >() ));
+
+    // BOOST_CHECK(( halfedge_gen_requirements<
+    //           halfedge_gen<halfedgeS<listS,true>, int, custom_halfedge_base> >() ));
+    
+    BOOST_CHECK(( selection_requirements(halfedgeS<vecS,true>()) ));
+    BOOST_CHECK(( selection_requirements(halfedgeS<vecS,false>()) ));
+    
+    BOOST_CHECK(( halfedge_gen_requirements_void_noHalfedgeLink<
+                              halfedge_gen<halfedgeS<vecS,false>, int, void> >() ));
+    BOOST_CHECK(( halfedge_gen_requirements_void<
+                              halfedge_gen<halfedgeS<vecS,true>, int, void> >() ));
+
+    BOOST_CHECK(( halfedge_gen_requirements_noHalfedgeLink<
+                          halfedge_gen<halfedgeS<vecS,false>, int, int>, int >() ));
+    BOOST_CHECK(( halfedge_gen_requirements<
+                          halfedge_gen<halfedgeS<vecS,true>, int, int>, int >() ));
+
+    // BOOST_CHECK(( halfedge_gen_requirements<
+    //            halfedge_gen<halfedgeS<vecS,false>, int, custom_halfedge_base> >() ));
+    // BOOST_CHECK(( halfedge_gen_requirements<
+    //             halfedge_gen<halfedgeS<vecS,true>, int, custom_halfedge_base> >() ));
+    //BOOST_CHECK(( usageExample() ));
+  */  
+    return 0;
+}
+
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/vertex_selectors.hpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/vertex_selectors.hpp	(original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/vertex_selectors.hpp	2007-07-17 21:47:01 EDT (Tue, 17 Jul 2007)
@@ -254,7 +254,7 @@
         // A selector (see the compenent 'container_selector') for the type of
         // container that will be used to store the vertices.
 
-    enum { has_vertex_links = HasVertexLink };
+    enum { has_vertex_link = HasVertexLink };
 };
 
                  // ===================
Modified: sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/vertex_selectors.t.cpp
==============================================================================
--- sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/vertex_selectors.t.cpp	(original)
+++ sandbox/SOC/2007/geometry/libs/hdstl/dev/halfedge_ds/vertex_selectors.t.cpp	2007-07-17 21:47:01 EDT (Tue, 17 Jul 2007)
@@ -56,7 +56,7 @@
 }
 
 // ===========================================================================
-//                              CLASS FACET_GEN
+//                              CLASS VERTEX_GEN
 // ===========================================================================
 
 template<typename VertexGen>