[BGL] Why source() needs a graph argument?

Hi to all, the question is in subject. I don't understand it. Either source() and target() functions only return the m_source member and the m_target of edge_base. They don't use the graph argument, that is not even used. I need to know it because I'm implementing an union_graph adaptor, that provides the join's view of 2 graph. When I call the source() function on a union_graph, I provide an edge_descriptor; but whereas the source() function of an adjacency_list needs a graph argument, I need to know which graph belongs the edge, which is an 2 * O|E| operation on 2 graphs. Thanks, Cosimo Calabrese

On Fri, 2 Oct 2009, Cosimo Calabrese wrote:
Hi to all,
the question is in subject. I don't understand it. Either source() and target() functions only return the m_source member and the m_target of edge_base. They don't use the graph argument, that is not even used.
I need to know it because I'm implementing an union_graph adaptor, that provides the join's view of 2 graph. When I call the source() function on a union_graph, I provide an edge_descriptor; but whereas the source() function of an adjacency_list needs a graph argument, I need to know which graph belongs the edge, which is an 2 * O|E| operation on 2 graphs.
Some edge descriptors need information from the graph and do not contain a pointer to it (which would use extra space). For example, the compressed sparse row graph's edge descriptor contains a source vertex and edge index, and computes the target from that index and a table in the graph. I would suggest using the Boost.Variant technique I mentioned in a previous email to make it easy (and constant time) to distinguish which edge descriptors are in each graph. -- Jeremiah Willcock
participants (2)
-
Cosimo Calabrese
-
Jeremiah Willcock