/usr/include/boost/geometry/algorithms/detail
Edit: /usr/include/boost/geometry/algorithms/detail/assign_values.hpp (8957B)
// 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.
// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
// This file was modified by Oracle on 2018.
// Modifications copyright (c) 2018, Oracle and/or its affiliates.
// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
// 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_ALGORITHMS_ASSIGN_VALUES_HPP
#define BOOST_GEOMETRY_ALGORITHMS_ASSIGN_VALUES_HPP
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
namespace boost { namespace geometry
{
#ifndef DOXYGEN_NO_DETAIL
namespace detail { namespace assign
{
template
struct initialize
{
template
static inline void apply(Box& box, typename coordinate_type::type const& value)
{
geometry::set(box, value);
initialize::apply(box, value);
}
};
template
struct initialize
{
template
static inline void apply(Box&, typename coordinate_type::type const&)
{}
};
struct assign_zero_point
{
template
static inline void apply(Point& point)
{
geometry::assign_value(point, 0);
}
};
struct assign_inverse_box_or_segment
{
template
static inline void apply(BoxOrSegment& geometry)
{
typedef typename point_type::type point_type;
typedef typename coordinate_type::type bound_type;
initialize<0, 0, dimension::type::value>::apply(
geometry, geometry::bounds::highest()
);
initialize<1, 0, dimension::type::value>::apply(
geometry, geometry::bounds::lowest()
);
}
};
struct assign_zero_box_or_segment
{
template
static inline void apply(BoxOrSegment& geometry)
{
typedef typename coordinate_type::type coordinate_type;
initialize<0, 0, dimension::type::value>::apply(
geometry, coordinate_type()
);
initialize<1, 0, dimension::type::value>::apply(
geometry, coordinate_type()
);
}
};
template
<
std::size_t Corner1, std::size_t Corner2,
typename Box, typename Point
>
inline void assign_box_2d_corner(Box const& box, Point& point)
{
// Be sure both are 2-Dimensional
assert_dimension();
assert_dimension();
// Copy coordinates
typedef typename coordinate_type::type coordinate_type;
geometry::set<0>(point, boost::numeric_cast(get(box)));
geometry::set<1>(point, boost::numeric_cast(get(box)));
}
template
<
typename Geometry, typename Point,
std::size_t Index,
std::size_t Dimension, std::size_t DimensionCount
>
struct assign_point_to_index
{
static inline void apply(Point const& point, Geometry& geometry)
{
geometry::set(geometry, boost::numeric_cast
<
typename coordinate_type::type
>(geometry::get(point)));
assign_point_to_index
<
Geometry, Point, Index, Dimension + 1, DimensionCount
>::apply(point, geometry);
}
};
template
<
typename Geometry, typename Point,
std::size_t Index,
std::size_t DimensionCount
>
struct assign_point_to_index
<
Geometry, Point,
Index,
DimensionCount, DimensionCount
>
{
static inline void apply(Point const& , Geometry& )
{
}
};
template
<
typename Geometry, typename Point,
std::size_t Index,
std::size_t Dimension, std::size_t DimensionCount
>
struct assign_point_from_index
{
static inline void apply(Geometry const& geometry, Point& point)
{
geometry::set( point, boost::numeric_cast
<
typename coordinate_type::type
>(geometry::get(geometry)));
assign_point_from_index
<
Geometry, Point, Index, Dimension + 1, DimensionCount
>::apply(geometry, point);
}
};
template
<
typename Geometry, typename Point,
std::size_t Index,
std::size_t DimensionCount
>
struct assign_point_from_index
<
Geometry, Point,
Index,
DimensionCount, DimensionCount
>
{
static inline void apply(Geometry const&, Point&)
{
}
};
template
struct assign_2d_box_or_segment
{
typedef typename coordinate_type::type coordinate_type;
// Here we assign 4 coordinates to a box of segment
// -> Most logical is: x1,y1,x2,y2
// In case the user reverses x1/x2 or y1/y2, for a box, we could reverse them (THAT IS NOT IMPLEMENTED)
template
static inline void apply(Geometry& geometry,
Type const& x1, Type const& y1, Type const& x2, Type const& y2)
{
geometry::set<0, 0>(geometry, boost::numeric_cast(x1));
geometry::set<0, 1>(geometry, boost::numeric_cast(y1));
geometry::set<1, 0>(geometry, boost::numeric_cast(x2));
geometry::set<1, 1>(geometry, boost::numeric_cast(y2));
}
};
}} // namespace detail::assign
#endif // DOXYGEN_NO_DETAIL
#ifndef DOXYGEN_NO_DISPATCH
namespace dispatch
{
template
struct assign
{
BOOST_MPL_ASSERT_MSG
(
false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
, (types)
);
};
template
struct assign
{
typedef typename coordinate_type::type coordinate_type;
template
static inline void apply(Point& point, T const& c1, T const& c2)
{
set<0>(point, boost::numeric_cast(c1));
set<1>(point, boost::numeric_cast(c2));
}
};
template
struct assign
{
typedef typename coordinate_type::type coordinate_type;
template
static inline void apply(Point& point, T const& c1, T const& c2, T const& c3)
{
set<0>(point, boost::numeric_cast(c1));
set<1>(point, boost::numeric_cast(c2));
set<2>(point, boost::numeric_cast(c3));
}
};
template
struct assign
: detail::assign::assign_2d_box_or_segment
{};
template
struct assign
: detail::assign::assign_2d_box_or_segment
{};
template
struct assign_zero {};
template
struct assign_zero
: detail::assign::assign_zero_point
{};
template
struct assign_zero
: detail::assign::assign_zero_box_or_segment
{};
template
struct assign_zero
: detail::assign::assign_zero_box_or_segment
{};
template
struct assign_inverse {};
template
struct assign_inverse
: detail::assign::assign_inverse_box_or_segment
{};
template
struct assign_inverse
: detail::assign::assign_inverse_box_or_segment
{};
} // namespace dispatch
#endif // DOXYGEN_NO_DISPATCH
}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_ALGORITHMS_ASSIGN_VALUES_HPP