$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: asutton_at_[hidden]
Date: 2007-08-11 11:46:09
Author: asutton
Date: 2007-08-11 11:46:09 EDT (Sat, 11 Aug 2007)
New Revision: 38599
URL: http://svn.boost.org/trac/boost/changeset/38599
Log:
Moved index decisions to details
Added:
   sandbox/SOC/2007/graphs/boost/graph/detail/index.hpp   (contents, props changed)
Text files modified: 
   sandbox/SOC/2007/graphs/boost/graph/detail/geodesic.hpp |    29 ++++++++++++++++++++---------           
   1 files changed, 20 insertions(+), 9 deletions(-)
Modified: sandbox/SOC/2007/graphs/boost/graph/detail/geodesic.hpp
==============================================================================
--- sandbox/SOC/2007/graphs/boost/graph/detail/geodesic.hpp	(original)
+++ sandbox/SOC/2007/graphs/boost/graph/detail/geodesic.hpp	2007-08-11 11:46:09 EDT (Sat, 11 Aug 2007)
@@ -8,6 +8,7 @@
 #define BOOST_GRAPH_DETAIL_GEODESIC_HPP
 
 #include <functional>
+#include <boost/graph/new_graph_concepts.hpp>
 #include <boost/graph/numeric_values.hpp>
 
 namespace boost
@@ -23,7 +24,6 @@
     //         citeulike-article-id = {1144245},
     //         doi = {10.1016/j.socnet.2005.11.005},
     //         journal = {Social Networks},
-    //         keywords = {2006 centrality complex_network graph-theory social sociality social_network},
     //         month = {October},
     //         number = {4},
     //         pages = {466--484},
@@ -43,20 +43,28 @@
         template <typename Graph,
                   typename DistanceMap,
                   typename Combinator,
-                  typename DistanceNumbers>
-        inline typename DistanceNumbers::value_type
+                  typename Distance>
+        inline Distance
         combine_distances(const Graph& g,
                           DistanceMap dist,
                           Combinator combine,
-                          DistanceNumbers distnum)
+                          Distance init)
         {
+            function_requires< VertexListGraphConcept<Graph> >();
+            typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+            typedef typename graph_traits<Graph>::vertex_iterator VertexIterator;
+            function_requires< ReadablePropertyMapConcept<DistanceMap,Vertex> >();
+            function_requires< NumericValueConcept<Distance> >();
+            typedef numeric_values<Distance> DistanceNumbers;
+            function_requires< AdaptableBinaryFunction<Combinator,Distance,Distance,Distance> >();
+
             // If there's ever an infinite distance, then we simply
             // return infinity.
-            typename DistanceNumbers::value_type ret(DistanceNumbers::zero());
-            typename graph_traits<Graph>::vertex_iterator i, end;
+            Distance ret = init;
+            VertexIterator i, end;
             for(tie(i, end) = vertices(g); i != end; ++i) {
-                if(dist[*i] != DistanceNumbers::infinity()) {
-                    ret = combine(ret, dist[*i]);
+                if(get(dist, *i) != DistanceNumbers::infinity()) {
+                    ret = combine(ret, get(dist, *i));
                 }
                 else {
                     ret = DistanceNumbers::infinity();
@@ -81,8 +89,11 @@
         // types, but should be specialized for those types that have
         // discrete notions of reciprocals.
         template <typename T>
-                struct reciprocal : public std::unary_function<T, T>
+        struct reciprocal : public std::unary_function<T, T>
         {
+            typedef std::unary_function<T, T> function_type;
+            typedef typename function_type::result_type result_type;
+            typedef typename function_type::argument_type argument_type;
             T operator ()(T t)
             { return T(1) / t; }
         };
Added: sandbox/SOC/2007/graphs/boost/graph/detail/index.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/graphs/boost/graph/detail/index.hpp	2007-08-11 11:46:09 EDT (Sat, 11 Aug 2007)
@@ -0,0 +1,67 @@
+// (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)
+
+#ifndef BOOST_GRAPH_DETAIL_INDEX_HXX
+#define BOOST_GRAPH_DETAIL_INDEX_HXX
+
+#include <boost/graph/graph_traits.hpp>
+
+namespace boost
+{
+    namespace detail
+    {
+        template <typename Graph>
+        struct vertex_indexer
+        {
+            typedef vertex_index_t index_type;
+            typedef typename property_map<Graph, vertex_index_t>::type map_type;
+            typedef typename property_map<Graph, vertex_index_t>::const_type const_map_type;
+            typedef typename property_traits<map_type>::value_type value_type;
+            typedef typename graph_traits<Graph>::vertex_descriptor key_type;
+
+            static const_map_type index_map(const Graph& g)
+            { return get(vertex_index, g); }
+
+            static map_type index_map(Graph& g)
+            { return get(vertex_index, g); }
+
+            static value_type index(key_type k, const Graph& g)
+            { return get(vertex_index, g, k); }
+        };
+
+        template <typename Graph>
+        struct edge_indexer
+        {
+            typedef edge_index_t index_type;
+            typedef typename property_map<Graph, edge_index_t>::type map_type;
+            typedef typename property_map<Graph, edge_index_t>::const_type const_map_type;
+            typedef typename property_traits<map_type>::value_type value_type;
+            typedef typename graph_traits<Graph>::edge_descriptor key_type;
+
+            static const_map_type index_map(const Graph& g)
+            { return get(edge_index, g); }
+
+            static map_type index_map(Graph& g)
+            { return get(edge_index, g); }
+
+            static value_type index(key_type k, const Graph& g)
+            { return get(edge_index, g, k); }
+        };
+
+        template <typename Graph, typename Key>
+        struct choose_indexer
+        {
+            typedef typename mpl::if_<
+                    is_same<Key, typename graph_traits<Graph>::vertex_descriptor>,
+                    vertex_indexer<Graph>,
+                    edge_indexer<Graph>
+                >::type indexer_type;
+            typedef typename indexer_type::index_type index_type;
+        };
+    }
+}
+
+#endif