Boost logo

Boost-Commit :

From: garcia_at_[hidden]
Date: 2008-07-08 13:24:21


Author: garcia
Date: 2008-07-08 13:24:20 EDT (Tue, 08 Jul 2008)
New Revision: 47240
URL: http://svn.boost.org/trac/boost/changeset/47240

Log:
Initial Revision. Based on read_graphviz.cpp.

Added:
   trunk/libs/graph/example/graph-thingie.cpp (contents, props changed)

Added: trunk/libs/graph/example/graph-thingie.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/graph/example/graph-thingie.cpp 2008-07-08 13:24:20 EDT (Tue, 08 Jul 2008)
@@ -0,0 +1,102 @@
+// Copyright 2008 Trustees of Indiana University
+
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// An example of using read_graphviz to load a GraphViz Dot textual
+// graph into a BGL adjacency_list graph that has custom properties.
+
+// Author: Ronald Garcia
+
+
+
+#include <boost/graph/graphviz.hpp>
+#include <boost/graph/adjacency_list.hpp>
+#include <boost/foreach.hpp>
+#include <string>
+#include <sstream>
+
+using namespace boost;
+using namespace std;
+
+
+//
+// Create a custom graph properties
+// (see the documentation for adjacency list)
+struct graph_identifier_t { typedef graph_property_tag kind; };
+struct vertex_label_t { typedef vertex_property_tag kind; };
+
+int main() {
+
+ // Vertex properties
+ typedef property < vertex_name_t, string,
+ property < vertex_label_t, string,
+ property < vertex_root_t, int > > > vertex_p;
+ // Edge properties
+ typedef property < edge_name_t, string > edge_p;
+ // Graph properties
+ typedef property < graph_name_t, string,
+ property < graph_identifier_t, string > > graph_p;
+ // adjacency_list-based type
+ typedef adjacency_list < vecS, vecS, directedS,
+ vertex_p, edge_p, graph_p > graph_t;
+
+ // Construct an empty graph and prepare the dynamic_property_maps.
+ graph_t graph(0);
+ dynamic_properties dp;
+
+ property_map<graph_t, vertex_name_t>::type vname =
+ get(vertex_name, graph);
+ dp.property("node_id",vname);
+
+ property_map<graph_t, vertex_label_t>::type vlabel =
+ get(vertex_label_t(), graph);
+ dp.property("label",vlabel);
+
+ property_map<graph_t, vertex_root_t>::type root =
+ get(vertex_root, graph);
+ dp.property("root",root);
+
+ property_map<graph_t, edge_name_t>::type elabel =
+ get(edge_name, graph);
+ dp.property("label",elabel);
+
+ // Use ref_property_map to turn a graph property into a property map
+ ref_property_map<graph_t*,string>
+ gname(get_property(graph,graph_name));
+ dp.property("name",gname);
+
+ // Use ref_property_map to turn a graph property into a property map
+ ref_property_map<graph_t*,string>
+ gid(get_property(graph,graph_identifier_t()));
+ dp.property("identifier",gid);
+ // Sample graph as an istream;
+
+const char* dot =
+"digraph \
+{ \
+ graph [name=\"GRAPH\", identifier=\"CX2A1Z\"] \
+ \
+ a [label=\"NODE_A\", root=\"1\"] \
+ b [label=\"NODE_B\", root=\"0\"] \
+ \
+ a -> b [label=\"EDGE_1\"] \
+ b -> c [label=\"EDGE_2\"] \
+}";
+
+
+ istringstream gvgraph(dot);
+
+ bool status = read_graphviz(gvgraph,graph,dp,"node_id");
+
+ cout << "graph " << get("name",dp,&graph) <<
+ " (" << get("identifier",dp,&graph) << ")\n\n";
+
+ BOOST_FOREACH( graph_t::vertex_descriptor v, vertices(graph) ) {
+ cout << "vertex " << get("node_id",dp,v) <<
+ " (" << get("label",dp,v) << ")\n";
+ }
+
+ return 0;
+}


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