annotate DEPENDENCIES/generic/include/boost/graph/closeness_centrality.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 // (C) Copyright 2007-2009 Andrew Sutton
Chris@16 2 //
Chris@16 3 // Use, modification and distribution are subject to the
Chris@16 4 // Boost Software License, Version 1.0 (See accompanying file
Chris@16 5 // LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
Chris@16 6
Chris@16 7 #ifndef BOOST_GRAPH_CLOSENESS_CENTRALITY_HPP
Chris@16 8 #define BOOST_GRAPH_CLOSENESS_CENTRALITY_HPP
Chris@16 9
Chris@16 10 #include <boost/graph/detail/geodesic.hpp>
Chris@16 11 #include <boost/graph/exterior_property.hpp>
Chris@16 12 #include <boost/concept/assert.hpp>
Chris@16 13
Chris@16 14 namespace boost
Chris@16 15 {
Chris@16 16 template <typename Graph,
Chris@16 17 typename DistanceType,
Chris@16 18 typename ResultType,
Chris@16 19 typename Reciprocal = detail::reciprocal<ResultType> >
Chris@16 20 struct closeness_measure
Chris@16 21 : public geodesic_measure<Graph, DistanceType, ResultType>
Chris@16 22 {
Chris@16 23 typedef geodesic_measure< Graph, DistanceType, ResultType> base_type;
Chris@16 24 typedef typename base_type::distance_type distance_type;
Chris@16 25 typedef typename base_type::result_type result_type;
Chris@16 26
Chris@16 27 result_type operator ()(distance_type d, const Graph&)
Chris@16 28 {
Chris@16 29 BOOST_CONCEPT_ASSERT(( NumericValueConcept<DistanceType> ));
Chris@16 30 BOOST_CONCEPT_ASSERT(( NumericValueConcept<ResultType> ));
Chris@16 31 BOOST_CONCEPT_ASSERT(( AdaptableUnaryFunctionConcept<Reciprocal,ResultType,ResultType> ));
Chris@16 32 return (d == base_type::infinite_distance())
Chris@16 33 ? base_type::zero_result()
Chris@16 34 : rec(result_type(d));
Chris@16 35 }
Chris@16 36 Reciprocal rec;
Chris@16 37 };
Chris@16 38
Chris@16 39 template <typename Graph, typename DistanceMap>
Chris@16 40 inline closeness_measure<
Chris@16 41 Graph, typename property_traits<DistanceMap>::value_type, double,
Chris@16 42 detail::reciprocal<double> >
Chris@16 43 measure_closeness(const Graph&, DistanceMap)
Chris@16 44 {
Chris@16 45 typedef typename property_traits<DistanceMap>::value_type Distance;
Chris@16 46 return closeness_measure<Graph, Distance, double, detail::reciprocal<double> >();
Chris@16 47 }
Chris@16 48
Chris@16 49 template <typename T, typename Graph, typename DistanceMap>
Chris@16 50 inline closeness_measure<
Chris@16 51 Graph, typename property_traits<DistanceMap>::value_type, T,
Chris@16 52 detail::reciprocal<T> >
Chris@16 53 measure_closeness(const Graph&, DistanceMap)
Chris@16 54 {
Chris@16 55 typedef typename property_traits<DistanceMap>::value_type Distance;
Chris@16 56 return closeness_measure<Graph, Distance, T, detail::reciprocal<T> >();
Chris@16 57 }
Chris@16 58
Chris@16 59 template <typename T, typename Graph, typename DistanceMap, typename Reciprocal>
Chris@16 60 inline closeness_measure<
Chris@16 61 Graph, typename property_traits<DistanceMap>::value_type, T,
Chris@16 62 Reciprocal>
Chris@16 63 measure_closeness(const Graph&, DistanceMap)
Chris@16 64 {
Chris@16 65 typedef typename property_traits<DistanceMap>::value_type Distance;
Chris@16 66 return closeness_measure<Graph, Distance, T, Reciprocal>();
Chris@16 67 }
Chris@16 68
Chris@16 69 template <typename Graph,
Chris@16 70 typename DistanceMap,
Chris@16 71 typename Measure,
Chris@16 72 typename Combinator>
Chris@16 73 inline typename Measure::result_type
Chris@16 74 closeness_centrality(const Graph& g,
Chris@16 75 DistanceMap dist,
Chris@16 76 Measure measure,
Chris@16 77 Combinator combine)
Chris@16 78 {
Chris@16 79 BOOST_CONCEPT_ASSERT(( VertexListGraphConcept<Graph> ));
Chris@16 80 typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
Chris@16 81 BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept<DistanceMap,Vertex> ));
Chris@16 82 typedef typename property_traits<DistanceMap>::value_type Distance;
Chris@16 83 BOOST_CONCEPT_ASSERT(( NumericValueConcept<Distance> ));
Chris@16 84 BOOST_CONCEPT_ASSERT(( DistanceMeasureConcept<Measure,Graph> ));
Chris@16 85
Chris@16 86 Distance n = detail::combine_distances(g, dist, combine, Distance(0));
Chris@16 87 return measure(n, g);
Chris@16 88 }
Chris@16 89
Chris@16 90 template <typename Graph, typename DistanceMap, typename Measure>
Chris@16 91 inline typename Measure::result_type
Chris@16 92 closeness_centrality(const Graph& g, DistanceMap dist, Measure measure)
Chris@16 93 {
Chris@16 94 BOOST_CONCEPT_ASSERT(( GraphConcept<Graph> ));
Chris@16 95 typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
Chris@16 96 BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept<DistanceMap,Vertex> ));
Chris@16 97 typedef typename property_traits<DistanceMap>::value_type Distance;
Chris@16 98
Chris@16 99 return closeness_centrality(g, dist, measure, std::plus<Distance>());
Chris@16 100 }
Chris@16 101
Chris@16 102 template <typename Graph, typename DistanceMap>
Chris@16 103 inline double closeness_centrality(const Graph& g, DistanceMap dist)
Chris@16 104 { return closeness_centrality(g, dist, measure_closeness(g, dist)); }
Chris@16 105
Chris@16 106 template <typename T, typename Graph, typename DistanceMap>
Chris@16 107 inline T closeness_centrality(const Graph& g, DistanceMap dist)
Chris@16 108 { return closeness_centrality(g, dist, measure_closeness<T>(g, dist)); }
Chris@16 109
Chris@16 110 template <typename Graph,
Chris@16 111 typename DistanceMatrixMap,
Chris@16 112 typename CentralityMap,
Chris@16 113 typename Measure>
Chris@16 114 inline void
Chris@16 115 all_closeness_centralities(const Graph& g,
Chris@16 116 DistanceMatrixMap dist,
Chris@16 117 CentralityMap cent,
Chris@16 118 Measure measure)
Chris@16 119 {
Chris@16 120 BOOST_CONCEPT_ASSERT(( VertexListGraphConcept<Graph> ));
Chris@16 121 typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
Chris@16 122 BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept<DistanceMatrixMap,Vertex> ));
Chris@16 123 typedef typename property_traits<DistanceMatrixMap>::value_type DistanceMap;
Chris@16 124 BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept<DistanceMap,Vertex> ));
Chris@16 125 BOOST_CONCEPT_ASSERT(( WritablePropertyMapConcept<CentralityMap,Vertex> ));
Chris@16 126 typedef typename property_traits<CentralityMap>::value_type Centrality;
Chris@16 127
Chris@16 128 typename graph_traits<Graph>::vertex_iterator i, end;
Chris@16 129 for(boost::tie(i, end) = vertices(g); i != end; ++i) {
Chris@16 130 DistanceMap dm = get(dist, *i);
Chris@16 131 Centrality c = closeness_centrality(g, dm, measure);
Chris@16 132 put(cent, *i, c);
Chris@16 133 }
Chris@16 134 }
Chris@16 135
Chris@16 136 template <typename Graph,
Chris@16 137 typename DistanceMatrixMap,
Chris@16 138 typename CentralityMap>
Chris@16 139 inline void
Chris@16 140 all_closeness_centralities(const Graph& g,
Chris@16 141 DistanceMatrixMap dist,
Chris@16 142 CentralityMap cent)
Chris@16 143 {
Chris@16 144 BOOST_CONCEPT_ASSERT(( GraphConcept<Graph> ));
Chris@16 145 typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
Chris@16 146 BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept<DistanceMatrixMap,Vertex> ));
Chris@16 147 typedef typename property_traits<DistanceMatrixMap>::value_type DistanceMap;
Chris@16 148 BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept<DistanceMap,Vertex> ));
Chris@16 149 typedef typename property_traits<CentralityMap>::value_type Result;
Chris@16 150
Chris@16 151 all_closeness_centralities(g, dist, cent, measure_closeness<Result>(g, DistanceMap()));
Chris@16 152 }
Chris@16 153
Chris@16 154 } /* namespace boost */
Chris@16 155
Chris@16 156 #endif