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