mirror of
https://github.com/vdemydiuk/mtapi.git
synced 2026-08-17 04:38:10 +00:00
Added thirdparty: boost library
This commit is contained in:
+136
@@ -0,0 +1,136 @@
|
||||
// Boost.Geometry (aka GGL, Generic Geometry Library)
|
||||
|
||||
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
|
||||
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
|
||||
// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
|
||||
// Copyright (c) 2017-2023 Adam Wulkiewicz, Lodz, Poland.
|
||||
|
||||
// This file was modified by Oracle on 2015-2021.
|
||||
// Modifications copyright (c) 2015-2021 Oracle and/or its affiliates.
|
||||
|
||||
// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
|
||||
|
||||
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
|
||||
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
|
||||
|
||||
// Use, modification and distribution is subject to the Boost Software License,
|
||||
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
#ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_AVERAGE_HPP
|
||||
#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_AVERAGE_HPP
|
||||
|
||||
|
||||
#include <cstddef>
|
||||
|
||||
#include <boost/geometry/algorithms/assign.hpp>
|
||||
#include <boost/geometry/algorithms/detail/signed_size_type.hpp>
|
||||
#include <boost/geometry/arithmetic/arithmetic.hpp>
|
||||
#include <boost/geometry/core/coordinate_type.hpp>
|
||||
#include <boost/geometry/core/point_type.hpp>
|
||||
#include <boost/geometry/strategies/centroid.hpp>
|
||||
|
||||
|
||||
namespace boost { namespace geometry
|
||||
{
|
||||
|
||||
namespace strategy { namespace centroid
|
||||
{
|
||||
|
||||
|
||||
/*!
|
||||
\brief Centroid calculation taking average of points
|
||||
\ingroup strategies
|
||||
*/
|
||||
template
|
||||
<
|
||||
typename Ignored1 = void,
|
||||
typename Ignored2 = void
|
||||
>
|
||||
class average
|
||||
{
|
||||
private :
|
||||
|
||||
/*! subclass to keep state */
|
||||
template <typename GeometryPoint, typename ResultPoint>
|
||||
class sum
|
||||
{
|
||||
friend class average;
|
||||
signed_size_type count;
|
||||
ResultPoint centroid;
|
||||
|
||||
public :
|
||||
inline sum()
|
||||
: count(0)
|
||||
{
|
||||
assign_zero(centroid);
|
||||
}
|
||||
};
|
||||
|
||||
public :
|
||||
template <typename GeometryPoint, typename ResultPoint>
|
||||
struct state_type
|
||||
{
|
||||
typedef sum<GeometryPoint, ResultPoint> type;
|
||||
};
|
||||
|
||||
template <typename GeometryPoint, typename ResultPoint>
|
||||
static inline void apply(GeometryPoint const& p,
|
||||
sum<GeometryPoint, ResultPoint>& state)
|
||||
{
|
||||
add_point(state.centroid, p);
|
||||
state.count++;
|
||||
}
|
||||
|
||||
template <typename GeometryPoint, typename ResultPoint>
|
||||
static inline bool result(sum<GeometryPoint, ResultPoint> const& state,
|
||||
ResultPoint& centroid)
|
||||
{
|
||||
centroid = state.centroid;
|
||||
if ( state.count > 0 )
|
||||
{
|
||||
using coord_t = typename coordinate_type<ResultPoint>::type;
|
||||
divide_value(centroid, static_cast<coord_t>(state.count));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
|
||||
|
||||
|
||||
namespace services
|
||||
{
|
||||
|
||||
template <typename Point, std::size_t DimensionCount, typename Geometry>
|
||||
struct default_strategy
|
||||
<
|
||||
cartesian_tag,
|
||||
pointlike_tag,
|
||||
DimensionCount,
|
||||
Point,
|
||||
Geometry
|
||||
>
|
||||
{
|
||||
typedef average
|
||||
<
|
||||
Point,
|
||||
typename point_type<Geometry>::type
|
||||
> type;
|
||||
};
|
||||
|
||||
} // namespace services
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
}} // namespace strategy::centroid
|
||||
|
||||
|
||||
}} // namespace boost::geometry
|
||||
|
||||
|
||||
#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_AVERAGE_HPP
|
||||
Reference in New Issue
Block a user