diff options
Diffstat (limited to 'boost/geometry/views/detail/range_type.hpp')
-rw-r--r-- | boost/geometry/views/detail/range_type.hpp | 42 |
1 files changed, 35 insertions, 7 deletions
diff --git a/boost/geometry/views/detail/range_type.hpp b/boost/geometry/views/detail/range_type.hpp index a40670cf99..fff634c379 100644 --- a/boost/geometry/views/detail/range_type.hpp +++ b/boost/geometry/views/detail/range_type.hpp @@ -16,7 +16,7 @@ #include <boost/mpl/assert.hpp> -#include <boost/type_traits.hpp> +#include <boost/range/value_type.hpp> #include <boost/geometry/core/ring_type.hpp> #include <boost/geometry/core/tag.hpp> @@ -33,7 +33,8 @@ namespace dispatch { -template <typename GeometryTag, typename Geometry> +template <typename Geometry, + typename Tag = typename tag<Geometry>::type> struct range_type { BOOST_MPL_ASSERT_MSG @@ -45,31 +46,59 @@ struct range_type template <typename Geometry> -struct range_type<ring_tag, Geometry> +struct range_type<Geometry, ring_tag> { typedef Geometry type; }; + template <typename Geometry> -struct range_type<linestring_tag, Geometry> +struct range_type<Geometry, linestring_tag> { typedef Geometry type; }; template <typename Geometry> -struct range_type<polygon_tag, Geometry> +struct range_type<Geometry, polygon_tag> { typedef typename ring_type<Geometry>::type type; }; + template <typename Geometry> -struct range_type<box_tag, Geometry> +struct range_type<Geometry, box_tag> { typedef box_view<Geometry> type; }; +// multi-point acts itself as a range +template <typename Geometry> +struct range_type<Geometry, multi_point_tag> +{ + typedef Geometry type; +}; + + +template <typename Geometry> +struct range_type<Geometry, multi_linestring_tag> +{ + typedef typename boost::range_value<Geometry>::type type; +}; + + +template <typename Geometry> +struct range_type<Geometry, multi_polygon_tag> +{ + // Call its single-version + typedef typename dispatch::range_type + < + typename boost::range_value<Geometry>::type + >::type type; +}; + + } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH @@ -93,7 +122,6 @@ struct range_type { typedef typename dispatch::range_type < - typename tag<Geometry>::type, Geometry >::type type; }; |