33 template <
class GCore,
class GOver,
class OverVertexMap,
class OverEdgeMap>
40 OverVertexMap over_vertex_map;
41 OverEdgeMap over_edge_map;
47 OverVertexMap over_vertex_map,
48 OverEdgeMap over_edge_map):
51 over_vertex_map(over_vertex_map),
52 over_edge_map(over_edge_map),
58 std::vector<typename boost::graph_traits<GOver>::vertex_descriptor> applied_vertices;
59 std::vector<typename boost::graph_traits<GOver>::edge_descriptor> applied_edges;
63 assert(is_applied ==
false);
65 typename boost::graph_traits<GOver>::vertex_iterator vi, vi_end;
66 for (boost::tie(vi,vi_end)=vertices(gover); vi!=vi_end; ++vi)
69 if (
get(over_vertex_map, *vi) != boost::graph_traits<GCore>::null_vertex())
72 typename boost::graph_traits<GCore>::vertex_descriptor vcore = add_vertex(gcore);
73 put(over_vertex_map, *vi, vcore);
74 applied_vertices.push_back(*vi);
78 typename boost::graph_traits<GOver>::edge_iterator ei, ei_end;
79 for (boost::tie(ei,ei_end)=edges(gover); ei!=ei_end; ++ei)
82 typename boost::graph_traits<GCore>::edge_descriptor ecore
83 = add_edge(
get(over_vertex_map, source(*ei,gover)),
84 get(over_vertex_map, target(*ei,gover)), gcore).first;
85 put(over_edge_map, *ei, ecore);
86 applied_edges.push_back(*ei);
94 assert(is_applied ==
true);
96 while (applied_edges.size())
98 typename boost::graph_traits<GOver>::edge_descriptor eover = applied_edges.back();
99 applied_edges.pop_back();
101 typename boost::graph_traits<GCore>::edge_descriptor ecore =
get(over_edge_map, eover);
102 remove_edge(ecore, gcore);
105 while (applied_vertices.size())
107 typename boost::graph_traits<GOver>::vertex_descriptor vover = applied_vertices.back();
108 applied_vertices.pop_back();
110 typename boost::graph_traits<GCore>::vertex_descriptor vcore =
get(over_vertex_map, vover);
111 remove_vertex(vcore, gcore);
113 put(over_vertex_map, vover, boost::graph_traits<GCore>::null_vertex());
Class which maintains an overlay graph.
Definition: overlay_manager.h:34