[BGL] copying graphs
Hello All, I'm using Boost for a work project, and trying to encourage others to use boost for work as well. I've hit a snag using BGL which is hindering that effort. I defined have a class which creates a graph from a graphviz file and uses a dynamic_property_map. I adopted some code straight from the python graphviz example class. My class (mGraph) is defined as follows: class basic_graph : public stored_minstd_rand, public adjacency_list<listS, listS, DirectedS, property<vertex_index_t, std::size_t>, property<edge_index_t, std::size_t> > typedef basic_graph<bidirectionalS> Digraph; typedef boost::graph::python::Digraph mGraph; I have a function that takes in a graph, destructively extracts information from it, while storing the vertex information of visited vertices. I later queries the properties associated with those vertices. Passing by reference allows me to retrieve properties as needed, but destroys the original graph, preventing further processing. So I cobbled together a copy constructor so I could pass by value, but since the vertices are copies of the originals calling attempting to get() a property fails. I don't fully understand the reason for this, but I believe it is a deep vs shallow copy problem. My attempts to use copy_graph() have also failed as my graph uses listS instead of vecS. Changing the template argument to vecS causes internal compiler errors using VS 7.1. So I have two questions. First, how can I modify my class so that it works with copy_graph. Second, how can I implement a copy-constructor that will preserve the dynamic property map and full vertex info so that get() on the copy's properties behaves correctly? Is this even desirable, or does copy-construction have undesirable implications here? Thanks! -Ramy
participants (1)
-
Ramy Sadek