summaryrefslogtreecommitdiff
path: root/boost/geometry/algorithms/detail/envelope/box.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/geometry/algorithms/detail/envelope/box.hpp')
-rw-r--r--boost/geometry/algorithms/detail/envelope/box.hpp148
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