annotate DEPENDENCIES/generic/include/boost/geometry/strategies/cartesian/centroid_average.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents f46d142149f5
children
rev   line source
Chris@102 1 // Boost.Geometry (aka GGL, Generic Geometry Library)
Chris@102 2
Chris@102 3 // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
Chris@102 4 // Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
Chris@102 5 // Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
Chris@102 6
Chris@102 7 // This file was modified by Oracle on 2015.
Chris@102 8 // Modifications copyright (c) 2015 Oracle and/or its affiliates.
Chris@102 9
Chris@102 10 // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
Chris@102 11
Chris@102 12 // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
Chris@102 13 // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
Chris@102 14
Chris@102 15 // Use, modification and distribution is subject to the Boost Software License,
Chris@102 16 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Chris@102 17 // http://www.boost.org/LICENSE_1_0.txt)
Chris@102 18
Chris@102 19 #ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_AVERAGE_HPP
Chris@102 20 #define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_AVERAGE_HPP
Chris@102 21
Chris@102 22
Chris@102 23 #include <cstddef>
Chris@102 24
Chris@102 25 #include <boost/geometry/algorithms/assign.hpp>
Chris@102 26 #include <boost/geometry/arithmetic/arithmetic.hpp>
Chris@102 27 #include <boost/geometry/core/coordinate_type.hpp>
Chris@102 28 #include <boost/geometry/core/point_type.hpp>
Chris@102 29 #include <boost/geometry/strategies/centroid.hpp>
Chris@102 30
Chris@102 31
Chris@102 32 namespace boost { namespace geometry
Chris@102 33 {
Chris@102 34
Chris@102 35 namespace strategy { namespace centroid
Chris@102 36 {
Chris@102 37
Chris@102 38
Chris@102 39 /*!
Chris@102 40 \brief Centroid calculation taking average of points
Chris@102 41 \ingroup strategies
Chris@102 42 */
Chris@102 43 template
Chris@102 44 <
Chris@102 45 typename PointCentroid,
Chris@102 46 typename Point = PointCentroid
Chris@102 47 >
Chris@102 48 class average
Chris@102 49 {
Chris@102 50 private :
Chris@102 51
Chris@102 52 /*! subclass to keep state */
Chris@102 53 class sum
Chris@102 54 {
Chris@102 55 friend class average;
Chris@102 56 std::size_t count;
Chris@102 57 PointCentroid centroid;
Chris@102 58
Chris@102 59 public :
Chris@102 60 inline sum()
Chris@102 61 : count(0)
Chris@102 62 {
Chris@102 63 assign_zero(centroid);
Chris@102 64 }
Chris@102 65 };
Chris@102 66
Chris@102 67 public :
Chris@102 68 typedef sum state_type;
Chris@102 69 typedef PointCentroid centroid_point_type;
Chris@102 70 typedef Point point_type;
Chris@102 71
Chris@102 72 static inline void apply(Point const& p, sum& state)
Chris@102 73 {
Chris@102 74 add_point(state.centroid, p);
Chris@102 75 state.count++;
Chris@102 76 }
Chris@102 77
Chris@102 78 static inline bool result(sum const& state, PointCentroid& centroid)
Chris@102 79 {
Chris@102 80 centroid = state.centroid;
Chris@102 81 if ( state.count > 0 )
Chris@102 82 {
Chris@102 83 divide_value(centroid, state.count);
Chris@102 84 return true;
Chris@102 85 }
Chris@102 86 return false;
Chris@102 87 }
Chris@102 88
Chris@102 89 };
Chris@102 90
Chris@102 91
Chris@102 92 #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
Chris@102 93
Chris@102 94
Chris@102 95 namespace services
Chris@102 96 {
Chris@102 97
Chris@102 98 template <typename Point, std::size_t DimensionCount, typename Geometry>
Chris@102 99 struct default_strategy
Chris@102 100 <
Chris@102 101 cartesian_tag,
Chris@102 102 pointlike_tag,
Chris@102 103 DimensionCount,
Chris@102 104 Point,
Chris@102 105 Geometry
Chris@102 106 >
Chris@102 107 {
Chris@102 108 typedef average
Chris@102 109 <
Chris@102 110 Point,
Chris@102 111 typename point_type<Geometry>::type
Chris@102 112 > type;
Chris@102 113 };
Chris@102 114
Chris@102 115 } // namespace services
Chris@102 116
Chris@102 117 #endif
Chris@102 118
Chris@102 119
Chris@102 120 }} // namespace strategy::centroid
Chris@102 121
Chris@102 122
Chris@102 123 }} // namespace boost::geometry
Chris@102 124
Chris@102 125
Chris@102 126 #endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_AVERAGE_HPP