$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: asutton_at_[hidden]
Date: 2007-08-14 08:16:16
Author: asutton
Date: 2007-08-14 08:16:15 EDT (Tue, 14 Aug 2007)
New Revision: 38651
URL: http://svn.boost.org/trac/boost/changeset/38651
Log:
Added concept check for mean geodesic
Added new concept checks for measure-based calls to closeness
Added new archetypes for distance measure, degree measure
Added:
   sandbox/SOC/2007/graphs/libs/graph/test/concept/mean_geodesic_check.cpp   (contents, props changed)
Text files modified: 
   sandbox/SOC/2007/graphs/libs/graph/test/concept/Jamfile.v2                     |     1                                         
   sandbox/SOC/2007/graphs/libs/graph/test/concept/archetypes.hpp                 |    93 +++++---------------------------------- 
   sandbox/SOC/2007/graphs/libs/graph/test/concept/closeness_centrality_check.cpp |     3 +                                       
   sandbox/SOC/2007/graphs/libs/graph/test/concept/degree_centrality_check.cpp    |     2                                         
   4 files changed, 19 insertions(+), 80 deletions(-)
Modified: sandbox/SOC/2007/graphs/libs/graph/test/concept/Jamfile.v2
==============================================================================
--- sandbox/SOC/2007/graphs/libs/graph/test/concept/Jamfile.v2	(original)
+++ sandbox/SOC/2007/graphs/libs/graph/test/concept/Jamfile.v2	2007-08-14 08:16:15 EDT (Tue, 14 Aug 2007)
@@ -10,4 +10,5 @@
 test-suite graph_test :
     [ compile degree_centrality_check.cpp ]
     [ compile closeness_centrality_check.cpp ]
+    [ compile mean_geodesic_check.cpp ]
     ;
\ No newline at end of file
Modified: sandbox/SOC/2007/graphs/libs/graph/test/concept/archetypes.hpp
==============================================================================
--- sandbox/SOC/2007/graphs/libs/graph/test/concept/archetypes.hpp	(original)
+++ sandbox/SOC/2007/graphs/libs/graph/test/concept/archetypes.hpp	2007-08-14 08:16:15 EDT (Tue, 14 Aug 2007)
@@ -26,90 +26,23 @@
         descriptor_archetype(detail::dummy_constructor) { }
     };
 
-    // Apparently, the Boost.Graph library doesn't have a bidirectional
-    // archetype - kind of a strange oversight. This is actually derived
-    // from incidence graph archetype in order have access to its
-    // archetypical functions and members
-    template <typename Vertex,
-              typename Directed,
-              typename Parallel,
-              typename Base = detail::null_graph_archetype >
-    struct bidirectional_graph_archetype : public Base
+    template <typename Graph>
+    struct degree_measure_archetype
     {
-        struct traversal_category
-            : public bidirectional_graph_tag
-            , public Base::traversal_category
-        { };
-
-        typedef descriptor_archetype vertex_descriptor;
-        typedef descriptor_archetype edge_descriptor;
-
-        typedef unsigned int degree_size_type;
-        typedef unsigned int vertices_size_type;
-        typedef unsigned int edges_size_type;
-
-        typedef input_iterator_archetype<edge_descriptor> out_edge_iterator;
-        typedef input_iterator_archetype<edge_descriptor> in_edge_iterator;
-
-        typedef Directed directed_category;
-        typedef Parallel edge_parallel_category;
-
-        typedef void adjacency_iterator;
-        typedef void vertex_iterator;
-        typedef void edge_iterator;
+        typedef typename graph_traits<Graph>::degree_size_type degree_type;
+        typedef typename graph_traits<Graph>::vertex_descriptor vertex_type;
+        degree_type operator ()(vertex_type, const Graph&)
+        { return degree_type(); }
     };
 
-    /*
-    template <typename V, typename D, typename P, typename B>
-    typename bidirectional_graph_archetype<V,D,P,B>::vertex_descriptor
-    source(typename bidirectional_graph_archetype<V,D,P,B>::edge_descriptor,
-           const bidirectional_graph_archetype<V,D,P,B>&)
-    {
-        return V(static_object<detail::dummy_constructor>::get());
-    }
-
-    template <typename V, typename D, typename P, typename B>
-    typename bidirectional_graph_archetype<V,D,P,B>::vertex_descriptor
-    target(typename bidirectional_graph_archetype<V,D,P,B>::edge_descriptor,
-           const bidirectional_graph_archetype<V,D,P,B>&)
+    template <typename Graph, typename Distance, typename Result>
+    struct distance_measure_archetype
     {
-        return V(static_object<detail::dummy_constructor>::get());
-    }
-
-    template <typename V, typename D, typename P, typename B>
-    std::pair<typename bidirectional_graph_archetype<V,D,P,B>::out_edge_iterator,
-    typename bidirectional_graph_archetype<V,D,P,B>::out_edge_iterator>
-    out_edges(typename bidirectional_graph_archetype<V,D,P,B>::vertex_descriptor,
-              const bidirectional_graph_archetype<V,D,P,B>&)
-    {
-        typedef typename bidirectional_graph_archetype<V,D,P,B>::out_edge_iterator Iter;
-        return std::make_pair(Iter(), Iter());
-    }
-
-    template <typename V, typename D, typename P, typename B>
-    typename bidirectional_graph_archetype<V,D,P,B>::degree_size_type
-    out_degree(typename bidirectional_graph_archetype<V,D,P,B>::vertex_descriptor,
-               const bidirectional_graph_archetype<V,D,P,B>&)
-    { return 0; }
-    */
-
-    template <typename V, typename D, typename P, typename B>
-    std::pair<typename bidirectional_graph_archetype<V,D,P,B>::in_edge_iterator,
-    typename bidirectional_graph_archetype<V,D,P,B>::in_edge_iterator>
-    in_edges(typename bidirectional_graph_archetype<V,D,P,B>::vertex_descriptor,
-             const bidirectional_graph_archetype<V,D,P,B>&)
-    {
-        typedef typename incidence_graph_archetype<V,D,P,B>::in_edge_iterator Iter;
-        return std::make_pair(Iter(), Iter());
-    }
-
-    template <typename V, typename D, typename P, typename B>
-    typename bidirectional_graph_archetype<V,D,P,B>::degree_size_type
-    in_degree(typename bidirectional_graph_archetype<V,D,P,B>::vertex_desriptior,
-              const bidirectional_graph_archetype<V,D,P,B>&)
-    {
-        return 0;
-    }
+        typedef Distance distance_type;
+        typedef Result result_type;
+        result_type operator ()(distance_type, const Graph&)
+        { return result_type(); }
+    };
 }
 
 #endif
Modified: sandbox/SOC/2007/graphs/libs/graph/test/concept/closeness_centrality_check.cpp
==============================================================================
--- sandbox/SOC/2007/graphs/libs/graph/test/concept/closeness_centrality_check.cpp	(original)
+++ sandbox/SOC/2007/graphs/libs/graph/test/concept/closeness_centrality_check.cpp	2007-08-14 08:16:15 EDT (Tue, 14 Aug 2007)
@@ -29,12 +29,15 @@
         typedef writable_property_map_archetype<Vertex, float> CentralityMap;
         typedef readable_property_map_archetype<Vertex, size_t> DistanceMap;
         typedef readable_property_map_archetype<Vertex, DistanceMap> DistanceMatrix;
+        typedef distance_measure_archetype<Graph, size_t, float> Measure;
 
         Graph& g = static_object<Graph>::get();
         CentralityMap cm;
         DistanceMatrix dm;
+        Measure m;
 
         closeness_centrality(g, dm, cm);
+        closeness_centrality(g, dm, cm, m);
     }
 
     return 0;
Modified: sandbox/SOC/2007/graphs/libs/graph/test/concept/degree_centrality_check.cpp
==============================================================================
--- sandbox/SOC/2007/graphs/libs/graph/test/concept/degree_centrality_check.cpp	(original)
+++ sandbox/SOC/2007/graphs/libs/graph/test/concept/degree_centrality_check.cpp	2007-08-14 08:16:15 EDT (Tue, 14 Aug 2007)
@@ -39,6 +39,7 @@
     // how to test this. Even If I build one, it won't compile very
     // easily.
     {
+        /*
         typedef descriptor_archetype Vertex;
         typedef bidirectional_graph_archetype<
                 Vertex,
@@ -52,6 +53,7 @@
                 BidirectionalGraph
             > graph_type;
         typedef read_write_property_map_archetype<Vertex, size_t> CentralityMap;
+        */
 
         // These don't actually work - apparently, it's not very easy
         // to generate archetypes across concept hierarchies and have
Added: sandbox/SOC/2007/graphs/libs/graph/test/concept/mean_geodesic_check.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/graphs/libs/graph/test/concept/mean_geodesic_check.cpp	2007-08-14 08:16:15 EDT (Tue, 14 Aug 2007)
@@ -0,0 +1,44 @@
+// (C) Copyright Andrew Sutton 2007
+//
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0 (See accompanying file
+// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+
+#include "archetypes.hpp"
+#include <boost/graph/geodesic_distance.hpp>
+
+using namespace std;
+using namespace boost;
+
+int
+main(int argc, char *argv[])
+{
+    {
+        typedef descriptor_archetype Vertex;
+        typedef incidence_graph_archetype<
+                Vertex,
+                undirected_tag,
+                allow_parallel_edge_tag
+            > IncidenceGraph;
+        typedef vertex_list_graph_archetype<
+                Vertex,
+                undirected_tag,
+                allow_parallel_edge_tag,
+                IncidenceGraph
+            > Graph;
+        typedef writable_property_map_archetype<Vertex, float> CentralityMap;
+        typedef readable_property_map_archetype<Vertex, size_t> DistanceMap;
+        typedef readable_property_map_archetype<Vertex, DistanceMap> DistanceMatrix;
+        typedef distance_measure_archetype<Graph, size_t, float> Measure;
+
+        Graph& g = static_object<Graph>::get();
+        CentralityMap cm;
+        DistanceMatrix dm;
+        Measure m;
+
+        mean_geodesic(g, dm, cm);
+        mean_geodesic(g, dm, cm, m);
+    }
+
+    return 0;
+}