annotate DEPENDENCIES/generic/include/boost/graph/make_connected.hpp @ 118:770eb830ec19 emscripten

Typo fix
author Chris Cannam
date Wed, 18 May 2016 16:14:08 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 //=======================================================================
Chris@16 2 // Copyright 2007 Aaron Windsor
Chris@16 3 //
Chris@16 4 // Distributed under the Boost Software License, Version 1.0. (See
Chris@16 5 // accompanying file LICENSE_1_0.txt or copy at
Chris@16 6 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 7 //=======================================================================
Chris@16 8 #ifndef __MAKE_CONNECTED_HPP__
Chris@16 9 #define __MAKE_CONNECTED_HPP__
Chris@16 10
Chris@16 11 #include <boost/config.hpp>
Chris@16 12 #include <boost/next_prior.hpp>
Chris@16 13 #include <boost/tuple/tuple.hpp> //for tie
Chris@16 14 #include <boost/graph/connected_components.hpp>
Chris@16 15 #include <boost/property_map/property_map.hpp>
Chris@16 16 #include <vector>
Chris@16 17
Chris@16 18 #include <boost/graph/planar_detail/add_edge_visitors.hpp>
Chris@16 19 #include <boost/graph/planar_detail/bucket_sort.hpp>
Chris@16 20
Chris@16 21
Chris@16 22 namespace boost
Chris@16 23 {
Chris@16 24
Chris@16 25
Chris@16 26 template <typename Graph,
Chris@16 27 typename VertexIndexMap,
Chris@16 28 typename AddEdgeVisitor
Chris@16 29 >
Chris@16 30 void make_connected(Graph& g, VertexIndexMap vm, AddEdgeVisitor& vis)
Chris@16 31 {
Chris@16 32 typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator_t;
Chris@16 33 typedef typename graph_traits<Graph>::vertex_descriptor vertex_t;
Chris@16 34 typedef typename graph_traits<Graph>::vertices_size_type v_size_t;
Chris@16 35 typedef iterator_property_map< typename std::vector<v_size_t>::iterator,
Chris@16 36 VertexIndexMap
Chris@16 37 > vertex_to_v_size_map_t;
Chris@16 38
Chris@16 39 std::vector<v_size_t> component_vector(num_vertices(g));
Chris@16 40 vertex_to_v_size_map_t component(component_vector.begin(), vm);
Chris@16 41 std::vector<vertex_t> vertices_by_component(num_vertices(g));
Chris@16 42
Chris@16 43 v_size_t num_components = connected_components(g, component);
Chris@16 44
Chris@16 45 if (num_components < 2)
Chris@16 46 return;
Chris@16 47
Chris@16 48 vertex_iterator_t vi, vi_end;
Chris@16 49 boost::tie(vi,vi_end) = vertices(g);
Chris@16 50 std::copy(vi, vi_end, vertices_by_component.begin());
Chris@16 51
Chris@16 52 bucket_sort(vertices_by_component.begin(),
Chris@16 53 vertices_by_component.end(),
Chris@16 54 component,
Chris@16 55 num_components
Chris@16 56 );
Chris@16 57
Chris@16 58 typedef typename std::vector<vertex_t>::iterator vec_of_vertices_itr_t;
Chris@16 59
Chris@16 60 vec_of_vertices_itr_t ci_end = vertices_by_component.end();
Chris@16 61 vec_of_vertices_itr_t ci_prev = vertices_by_component.begin();
Chris@16 62 if (ci_prev == ci_end)
Chris@16 63 return;
Chris@16 64
Chris@16 65 for(vec_of_vertices_itr_t ci = boost::next(ci_prev);
Chris@16 66 ci != ci_end; ci_prev = ci, ++ci
Chris@16 67 )
Chris@16 68 {
Chris@16 69 if (component[*ci_prev] != component[*ci])
Chris@16 70 vis.visit_vertex_pair(*ci_prev, *ci, g);
Chris@16 71 }
Chris@16 72
Chris@16 73 }
Chris@16 74
Chris@16 75
Chris@16 76
Chris@16 77
Chris@16 78 template <typename Graph, typename VertexIndexMap>
Chris@16 79 inline void make_connected(Graph& g, VertexIndexMap vm)
Chris@16 80 {
Chris@16 81 default_add_edge_visitor vis;
Chris@16 82 make_connected(g, vm, vis);
Chris@16 83 }
Chris@16 84
Chris@16 85
Chris@16 86
Chris@16 87
Chris@16 88 template <typename Graph>
Chris@16 89 inline void make_connected(Graph& g)
Chris@16 90 {
Chris@16 91 make_connected(g, get(vertex_index,g));
Chris@16 92 }
Chris@16 93
Chris@16 94
Chris@16 95
Chris@16 96
Chris@16 97 } // namespace boost
Chris@16 98
Chris@16 99 #endif //__MAKE_CONNECTED_HPP__