diff --git a/include/boost/graph/compressed_sparse_row_graph.hpp b/include/boost/graph/compressed_sparse_row_graph.hpp index 33c26725..de3234a0 100644 --- a/include/boost/graph/compressed_sparse_row_graph.hpp +++ b/include/boost/graph/compressed_sparse_row_graph.hpp @@ -642,8 +642,6 @@ class compressed_sparse_row_graph::vertex_descriptor vertex_t; - typedef typename boost::graph_traits::vertices_size_type vertex_num; - typedef typename boost::graph_traits::edges_size_type edge_num; typedef std::vector > edge_vector_t; edge_vector_t new_edges(first, last); if (new_edges.empty()) return; @@ -666,8 +664,6 @@ class compressed_sparse_row_graph::vertex_descriptor vertex_t; - typedef typename boost::graph_traits::vertices_size_type vertex_num; - typedef typename boost::graph_traits::edges_size_type edge_num; typedef std::pair vertex_pair; typedef std::vector< boost::tuple 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::key_type k, typename lookup_one_property::plist_type, Tag>::type val) { typedef typename property_map::all_tag all_tag; - typedef typename property_map::type outer_pm; lookup_one_property::plist_type, Tag>::lookup(get(all_tag(), g, k), tag) = val; } diff --git a/include/boost/graph/detail/adjacency_list.hpp b/include/boost/graph/detail/adjacency_list.hpp index f6d79481..dd27ecd4 100644 --- a/include/boost/graph/detail/adjacency_list.hpp +++ b/include/boost/graph/detail/adjacency_list.hpp @@ -635,7 +635,6 @@ namespace boost { directed_graph_helper& g_) { typedef typename Config::graph_type graph_type; - typedef typename Config::edge_parallel_category Cat; graph_type& g = static_cast(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::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::value)); typedef typename Config::graph_type graph_type; - typedef typename Config::edge_parallel_category Cat; graph_type& g = static_cast(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(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)); diff --git a/include/boost/graph/detail/compressed_sparse_row_struct.hpp b/include/boost/graph/detail/compressed_sparse_row_struct.hpp index 56495f34..6e7b60d7 100644 --- a/include/boost/graph/detail/compressed_sparse_row_struct.hpp +++ b/include/boost/graph/detail/compressed_sparse_row_struct.hpp @@ -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::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::vertex_descriptor g_vertex; - typedef typename boost::graph_traits::edge_descriptor g_edge; typedef typename boost::graph_traits::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); diff --git a/include/boost/graph/detail/histogram_sort.hpp b/include/boost/graph/detail/histogram_sort.hpp index 54d4449e..ef036356 100644 --- a/include/boost/graph/detail/histogram_sort.hpp +++ b/include/boost/graph/detail/histogram_sort.hpp @@ -54,7 +54,6 @@ count_starts KeyFilter key_filter, KeyTransform key_transform) { - typedef VerticesSize vertices_size_type; typedef typename std::iterator_traits::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::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::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::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::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 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 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;} }; } diff --git a/include/boost/graph/max_cardinality_matching.hpp b/include/boost/graph/max_cardinality_matching.hpp index 5516bebc..1549345a 100644 --- a/include/boost/graph/max_cardinality_matching.hpp +++ b/include/boost/graph/max_cardinality_matching.hpp @@ -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)); } diff --git a/include/boost/graph/maximum_adjacency_search.hpp b/include/boost/graph/maximum_adjacency_search.hpp index a87c90de..58dc8695 100644 --- a/include/boost/graph/maximum_adjacency_search.hpp +++ b/include/boost/graph/maximum_adjacency_search.hpp @@ -304,7 +304,7 @@ maximum_adjacency_search(const Graph& g, WeightMap weights, MASVisitor vis, cons template 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::type W; graph::detail::mas_dispatch::apply(g, arg_pack, get_param(arg_pack, edge_weight)); diff --git a/include/boost/graph/stoer_wagner_min_cut.hpp b/include/boost/graph/stoer_wagner_min_cut.hpp index c868c0c8..a777f031 100644 --- a/include/boost/graph/stoer_wagner_min_cut.hpp +++ b/include/boost/graph/stoer_wagner_min_cut.hpp @@ -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::max)(); weight_type bestThisTime = (std::numeric_limits::max)(); - vertex_descriptor bestStart; + vertex_descriptor bestStart = boost::graph_traits::null_vertex(); detail::mas_min_cut_visitor vis(g, parities, bestThisTime, weights, index_map); @@ -213,7 +213,7 @@ namespace graph { typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; typedef typename boost::property_traits::value_type weight_type; - typedef typename boost::detail::make_priority_queue_from_arg_pack_gen > gen_type; + typedef boost::detail::make_priority_queue_from_arg_pack_gen > gen_type; gen_type gen(choose_param(get_param(arg_pack, boost::distance_zero_t()), weight_type(0))); diff --git a/src/read_graphviz_new.cpp b/src/read_graphviz_new.cpp index 6c6608c7..eadfa21e 100644 --- a/src/read_graphviz_new.cpp +++ b/src/read_graphviz_new.cpp @@ -762,7 +762,6 @@ namespace read_graphviz_detail { } void translate_results_to_graph(const parser_result& r, ::boost::detail::graph::mutate_graph* mg) { - typedef boost::detail::graph::node_t vertex; typedef boost::detail::graph::edge_t edge; for (std::map::const_iterator i = r.nodes.begin(); i != r.nodes.end(); ++i) { // std::cerr << i->first << " " << props_to_string(i->second) << std::endl;