19 template <
class Graph,
class EdgeIndexMap>
23 typedef typename boost::graph_traits<Graph>::vertex_descriptor vertex_descriptor;
24 typedef typename boost::graph_traits<Graph>::edge_descriptor edge_descriptor;
25 typedef typename boost::graph_traits<Graph>::adjacency_iterator adjacency_iterator;
26 typedef typename boost::graph_traits<Graph>::out_edge_iterator out_edge_iterator;
27 typedef typename boost::graph_traits<Graph>::in_edge_iterator in_edge_iterator;
28 typedef typename boost::graph_traits<Graph>::vertex_iterator vertex_iterator;
29 typedef typename boost::graph_traits<Graph>::directed_category directed_category;
30 typedef typename boost::graph_traits<Graph>::edge_parallel_category edge_parallel_category;
31 typedef typename boost::graph_traits<Graph>::traversal_category traversal_category;
32 typedef typename boost::graph_traits<Graph>::vertices_size_type vertices_size_type;
33 typedef typename boost::graph_traits<Graph>::edges_size_type edges_size_type;
34 typedef typename boost::graph_traits<Graph>::degree_size_type degree_size_type;
35 typedef typename std::vector<edge_descriptor>::const_iterator edge_iterator;
39 EdgeIndexMap edge_index_map;
40 std::vector<edge_descriptor> edge_vector;
45 edge_index_map(edge_index_map),
46 edge_vector_map(edge_vector)
48 BOOST_ASSERT(num_edges(g) == 0);
51 static vertex_descriptor null_vertex()
53 return boost::graph_traits<Graph>::null_vertex();
57 template <
class Graph,
class EdgeIndexMap>
58 inline typename boost::graph_traits<Graph>::vertices_size_type
61 return num_vertices(g.m_g);
64 template <
class Graph,
class EdgeIndexMap>
65 inline typename boost::graph_traits<Graph>::edges_size_type
66 num_edges(
const edge_indexed_graph<Graph,EdgeIndexMap> & g)
68 return g.edge_vector.size();
71 template <
class Graph,
class EdgeIndexMap>
72 inline typename boost::graph_traits<Graph>::vertex_descriptor
73 vertex(
typename boost::graph_traits<Graph>::vertices_size_type n,
const edge_indexed_graph<Graph,EdgeIndexMap> & g)
75 return vertex(n, g.m_g);
78 template <
class Graph,
class EdgeIndexMap>
79 inline std::pair<typename boost::graph_traits<Graph>::vertex_iterator,
typename boost::graph_traits<Graph>::vertex_iterator>
80 vertices(
const edge_indexed_graph<Graph,EdgeIndexMap> & g)
82 return vertices(g.m_g);
85 template <
class Graph,
class EdgeIndexMap>
86 inline std::pair<typename edge_indexed_graph<Graph,EdgeIndexMap>::edge_iterator,
typename edge_indexed_graph<Graph,EdgeIndexMap>::edge_iterator>
87 edges(
const edge_indexed_graph<Graph,EdgeIndexMap> & g)
89 return std::make_pair(g.edge_vector.begin(), g.edge_vector.end());
92 template <
class Graph,
class EdgeIndexMap>
93 inline typename boost::graph_traits<Graph>::vertex_descriptor
94 source(
typename boost::graph_traits<Graph>::edge_descriptor e,
const edge_indexed_graph<Graph,EdgeIndexMap> & g)
96 return source(e, g.m_g);
99 template <
class Graph,
class EdgeIndexMap>
100 inline typename boost::graph_traits<Graph>::vertex_descriptor
101 target(
typename boost::graph_traits<Graph>::edge_descriptor e,
const edge_indexed_graph<Graph,EdgeIndexMap> & g)
103 return target(e, g.m_g);
106 template <
class Graph,
class EdgeIndexMap>
107 inline typename boost::graph_traits<Graph>::vertex_descriptor
108 add_vertex(edge_indexed_graph<Graph,EdgeIndexMap> & g)
110 return add_vertex(g.m_g);
113 template <
class Graph,
class EdgeIndexMap>
114 inline std::pair<typename boost::graph_traits<Graph>::edge_descriptor,
bool>
116 typename boost::graph_traits<Graph>::vertex_descriptor u,
117 typename boost::graph_traits<Graph>::vertex_descriptor v,
118 edge_indexed_graph<Graph,EdgeIndexMap> & g)
120 std::pair<typename boost::graph_traits<Graph>::edge_descriptor,
bool>
121 res = add_edge(u, v, g.m_g);
124 put(g.edge_index_map, res.first, g.edge_vector.size());
125 g.edge_vector.push_back(res.first);
130 template <
class Graph,
class EdgeIndexMap>
133 typename boost::graph_traits<Graph>::vertex_descriptor u,
134 edge_indexed_graph<Graph,EdgeIndexMap> & g)
136 remove_vertex(u, g.m_g);
139 template <
class Graph,
class EdgeIndexMap>
142 typename boost::graph_traits<Graph>::edge_descriptor e,
143 edge_indexed_graph<Graph,EdgeIndexMap> & g)
147 BOOST_ASSERT(
get(g.edge_index_map, e) == (g.edge_count-1));
152 g.edge_vector.pop_back();
153 remove_edge(e, g.m_g);
Graph wrapper which maintains an edge index.
Definition: edge_indexed_graph.h:20