mirror of
https://github.com/boostorg/graph.git
synced 2026-02-26 16:52:12 +00:00
Merged more Boost.Graph bug fixes from trunk
[SVN r84641]
This commit is contained in:
@@ -642,8 +642,6 @@ class compressed_sparse_row_graph<directedS, VertexProperty, EdgeProperty, Graph
|
||||
const GlobalToLocal& global_to_local) {
|
||||
typedef compressed_sparse_row_graph Graph;
|
||||
typedef typename boost::graph_traits<Graph>::vertex_descriptor vertex_t;
|
||||
typedef typename boost::graph_traits<Graph>::vertices_size_type vertex_num;
|
||||
typedef typename boost::graph_traits<Graph>::edges_size_type edge_num;
|
||||
typedef std::vector<std::pair<vertex_t, vertex_t> > edge_vector_t;
|
||||
edge_vector_t new_edges(first, last);
|
||||
if (new_edges.empty()) return;
|
||||
@@ -666,8 +664,6 @@ class compressed_sparse_row_graph<directedS, VertexProperty, EdgeProperty, Graph
|
||||
const GlobalToLocal& global_to_local) {
|
||||
typedef compressed_sparse_row_graph Graph;
|
||||
typedef typename boost::graph_traits<Graph>::vertex_descriptor vertex_t;
|
||||
typedef typename boost::graph_traits<Graph>::vertices_size_type vertex_num;
|
||||
typedef typename boost::graph_traits<Graph>::edges_size_type edge_num;
|
||||
typedef std::pair<vertex_t, vertex_t> vertex_pair;
|
||||
typedef std::vector<
|
||||
boost::tuple<vertex_pair,
|
||||
@@ -1164,7 +1160,6 @@ inline std::pair<typename BOOST_BIDIR_CSR_GRAPH_TYPE::in_edge_iterator,
|
||||
typename BOOST_BIDIR_CSR_GRAPH_TYPE::in_edge_iterator>
|
||||
in_edges(Vertex v, const BOOST_BIDIR_CSR_GRAPH_TYPE& g)
|
||||
{
|
||||
typedef typename BOOST_BIDIR_CSR_GRAPH_TYPE::edge_descriptor ed;
|
||||
typedef typename BOOST_BIDIR_CSR_GRAPH_TYPE::in_edge_iterator it;
|
||||
EdgeIndex v_row_start = g.m_backward.m_rowstart[v];
|
||||
EdgeIndex next_row_start = g.m_backward.m_rowstart[v + 1];
|
||||
@@ -1368,7 +1363,6 @@ put(Tag tag,
|
||||
typename property_map<BOOST_CSR_GRAPH_TYPE, Tag>::key_type k,
|
||||
typename lookup_one_property<typename property_map<BOOST_CSR_GRAPH_TYPE, Tag>::plist_type, Tag>::type val) {
|
||||
typedef typename property_map<BOOST_CSR_GRAPH_TYPE, Tag>::all_tag all_tag;
|
||||
typedef typename property_map<BOOST_CSR_GRAPH_TYPE, all_tag>::type outer_pm;
|
||||
lookup_one_property<typename property_map<BOOST_CSR_GRAPH_TYPE, Tag>::plist_type, Tag>::lookup(get(all_tag(), g, k), tag) = val;
|
||||
}
|
||||
|
||||
|
||||
@@ -635,7 +635,6 @@ namespace boost {
|
||||
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,
|
||||
@@ -782,7 +781,6 @@ namespace boost {
|
||||
typedef typename Graph::global_edgelist_selector EdgeListS;
|
||||
BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
|
||||
|
||||
typedef typename EdgeList::value_type StoredEdge;
|
||||
typename EdgeList::iterator i = el.begin(), end = el.end();
|
||||
for (; i != end; ++i) {
|
||||
if ((*i).get_target() == v) {
|
||||
@@ -987,7 +985,6 @@ namespace boost {
|
||||
BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
|
||||
|
||||
typedef typename Config::graph_type graph_type;
|
||||
typedef typename Config::edge_parallel_category Cat;
|
||||
graph_type& g = static_cast<graph_type&>(g_);
|
||||
while (true) {
|
||||
typename Config::out_edge_iterator ei, ei_end;
|
||||
@@ -1589,7 +1586,6 @@ namespace boost {
|
||||
typedef typename Config::graph_type Graph;
|
||||
typedef typename Config::StoredEdge StoredEdge;
|
||||
const Graph& cg = static_cast<const Graph&>(g_);
|
||||
typedef typename Config::out_edge_iterator out_edge_iterator;
|
||||
const typename Config::OutEdgeList& el = cg.out_edge_list(u);
|
||||
typename Config::OutEdgeList::const_iterator it = graph_detail::
|
||||
find(el, StoredEdge(v));
|
||||
|
||||
@@ -218,8 +218,6 @@ namespace detail {
|
||||
// the user has supplied the number of edges.
|
||||
edges_size_type numedges = numedges_or_zero;
|
||||
if (numedges == 0) {
|
||||
typedef typename std::iterator_traits<InputIterator>::iterator_category
|
||||
category;
|
||||
numedges = boost::graph::detail::reserve_count_for_single_pass(edge_begin, edge_end);
|
||||
}
|
||||
m_column.clear();
|
||||
@@ -313,7 +311,6 @@ namespace detail {
|
||||
inherited_edge_properties::resize(numedges);
|
||||
EdgeIndex current_edge = 0;
|
||||
typedef typename boost::graph_traits<Graph>::vertex_descriptor g_vertex;
|
||||
typedef typename boost::graph_traits<Graph>::edge_descriptor g_edge;
|
||||
typedef typename boost::graph_traits<Graph>::out_edge_iterator
|
||||
g_out_edge_iter;
|
||||
|
||||
@@ -347,7 +344,6 @@ namespace detail {
|
||||
// Flip sequence
|
||||
BidirectionalIterator first(last_sorted);
|
||||
BidirectionalIterator last(first_sorted);
|
||||
typedef Vertex vertex_t;
|
||||
typedef Vertex vertex_num;
|
||||
typedef EdgeIndex edge_num;
|
||||
edge_num new_edge_count = std::distance(first, last);
|
||||
|
||||
@@ -54,7 +54,6 @@ count_starts
|
||||
KeyFilter key_filter,
|
||||
KeyTransform key_transform) {
|
||||
|
||||
typedef VerticesSize vertices_size_type;
|
||||
typedef typename std::iterator_traits<RowstartIterator>::value_type EdgeIndex;
|
||||
|
||||
// Put the degree of each vertex v into m_rowstart[v + 1]
|
||||
@@ -69,7 +68,7 @@ count_starts
|
||||
// m_rowstart
|
||||
EdgeIndex start_of_this_row = 0;
|
||||
starts[0] = start_of_this_row;
|
||||
for (vertices_size_type i = 1; i < numkeys + 1; ++i) {
|
||||
for (VerticesSize i = 1; i < numkeys + 1; ++i) {
|
||||
start_of_this_row += starts[i];
|
||||
starts[i] = start_of_this_row;
|
||||
}
|
||||
@@ -88,7 +87,6 @@ histogram_sort(KeyIterator key_begin, KeyIterator key_end,
|
||||
KeyFilter key_filter,
|
||||
KeyTransform key_transform) {
|
||||
|
||||
typedef NumKeys vertices_size_type;
|
||||
typedef typename std::iterator_traits<RowstartIterator>::value_type EdgeIndex;
|
||||
|
||||
// Histogram sort the edges by their source vertices, putting the targets
|
||||
@@ -99,7 +97,7 @@ histogram_sort(KeyIterator key_begin, KeyIterator key_end,
|
||||
Value1InputIter v1i = values1_begin;
|
||||
for (KeyIterator i = key_begin; i != key_end; ++i, ++v1i) {
|
||||
if (key_filter(*i)) {
|
||||
vertices_size_type source = key_transform(*i);
|
||||
NumKeys source = key_transform(*i);
|
||||
BOOST_ASSERT (source < numkeys);
|
||||
EdgeIndex insert_pos = current_insert_positions[source];
|
||||
++current_insert_positions[source];
|
||||
@@ -126,7 +124,6 @@ histogram_sort(KeyIterator key_begin, KeyIterator key_end,
|
||||
KeyFilter key_filter,
|
||||
KeyTransform key_transform) {
|
||||
|
||||
typedef NumKeys vertices_size_type;
|
||||
typedef typename std::iterator_traits<RowstartIterator>::value_type EdgeIndex;
|
||||
|
||||
// Histogram sort the edges by their source vertices, putting the targets
|
||||
@@ -138,7 +135,7 @@ histogram_sort(KeyIterator key_begin, KeyIterator key_end,
|
||||
Value2InputIter v2i = values2_begin;
|
||||
for (KeyIterator i = key_begin; i != key_end; ++i, ++v1i, ++v2i) {
|
||||
if (key_filter(*i)) {
|
||||
vertices_size_type source = key_transform(*i);
|
||||
NumKeys source = key_transform(*i);
|
||||
BOOST_ASSERT (source < numkeys);
|
||||
EdgeIndex insert_pos = current_insert_positions[source];
|
||||
++current_insert_positions[source];
|
||||
@@ -159,7 +156,6 @@ histogram_sort_inplace(KeyIterator key_begin,
|
||||
Value1Iter values1,
|
||||
KeyTransform key_transform) {
|
||||
|
||||
typedef NumKeys vertices_size_type;
|
||||
typedef typename std::iterator_traits<RowstartIterator>::value_type EdgeIndex;
|
||||
|
||||
// 1. Copy m_rowstart (except last element) to get insert positions
|
||||
@@ -194,7 +190,6 @@ histogram_sort_inplace(KeyIterator key_begin,
|
||||
Value2Iter values2,
|
||||
KeyTransform key_transform) {
|
||||
|
||||
typedef NumKeys vertices_size_type;
|
||||
typedef typename std::iterator_traits<RowstartIterator>::value_type EdgeIndex;
|
||||
|
||||
// 1. Copy m_rowstart (except last element) to get insert positions
|
||||
@@ -274,16 +269,21 @@ void split_into_separate_coords_filtered
|
||||
}
|
||||
}
|
||||
|
||||
// The versions of operator()() here can't return by reference because the
|
||||
// actual type passed in may not match Pair, in which case the reference
|
||||
// parameter is bound to a temporary that could end up dangling after the
|
||||
// operator returns.
|
||||
|
||||
template <typename Pair>
|
||||
struct project1st {
|
||||
typedef typename Pair::first_type result_type;
|
||||
const result_type& operator()(const Pair& p) const {return p.first;}
|
||||
result_type operator()(const Pair& p) const {return p.first;}
|
||||
};
|
||||
|
||||
template <typename Pair>
|
||||
struct project2nd {
|
||||
typedef typename Pair::second_type result_type;
|
||||
const result_type& operator()(const Pair& p) const {return p.second;}
|
||||
result_type operator()(const Pair& p) const {return p.second;}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -219,7 +219,12 @@ namespace boost
|
||||
vertex_state[u] = graph::detail::V_EVEN;
|
||||
out_edge_iterator_t ei, ei_end;
|
||||
for(boost::tie(ei,ei_end) = out_edges(u,g); ei != ei_end; ++ei)
|
||||
even_edges.push_back( *ei );
|
||||
{
|
||||
if (target(*ei,g) != u)
|
||||
{
|
||||
even_edges.push_back( *ei );
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
vertex_state[u] = graph::detail::V_UNREACHED;
|
||||
@@ -258,10 +263,16 @@ namespace boost
|
||||
if (vertex_state[w_prime] == graph::detail::V_UNREACHED)
|
||||
{
|
||||
vertex_state[w_prime] = graph::detail::V_ODD;
|
||||
vertex_state[mate[w_prime]] = graph::detail::V_EVEN;
|
||||
vertex_descriptor_t w_prime_mate = mate[w_prime];
|
||||
vertex_state[w_prime_mate] = graph::detail::V_EVEN;
|
||||
out_edge_iterator_t ei, ei_end;
|
||||
for( boost::tie(ei,ei_end) = out_edges(mate[w_prime], g); ei != ei_end; ++ei)
|
||||
even_edges.push_back(*ei);
|
||||
for( boost::tie(ei,ei_end) = out_edges(w_prime_mate, g); ei != ei_end; ++ei)
|
||||
{
|
||||
if (target(*ei,g) != w_prime_mate)
|
||||
{
|
||||
even_edges.push_back(*ei);
|
||||
}
|
||||
}
|
||||
pred[w_prime] = v;
|
||||
}
|
||||
|
||||
@@ -403,7 +414,12 @@ namespace boost
|
||||
bridge[v] = the_bridge;
|
||||
out_edge_iterator_t oei, oei_end;
|
||||
for(boost::tie(oei, oei_end) = out_edges(v,g); oei != oei_end; ++oei)
|
||||
even_edges.push_back(*oei);
|
||||
{
|
||||
if (target(*oei,g) != v)
|
||||
{
|
||||
even_edges.push_back(*oei);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -529,7 +545,7 @@ namespace boost
|
||||
vertex_descriptor_t u = source(e,g);
|
||||
vertex_descriptor_t v = target(e,g);
|
||||
|
||||
if (get(mate,u) == get(mate,v))
|
||||
if (u != v && get(mate,u) == get(mate,v))
|
||||
//only way equality can hold is if
|
||||
// mate[u] == mate[v] == null_vertex
|
||||
{
|
||||
@@ -606,6 +622,7 @@ namespace boost
|
||||
edge_descriptor_t e = *ei;
|
||||
vertex_descriptor_t u = source(e,g);
|
||||
vertex_descriptor_t v = target(e,g);
|
||||
if (u == v) continue;
|
||||
edge_list.push_back(std::make_pair(u,v));
|
||||
edge_list.push_back(std::make_pair(v,u));
|
||||
}
|
||||
|
||||
@@ -304,7 +304,7 @@ maximum_adjacency_search(const Graph& g, WeightMap weights, MASVisitor vis, cons
|
||||
|
||||
template <typename ArgPack>
|
||||
void
|
||||
operator() (const Graph& g, const ArgPack arg_pack) const {
|
||||
operator() (const Graph& g, const ArgPack& arg_pack) const {
|
||||
// call the function that does the dispatching
|
||||
typedef typename get_param_type<edge_weight_t, ArgPack >::type W;
|
||||
graph::detail::mas_dispatch<W>::apply(g, arg_pack, get_param(arg_pack, edge_weight));
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace boost {
|
||||
mas_min_cut_visitor(const Graph& g,
|
||||
ParityMap parity,
|
||||
weight_type& cutweight,
|
||||
WeightMap weight_map,
|
||||
const WeightMap& weight_map,
|
||||
IndexMap index_map)
|
||||
: m_bestParity(parity),
|
||||
m_parity(make_one_bit_color_map(num_vertices(g), index_map)),
|
||||
@@ -140,7 +140,7 @@ namespace boost {
|
||||
|
||||
weight_type bestW = (std::numeric_limits<weight_type>::max)();
|
||||
weight_type bestThisTime = (std::numeric_limits<weight_type>::max)();
|
||||
vertex_descriptor bestStart;
|
||||
vertex_descriptor bestStart = boost::graph_traits<UndirectedGraph>::null_vertex();
|
||||
|
||||
detail::mas_min_cut_visitor<ParityMap, WeightMap, IndexMap>
|
||||
vis(g, parities, bestThisTime, weights, index_map);
|
||||
@@ -213,7 +213,7 @@ namespace graph {
|
||||
typedef typename boost::graph_traits<UndirectedGraph>::vertex_descriptor vertex_descriptor;
|
||||
typedef typename boost::property_traits<WeightMap>::value_type weight_type;
|
||||
|
||||
typedef typename boost::detail::make_priority_queue_from_arg_pack_gen<boost::graph::keywords::tag::max_priority_queue, weight_type, vertex_descriptor, std::greater<weight_type> > gen_type;
|
||||
typedef boost::detail::make_priority_queue_from_arg_pack_gen<boost::graph::keywords::tag::max_priority_queue, weight_type, vertex_descriptor, std::greater<weight_type> > gen_type;
|
||||
|
||||
gen_type gen(choose_param(get_param(arg_pack, boost::distance_zero_t()), weight_type(0)));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user