/usr/include/boost/geometry/algorithms/detail
Edit: /usr/include/boost/geometry/algorithms/detail/expand_by_epsilon.hpp (3880B)
// Boost.Geometry
// Copyright (c) 2015-2019, Oracle and/or its affiliates.
// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
// Distributed under 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_ALGORITHMS_DETAIL_EXPAND_EXPAND_BY_EPSILON_HPP
#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_EXPAND_BY_EPSILON_HPP
#include
#include
#include
#include
#include
#include
#include
#include
namespace boost { namespace geometry
{
#ifndef DOXYGEN_NO_DETAIL
namespace detail { namespace expand
{
template
<
typename Point,
template class PlusOrMinus,
std::size_t I = 0,
std::size_t D = dimension::value
>
struct corner_by_epsilon
{
static inline void apply(Point & point)
{
typedef typename coordinate_type::type coord_type;
coord_type const coord = get(point);
coord_type const seps = math::scaled_epsilon(coord);
set(point, PlusOrMinus()(coord, seps));
corner_by_epsilon::apply(point);
}
static inline void apply(Point & point,
typename coordinate_type::type const& eps)
{
typedef typename coordinate_type::type coord_type;
coord_type const coord = get(point);
coord_type const seps = math::scaled_epsilon(coord, eps);
set(point, PlusOrMinus()(coord, seps));
corner_by_epsilon::apply(point);
}
};
template
<
typename Point,
template class PlusOrMinus,
std::size_t D
>
struct corner_by_epsilon
{
static inline void apply(Point const&) {}
static inline void apply(Point const&, typename coordinate_type::type const&) {}
};
template
<
typename Box,
bool Enable = ! boost::is_integral::type>::value
>
struct expand_by_epsilon
{
static inline void apply(Box & box)
{
typedef detail::indexed_point_view min_type;
min_type min_point(box);
corner_by_epsilon::apply(min_point);
typedef detail::indexed_point_view max_type;
max_type max_point(box);
corner_by_epsilon::apply(max_point);
}
static inline void apply(Box & box,
typename coordinate_type::type const& eps)
{
typedef detail::indexed_point_view min_type;
min_type min_point(box);
corner_by_epsilon::apply(min_point, eps);
typedef detail::indexed_point_view max_type;
max_type max_point(box);
corner_by_epsilon::apply(max_point, eps);
}
};
template
struct expand_by_epsilon
{
static inline void apply(Box &) {}
static inline void apply(Box &, typename coordinate_type::type const&) {}
};
} // namespace expand
template
inline void expand_by_epsilon(Box & box)
{
expand::expand_by_epsilon::apply(box);
}
template
inline void expand_by_epsilon(Box & box,
typename coordinate_type::type const& eps)
{
expand::expand_by_epsilon::apply(box, eps);
}
} // namespace detail
#endif // DOXYGEN_NO_DETAIL
}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_EXPAND_BY_EPSILON_HPP