mirror of
https://github.com/boostorg/graph.git
synced 2026-02-28 05:22:24 +00:00
added clear_out_edges()
[SVN r10663]
This commit is contained in:
@@ -469,6 +469,19 @@ namespace boost {
|
||||
// or maybe just Container
|
||||
}
|
||||
|
||||
template <class Config>
|
||||
inline void
|
||||
clear_out_edges(typename Config::vertex_descriptor u,
|
||||
directed_graph_helper<Config>& g_)
|
||||
{
|
||||
typedef typename Config::graph_type graph_type;
|
||||
typedef typename Config::edge_parallel_category Cat;
|
||||
graph_type& g = static_cast<graph_type&>(g_);
|
||||
g.out_edge_list(u).clear();
|
||||
// clear() should be a req of Sequence and AssociativeContainer,
|
||||
// or maybe just Container
|
||||
}
|
||||
|
||||
// O(V), could do better...
|
||||
template <class Config>
|
||||
inline typename Config::edges_size_type
|
||||
@@ -1085,6 +1098,44 @@ namespace boost {
|
||||
in_edge_list(g, u).clear();
|
||||
}
|
||||
|
||||
template <class Config>
|
||||
inline void
|
||||
clear_out_edges(typename Config::vertex_descriptor u,
|
||||
bidirectional_graph_helper_with_property<Config>& g_)
|
||||
{
|
||||
typedef typename Config::graph_type graph_type;
|
||||
typedef typename Config::edge_parallel_category Cat;
|
||||
graph_type& g = static_cast<graph_type&>(g_);
|
||||
typename Config::OutEdgeList& el = g.out_edge_list(u);
|
||||
typename Config::OutEdgeList::iterator
|
||||
ei = el.begin(), ei_end = el.end();
|
||||
for (; ei != ei_end; ++ei) {
|
||||
detail::erase_from_incidence_list
|
||||
(in_edge_list(g, (*ei).get_target()), u, Cat());
|
||||
g.m_edges.erase((*ei).get_iter());
|
||||
}
|
||||
g.out_edge_list(u).clear();
|
||||
}
|
||||
|
||||
template <class Config>
|
||||
inline void
|
||||
clear_in_edges(typename Config::vertex_descriptor u,
|
||||
bidirectional_graph_helper_with_property<Config>& g_)
|
||||
{
|
||||
typedef typename Config::graph_type graph_type;
|
||||
typedef typename Config::edge_parallel_category Cat;
|
||||
graph_type& g = static_cast<graph_type&>(g_);
|
||||
typename Config::InEdgeList& in_el = in_edge_list(g, u);
|
||||
typename Config::InEdgeList::iterator
|
||||
in_ei = in_el.begin(), in_ei_end = in_el.end();
|
||||
for (; in_ei != in_ei_end; ++in_ei) {
|
||||
detail::erase_from_incidence_list
|
||||
(g.out_edge_list((*in_ei).get_target()), u, Cat());
|
||||
g.m_edges.erase((*in_ei).get_iter());
|
||||
}
|
||||
in_edge_list(g, u).clear();
|
||||
}
|
||||
|
||||
// O(1) for allow_parallel_edge_tag
|
||||
// O(log(E/V)) for disallow_parallel_edge_tag
|
||||
template <class Config>
|
||||
|
||||
Reference in New Issue
Block a user