diff options
Diffstat (limited to 'boost/geometry/algorithms/detail/envelope/box.hpp')
-rw-r--r-- | boost/geometry/algorithms/detail/envelope/box.hpp | 148 |
1 files changed, 9 insertions, 139 deletions
diff --git a/boost/geometry/algorithms/detail/envelope/box.hpp b/boost/geometry/algorithms/detail/envelope/box.hpp index cf039a292a..b085a14b9d 100644 --- a/boost/geometry/algorithms/detail/envelope/box.hpp +++ b/boost/geometry/algorithms/detail/envelope/box.hpp @@ -18,164 +18,34 @@ #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_BOX_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_BOX_HPP -#include <cstddef> -#include <boost/geometry/core/cs.hpp> -#include <boost/geometry/core/coordinate_dimension.hpp> -#include <boost/geometry/core/coordinate_system.hpp> #include <boost/geometry/core/tags.hpp> -#include <boost/geometry/views/detail/indexed_point_view.hpp> - -#include <boost/geometry/algorithms/detail/convert_point_to_point.hpp> -#include <boost/geometry/algorithms/detail/normalize.hpp> -#include <boost/geometry/algorithms/detail/envelope/transform_units.hpp> - -#include <boost/geometry/algorithms/dispatch/envelope.hpp> +// For backward compatibility +#include <boost/geometry/strategies/cartesian/envelope_box.hpp> +#include <boost/geometry/strategies/spherical/envelope_box.hpp> namespace boost { namespace geometry { -#ifndef DOXYGEN_NO_DETAIL -namespace detail { namespace envelope -{ - - -template -< - std::size_t Index, - std::size_t Dimension, - std::size_t DimensionCount -> -struct envelope_indexed_box -{ - template <typename BoxIn, typename BoxOut> - static inline void apply(BoxIn const& box_in, BoxOut& mbr) - { - detail::indexed_point_view<BoxIn const, Index> box_in_corner(box_in); - detail::indexed_point_view<BoxOut, Index> mbr_corner(mbr); - - detail::conversion::point_to_point - < - detail::indexed_point_view<BoxIn const, Index>, - detail::indexed_point_view<BoxOut, Index>, - Dimension, - DimensionCount - >::apply(box_in_corner, mbr_corner); - } -}; -template -< - std::size_t Index, - std::size_t DimensionCount -> -struct envelope_indexed_box_on_spheroid +#ifndef DOXYGEN_NO_DISPATCH +namespace dispatch { - template <typename BoxIn, typename BoxOut> - static inline void apply(BoxIn const& box_in, BoxOut& mbr) - { - // transform() does not work with boxes of dimension higher - // than 2; to account for such boxes we transform the min/max - // points of the boxes using the indexed_point_view - detail::indexed_point_view<BoxIn const, Index> box_in_corner(box_in); - detail::indexed_point_view<BoxOut, Index> mbr_corner(mbr); - - // first transform the units - transform_units(box_in_corner, mbr_corner); - - // now transform the remaining coordinates - detail::conversion::point_to_point - < - detail::indexed_point_view<BoxIn const, Index>, - detail::indexed_point_view<BoxOut, Index>, - 2, - DimensionCount - >::apply(box_in_corner, mbr_corner); - } -}; -struct envelope_box +template <typename Box> +struct envelope<Box, box_tag> { template<typename BoxIn, typename BoxOut, typename Strategy> - static inline void apply(BoxIn const& box_in, - BoxOut& mbr, - Strategy const&) + static inline void apply(BoxIn const& box_in, BoxOut& mbr, Strategy const& ) { - envelope_indexed_box - < - min_corner, 0, dimension<BoxIn>::value - >::apply(box_in, mbr); - - envelope_indexed_box - < - max_corner, 0, dimension<BoxIn>::value - >::apply(box_in, mbr); + Strategy::apply(box_in, mbr); } }; -struct envelope_box_on_spheroid -{ - template <typename BoxIn, typename BoxOut, typename Strategy> - static inline void apply(BoxIn const& box_in, - BoxOut& mbr, - Strategy const&) - { - BoxIn box_in_normalized = box_in; - - if (!is_inverse_spheroidal_coordinates(box_in)) - { - box_in_normalized = detail::return_normalized<BoxIn>(box_in); - } - - envelope_indexed_box_on_spheroid - < - min_corner, dimension<BoxIn>::value - >::apply(box_in_normalized, mbr); - - envelope_indexed_box_on_spheroid - < - max_corner, dimension<BoxIn>::value - >::apply(box_in_normalized, mbr); - } -}; - - -}} // namespace detail::envelope -#endif // DOXYGEN_NO_DETAIL - -#ifndef DOXYGEN_NO_DISPATCH -namespace dispatch -{ - - -template <typename Box> -struct envelope<Box, box_tag, cartesian_tag> - : detail::envelope::envelope_box -{}; - - -template <typename Box> -struct envelope<Box, box_tag, spherical_polar_tag> - : detail::envelope::envelope_box_on_spheroid -{}; - - -template <typename Box> -struct envelope<Box, box_tag, spherical_equatorial_tag> - : detail::envelope::envelope_box_on_spheroid -{}; - - -template <typename Box> -struct envelope<Box, box_tag, geographic_tag> - : detail::envelope::envelope_box_on_spheroid -{}; - - } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH |