diff --git a/include/boost/graph/distributed/graphviz.hpp b/include/boost/graph/distributed/graphviz.hpp index fa843fd..3c02d5a 100644 --- a/include/boost/graph/distributed/graphviz.hpp +++ b/include/boost/graph/distributed/graphviz.hpp @@ -96,13 +96,15 @@ paint_by_number(NumberMap number) { return paint_by_number_writer(number); } template + typename EdgePropertiesWriter, typename GraphPropertiesWriter, + typename ClusterPropertiesWriter> void write_graphviz(std::ostream& out, const Graph& g, VertexPropertiesWriter vpw, EdgePropertiesWriter epw, - GraphPropertiesWriter gpw + GraphPropertiesWriter gpw, + ClusterPropertiesWriter cpw BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,distributed_graph_tag)) { typedef typename graph_traits::directed_category directed_category; @@ -129,7 +131,7 @@ write_graphviz(std::ostream& out, std::ostringstream local_graph_out; local_graph_out << " subgraph cluster_" << process_id(pg) << " {\n"; - gpw(local_graph_out); + cpw(local_graph_out); typename graph_traits::vertex_iterator vi, vi_end; for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) { @@ -154,6 +156,7 @@ write_graphviz(std::ostream& out, if (process_id(pg) == 0) { out << graph_kind << " g {\n"; + gpw(out); out << local_graph_out.str(); synchronize(pg); @@ -182,6 +185,19 @@ write_graphviz(std::ostream& out, } template +inline void +write_graphviz(std::ostream& out, + const Graph& g, + VertexPropertiesWriter vpw, + EdgePropertiesWriter epw, + GraphPropertiesWriter gpw + BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,distributed_graph_tag)) +{ + write_graphviz(out, g, vpw, epw, gpw, default_writer()); +} + +template inline void write_graphviz(std::ostream& out, @@ -212,20 +228,40 @@ write_graphviz(std::ostream& out, const Graph& g } template + typename EdgePropertiesWriter, typename GraphPropertiesWriter, + typename ClusterPropertiesWriter> void write_graphviz(const std::string& filename, const Graph& g, VertexPropertiesWriter vpw, EdgePropertiesWriter epw, + GraphPropertiesWriter gpw, + ClusterPropertiesWriter cpw + BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,distributed_graph_tag)) +{ + if (process_id(g.process_group()) == 0) { + std::ofstream out(filename.c_str()); + write_graphviz(out, g, vpw, epw, gpw, cpw); + } else { + write_graphviz(std::cout, g, vpw, epw, gpw, cpw); + } +} + +template +void +write_graphviz(const std::string& filename, + const Graph& g, + VertexPropertiesWriter vpw, + EdgePropertiesWriter epw, GraphPropertiesWriter gpw BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,distributed_graph_tag)) { if (process_id(g.process_group()) == 0) { std::ofstream out(filename.c_str()); - write_graphviz(out, g, vpw, epw, gpw); + write_graphviz(out, g, vpw, epw, gpw, default_writer()); } else { - write_graphviz(std::cout, g, vpw, epw, gpw); + write_graphviz(std::cout, g, vpw, epw, gpw, default_writer()); } }