$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r50534 - in trunk: boost/graph libs/graph/test
From: asutton_at_[hidden]
Date: 2009-01-10 09:46:37
Author: asutton
Date: 2009-01-10 09:46:36 EST (Sat, 10 Jan 2009)
New Revision: 50534
URL: http://svn.boost.org/trac/boost/changeset/50534
Log:
Patch from Dmitry Bufistov for getting bundled property maps from subgraphs.
Text files modified: 
   trunk/boost/graph/subgraph.hpp             |    15 +++++++++++++++                         
   trunk/libs/graph/test/subgraph_bundled.cpp |    20 ++++++++++++++------                    
   2 files changed, 29 insertions(+), 6 deletions(-)
Modified: trunk/boost/graph/subgraph.hpp
==============================================================================
--- trunk/boost/graph/subgraph.hpp	(original)
+++ trunk/boost/graph/subgraph.hpp	2009-01-10 09:46:36 EST (Sat, 10 Jan 2009)
@@ -81,6 +81,8 @@
 
     typedef typename Graph::edge_property_type         edge_property_type;
     typedef typename Graph::vertex_property_type       vertex_property_type;
+    typedef typename Graph::vertex_bundled             vertex_bundled;
+    typedef typename Graph::edge_bundled               edge_bundled;
     typedef subgraph_tag                               graph_tag;
     typedef Graph                                      graph_type;
     typedef typename Graph::graph_property_type        graph_property_type;
@@ -837,6 +839,19 @@
     return pmap[k];
   }
 
+#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+  template<typename TG, typename T, typename Bundle>
+  inline
+  typename property_map<subgraph<TG>, T Bundle::*>::type
+  get(T Bundle::* p, subgraph<TG>& sg)
+  {
+    typedef typename property_map<subgraph<TG>, T Bundle::*>::type
+      result_type;
+    return result_type(&sg, p);
+  }
+
+#endif
+
   template <typename G, typename Property, typename Key, typename Value>
   void
   put(Property, subgraph<G>& g, const Key& k, const Value& val)
Modified: trunk/libs/graph/test/subgraph_bundled.cpp
==============================================================================
--- trunk/libs/graph/test/subgraph_bundled.cpp	(original)
+++ trunk/libs/graph/test/subgraph_bundled.cpp	2009-01-10 09:46:36 EST (Sat, 10 Jan 2009)
@@ -37,6 +37,8 @@
 typedef subgraph<Graph> Subgraph;
 typedef graph_traits<Subgraph>::vertex_descriptor Vertex;
 typedef graph_traits<Subgraph>::edge_descriptor Edge;
+typedef graph_traits<Subgraph>::vertex_iterator VertexIter;
+typedef graph_traits<Subgraph>::edge_iterator EdgeIter;
 
 int test_main(int argc, char* argv[])
 {
@@ -99,12 +101,18 @@
     if (num_vertices(g_s) == 0)
       return 0;
 
-    // The testing of properties is completely broken (in graph_test) with
-    // respect to bundled (or even generic) properties.
-    // std::vector<int> weights;
-    // for (unsigned i = 0; i < num_vertices(g_s); ++i)
-        // weights.push_back(i*2);
-    // gt.test_vertex_property_graph(weights, vertex_color_t(), g_s);
+    // Test property maps for vertices.
+    typedef property_map<Subgraph, int node::*>::type ColorMap;
+    ColorMap colors = get(&node::color, g_s);
+    for(std::pair<VertexIter, VertexIter> r = vertices(g_s); r.first != r.second; ++r.first)
+        colors[*r.first] = 0;
+
+    // Test property maps for edges.
+    typedef property_map<Subgraph, int arc::*>::type WeightMap;
+    WeightMap weights = get(&arc::weight, g_s);
+    for(std::pair<EdgeIter, EdgeIter> r = edges(g_s); r.first != r.second; ++r.first) {
+        weights[*r.first] = 12;
+    }
 
     // A regression test: the copy constructor of subgraph did not
     // copy one of the members, so local_edge->global_edge mapping