G | A type that is a model of Graph. |
g | An object of type G. |
e | An object of type boost::graph_traits<G>::edge_descriptor. |
u,v | are objects of type boost::graph_traits<G>::vertex_descriptor. |
iter | is an object of type boost::graph_traits<G>::out_edge_iterator. |
p | is an object of a type that models Predicate and whose argument type matches the edge_descriptor type. |
add_edge(u, v, g) |
Inserts the edge (u,v) into the graph. Return type: std::pair<edge_descriptor, bool> |
remove_edge(u, v, g) |
Remove the edge (u,v) from the graph. If the
graph allows parallel edges this remove all occurances of
(u,v). Return type: void Precondition: u and v are vertices in the graph. Postcondition: (u,v) is no longer in the edge set for g. |
remove_edge(e, g) | Remove the edge e from the graph. Return type: void Precondition: e is an edge in the graph. Postcondition: e is no longer in the edge set for g. |
remove_edge(iter, g) | Remove the edge pointed to be iter from the graph. This
expression is only required when the graph also models IncidenceGraph. Return type: void Precondition: *iter is an edge in the graph. Postcondition: *iter is no longer in the edge set for g. |
remove_edge_if(p, g) | Remove all the edges from graph g for which
the predicate p returns true. Return type: void |
remove_out_edge_if(u, p, g) | Remove all the out-edges of vertex u for which the
predicate p returns true. This expression is only required
when the graph also models IncidenceGraph. Return type: void |
remove_in_edge_if(u, p, g) | Remove all the in-edges of vertex u for which the
predicate p returns true. This expression is only required when the
graph also models BidirectionalGraph. Return type: void |
add_vertex(g) |
Add a new vertex to the graph. The vertex_descriptor for the
new vertex is returned. Return type: vertex_descriptor |
clear_vertex(u, g) |
Remove all edges to and from vertex u from the graph. Return type: void Precondition: u is a valid vertex descriptor of g. Postcondition: u does not appear as a source or target of any edge in g. |
remove_vertex(u, g) |
Remove u from the vertex set of the graph. Note that undefined
behavior may result if there are edges remaining in the graph who's
target is u. Typically the clear_vertex() function
should be called first. Return type: void Precondition: u is a valid vertex descriptor of g. Postcondition: num_vertices(g) is one less, u no longer appears in the vertex set of the graph and it is no longer a valid vertex descriptor. |
template <class G> struct MutableGraphConcept { typedef typename boost::graph_traits<G>::edge_descriptor edge_descriptor; void constraints() { v = add_vertex(g); clear_vertex(v, g); remove_vertex(v, g); e_b = add_edge(u, v, g); remove_edge(u, v, g); remove_edge(e, g); } G g; edge_descriptor e; std::pair<edge_descriptor, bool> e_b; typename boost::graph_traits<G>::vertex_descriptor u, v; typename boost::graph_traits<G>::out_edge_iterator iter; }; template <class edge_descriptor> struct dummy_edge_predicate { bool operator()(const edge_descriptor& e) const { return false; } }; template <class G> struct MutableIncidenceGraphConcept { void constraints() { function_requires< MutableGraph<G> >(); remove_edge(iter, g); remove_out_edge_if(u, p, g); } G g; typedef typename boost::graph_traits<G>::edge_descriptor edge_descriptor; dummy_edge_predicate<edge_descriptor> p; typename boost::graph_traits<G>::vertex_descriptor u; typename boost::graph_traits<G>::out_edge_iterator iter; }; template <class G> struct MutableBidirectionalGraphConcept { void constraints() { function_requires< MutableIncidenceGraph<G> >(); remove_in_edge_if(u, p, g); } G g; typedef typename boost::graph_traits<G>::edge_descriptor edge_descriptor; dummy_edge_predicate<edge_descriptor> p; typename boost::graph_traits<G>::vertex_descriptor u; }; template <class G> struct MutableEdgeListGraphConcept { void constraints() { function_requires< MutableGraph<G> >(); remove_edge_if(p, g); } G g; typedef typename boost::graph_traits<G>::edge_descriptor edge_descriptor; dummy_edge_predicate<edge_descriptor> p; };
Copyright © 2000 | Jeremy Siek, Univ.of Notre Dame (jsiek@lsc.nd.edu) |