/* * reverse_graph_mutable.hpp * * Created on: 18.02.2011 * Author: al, zatv@bk.ru */ #ifndef REVERSE_GRAPH_MUTABLE_HPP_ #define REVERSE_GRAPH_MUTABLE_HPP_ #include namespace boost { #define REVERSE_GRAPH reverse_graph /* ************************************************ * For graphs without properties * ************************************************ */ /* * VertexMutableGraph concept */ template inline typename REVERSE_GRAPH::vertex_descriptor add_vertex(REVERSE_GRAPH &rg) { return add_vertex(rg.m_g); } template inline void remove_vertex(typename REVERSE_GRAPH::vertex_descriptor u, REVERSE_GRAPH &rg) { return remove_vertex(u,rg.m_g); } /* * EdgeMutableGraph concept */ template inline std::pair add_edge(typename REVERSE_GRAPH::vertex_descriptor u, typename REVERSE_GRAPH::vertex_descriptor v, REVERSE_GRAPH &rg) { return add_edge(v,u,rg.m_g); } template inline void remove_edge(typename REVERSE_GRAPH::vertex_descriptor u, typename REVERSE_GRAPH::vertex_descriptor v, REVERSE_GRAPH &rg) { return remove_edge(v,u,rg.m_g); } template inline void remove_edge(typename REVERSE_GRAPH::edge_descriptor e,REVERSE_GRAPH &rg) { return remove_edge(e,rg.m_g); } template inline void clear_vertex(typename REVERSE_GRAPH::vertex_descriptor u, REVERSE_GRAPH &rg) { return clear_vertex(u,rg.m_g); } /* * MutableIncidenceGraph concept * */ template inline void remove_edge(typename REVERSE_GRAPH::edge_iterator eiter,REVERSE_GRAPH &rg) { return remove_edge(*eiter,rg.m_g);//TODO:is it ok? } template inline void remove_out_edge_if(typename REVERSE_GRAPH::vertex_descriptor u, Predicate pred, REVERSE_GRAPH &rg) { return remove_out_edge_if(u,pred,rg.m_g); } /* * MutableBidirectionalGraph concept * */ template inline void remove_in_edge_if(typename REVERSE_GRAPH::vertex_descriptor u, Predicate pred, REVERSE_GRAPH &rg) { return remove_in_edge_if(u,pred,rg.m_g); } /* * MutableEdgeListGraph concept * */ template inline void remove_edge_if(Predicate pred, REVERSE_GRAPH &rg) //TODO:may be pred as reference? { return remove_edge_if(pred,rg.m_g); } /* ************************************************ * For graphs WITH properties * ************************************************ */ /* * VertexMutablePropertyGraph concept */ template inline typename REVERSE_GRAPH::vertex_descriptor add_vertex(typename REVERSE_GRAPH::vertex_property_type const& val,REVERSE_GRAPH &rg) //TODO:change to reverse_graph::property_type, same as in base add_vertex { return add_vertex(val,rg.m_g); } /* * EdgeMutablePropertyGraph concept */ template inline std::pair add_edge(typename REVERSE_GRAPH::vertex_descriptor u, typename REVERSE_GRAPH::vertex_descriptor v, typename REVERSE_GRAPH::edge_property_type const& p, reverse_graph &rg) { return add_edge(v,u,p,rg.m_g); } #undef REVERSE_GRAPH } //namespace boost #endif /* REVERSE_GRAPH_MUTABLE_HPP_ */