annotate DEPENDENCIES/generic/include/boost/graph/wavefront.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 //=======================================================================
Chris@16 3 // Copyright 2002 Marc Wintermantel (wintermantel@even-ag.ch)
Chris@16 4 // ETH Zurich, Center of Structure Technologies (www.imes.ethz.ch/st)
Chris@16 5 //
Chris@16 6 // Distributed under the Boost Software License, Version 1.0. (See
Chris@16 7 // accompanying file LICENSE_1_0.txt or copy at
Chris@16 8 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 9 //=======================================================================
Chris@16 10 //
Chris@16 11
Chris@16 12 #ifndef BOOST_GRAPH_WAVEFRONT_HPP
Chris@16 13 #define BOOST_GRAPH_WAVEFRONT_HPP
Chris@16 14
Chris@16 15 #include <boost/config.hpp>
Chris@16 16 #include <boost/graph/graph_traits.hpp>
Chris@16 17 #include <boost/detail/numeric_traits.hpp>
Chris@16 18 #include <boost/graph/bandwidth.hpp>
Chris@16 19 #include <boost/config/no_tr1/cmath.hpp>
Chris@16 20 #include <vector>
Chris@16 21 #include <algorithm> // for std::min and std::max
Chris@16 22
Chris@16 23 namespace boost {
Chris@16 24
Chris@16 25 template <typename Graph, typename VertexIndexMap>
Chris@16 26 typename graph_traits<Graph>::vertices_size_type
Chris@16 27 ith_wavefront(typename graph_traits<Graph>::vertex_descriptor i,
Chris@16 28 const Graph& g,
Chris@16 29 VertexIndexMap index)
Chris@16 30 {
Chris@16 31 typename graph_traits<Graph>::vertex_descriptor v, w;
Chris@16 32 typename graph_traits<Graph>::vertices_size_type b = 1;
Chris@16 33 typename graph_traits<Graph>::out_edge_iterator edge_it2, edge_it2_end;
Chris@16 34 typename graph_traits<Graph>::vertices_size_type index_i = index[i];
Chris@16 35 std::vector<bool> rows_active(num_vertices(g), false);
Chris@16 36
Chris@16 37 rows_active[index_i] = true;
Chris@16 38
Chris@16 39 typename graph_traits<Graph>::vertex_iterator ui, ui_end;
Chris@16 40 for (boost::tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui)
Chris@16 41 {
Chris@16 42 v = *ui;
Chris@16 43 if(index[v] <= index_i)
Chris@16 44 {
Chris@16 45 for (boost::tie(edge_it2, edge_it2_end) = out_edges(v, g); edge_it2 != edge_it2_end; ++edge_it2)
Chris@16 46 {
Chris@16 47 w = target(*edge_it2, g);
Chris@16 48 if( (index[w] >= index_i) && (!rows_active[index[w]]) )
Chris@16 49 {
Chris@16 50 b++;
Chris@16 51 rows_active[index[w]] = true;
Chris@16 52 }
Chris@16 53 }
Chris@16 54 }
Chris@16 55 }
Chris@16 56
Chris@16 57 return b;
Chris@16 58 }
Chris@16 59
Chris@16 60
Chris@16 61 template <typename Graph>
Chris@16 62 typename graph_traits<Graph>::vertices_size_type
Chris@16 63 ith_wavefront(typename graph_traits<Graph>::vertex_descriptor i,
Chris@16 64 const Graph& g)
Chris@16 65 {
Chris@16 66 return ith_wavefront(i, g, get(vertex_index, g));
Chris@16 67 }
Chris@16 68
Chris@16 69
Chris@16 70 template <typename Graph, typename VertexIndexMap>
Chris@16 71 typename graph_traits<Graph>::vertices_size_type
Chris@16 72 max_wavefront(const Graph& g, VertexIndexMap index)
Chris@16 73 {
Chris@16 74 BOOST_USING_STD_MAX();
Chris@16 75 typename graph_traits<Graph>::vertices_size_type b = 0;
Chris@16 76 typename graph_traits<Graph>::vertex_iterator i, end;
Chris@16 77 for (boost::tie(i, end) = vertices(g); i != end; ++i)
Chris@16 78 b = max BOOST_PREVENT_MACRO_SUBSTITUTION(b, ith_wavefront(*i, g, index));
Chris@16 79 return b;
Chris@16 80 }
Chris@16 81
Chris@16 82 template <typename Graph>
Chris@16 83 typename graph_traits<Graph>::vertices_size_type
Chris@16 84 max_wavefront(const Graph& g)
Chris@16 85 {
Chris@16 86 return max_wavefront(g, get(vertex_index, g));
Chris@16 87 }
Chris@16 88
Chris@16 89
Chris@16 90 template <typename Graph, typename VertexIndexMap>
Chris@16 91 double
Chris@16 92 aver_wavefront(const Graph& g, VertexIndexMap index)
Chris@16 93 {
Chris@16 94 double b = 0;
Chris@16 95 typename graph_traits<Graph>::vertex_iterator i, end;
Chris@16 96 for (boost::tie(i, end) = vertices(g); i != end; ++i)
Chris@16 97 b += ith_wavefront(*i, g, index);
Chris@16 98
Chris@16 99 b /= num_vertices(g);
Chris@16 100 return b;
Chris@16 101 }
Chris@16 102
Chris@16 103 template <typename Graph>
Chris@16 104 double
Chris@16 105 aver_wavefront(const Graph& g)
Chris@16 106 {
Chris@16 107 return aver_wavefront(g, get(vertex_index, g));
Chris@16 108 }
Chris@16 109
Chris@16 110
Chris@16 111 template <typename Graph, typename VertexIndexMap>
Chris@16 112 double
Chris@16 113 rms_wavefront(const Graph& g, VertexIndexMap index)
Chris@16 114 {
Chris@16 115 double b = 0;
Chris@16 116 typename graph_traits<Graph>::vertex_iterator i, end;
Chris@16 117 for (boost::tie(i, end) = vertices(g); i != end; ++i)
Chris@16 118 b += std::pow(double ( ith_wavefront(*i, g, index) ), 2.0);
Chris@16 119
Chris@16 120 b /= num_vertices(g);
Chris@16 121
Chris@16 122 return std::sqrt(b);
Chris@16 123 }
Chris@16 124
Chris@16 125 template <typename Graph>
Chris@16 126 double
Chris@16 127 rms_wavefront(const Graph& g)
Chris@16 128 {
Chris@16 129 return rms_wavefront(g, get(vertex_index, g));
Chris@16 130 }
Chris@16 131
Chris@16 132
Chris@16 133 } // namespace boost
Chris@16 134
Chris@16 135 #endif // BOOST_GRAPH_WAVEFRONT_HPP