From ca1e915097467f50508452a5686eb23bc04d2891 Mon Sep 17 00:00:00 2001 From: Jeremy Siek Date: Mon, 30 Oct 2000 21:45:58 +0000 Subject: [PATCH] make in_edges() work for undirected graphs [SVN r8072] --- include/boost/graph/detail/adjacency_list.hpp | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/include/boost/graph/detail/adjacency_list.hpp b/include/boost/graph/detail/adjacency_list.hpp index 95bdcfeb..174e424c 100644 --- a/include/boost/graph/detail/adjacency_list.hpp +++ b/include/boost/graph/detail/adjacency_list.hpp @@ -837,6 +837,7 @@ namespace boost { typename Config::edge_property_type p; return add_edge(u, v, p, g_); } + // O(1) template inline typename Config::degree_size_type @@ -1410,6 +1411,31 @@ namespace boost { return std::make_pair(out_edge_iterator(first, u), out_edge_iterator(last, u)); } + namespace detail { + template + inline std::pair + in_edges_dispatch(typename Graph::vertex_descriptor u, + Graph& g, Directed) + { + typedef typename Graph::in_edge_iterator in_edge_iterator; + return + std::make_pair(in_edge_iterator(g.in_edge_list(u).begin(), u), + in_edge_iterator(g.in_edge_list(u).end(), u)); + } + template + inline std::pair + in_edges_dispatch(typename Graph::vertex_descriptor u, + Graph& g, undirected_tag) + { + typedef typename Graph::in_edge_iterator in_edge_iterator; + return + std::make_pair(in_edge_iterator(g.out_edge_list(u).begin(), u), + in_edge_iterator(g.out_edge_list(u).end(), u)); + } + } // namespace detail + template inline std::pair @@ -1419,9 +1445,8 @@ namespace boost { typedef typename Config::graph_type Graph; const Graph& cg = static_cast(g_); Graph& g = const_cast(cg); - typedef typename Config::in_edge_iterator in_edge_iterator; - return std::make_pair( in_edge_iterator(g.in_edge_list(u).begin(),u), - in_edge_iterator(g.in_edge_list(u).end(),u) ); + typedef typename Config::directed_category Cat; + return detail::in_edges_dispatch(u, g, Cat()); } template inline typename Config::degree_size_type