mirror of
https://github.com/boostorg/geometry.git
synced 2026-02-10 11:32:15 +00:00
Made dispatch::reverse able to find the tag by itself.
[SVN r81077]
This commit is contained in:
@@ -32,9 +32,9 @@ namespace detail { namespace reverse
|
||||
{
|
||||
|
||||
|
||||
template <typename Range>
|
||||
struct range_reverse
|
||||
{
|
||||
template <typename Range>
|
||||
static inline void apply(Range& range)
|
||||
{
|
||||
std::reverse(boost::begin(range), boost::end(range));
|
||||
@@ -42,21 +42,20 @@ struct range_reverse
|
||||
};
|
||||
|
||||
|
||||
template <typename Polygon>
|
||||
struct polygon_reverse
|
||||
struct polygon_reverse: private range_reverse
|
||||
{
|
||||
template <typename Polygon>
|
||||
static inline void apply(Polygon& polygon)
|
||||
{
|
||||
typedef typename geometry::ring_type<Polygon>::type ring_type;
|
||||
|
||||
typedef range_reverse<ring_type> per_range;
|
||||
per_range::apply(exterior_ring(polygon));
|
||||
range_reverse::apply(exterior_ring(polygon));
|
||||
|
||||
typename interior_return_type<Polygon>::type rings
|
||||
= interior_rings(polygon);
|
||||
for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it)
|
||||
{
|
||||
per_range::apply(*it);
|
||||
range_reverse::apply(*it);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -71,11 +70,7 @@ namespace dispatch
|
||||
{
|
||||
|
||||
|
||||
template
|
||||
<
|
||||
typename Tag,
|
||||
typename Geometry
|
||||
>
|
||||
template <typename Geometry, typename Tag = typename tag<Geometry>::type>
|
||||
struct reverse
|
||||
{
|
||||
static inline void apply(Geometry&)
|
||||
@@ -84,20 +79,20 @@ struct reverse
|
||||
|
||||
|
||||
template <typename Ring>
|
||||
struct reverse<ring_tag, Ring>
|
||||
: detail::reverse::range_reverse<Ring>
|
||||
struct reverse<Ring, ring_tag>
|
||||
: detail::reverse::range_reverse
|
||||
{};
|
||||
|
||||
|
||||
template <typename LineString>
|
||||
struct reverse<linestring_tag, LineString>
|
||||
: detail::reverse::range_reverse<LineString>
|
||||
struct reverse<LineString, linestring_tag>
|
||||
: detail::reverse::range_reverse
|
||||
{};
|
||||
|
||||
|
||||
template <typename Polygon>
|
||||
struct reverse<polygon_tag, Polygon>
|
||||
: detail::reverse::polygon_reverse<Polygon>
|
||||
struct reverse<Polygon, polygon_tag>
|
||||
: detail::reverse::polygon_reverse
|
||||
{};
|
||||
|
||||
|
||||
@@ -121,11 +116,7 @@ inline void reverse(Geometry& geometry)
|
||||
{
|
||||
concept::check<Geometry>();
|
||||
|
||||
dispatch::reverse
|
||||
<
|
||||
typename tag<Geometry>::type,
|
||||
Geometry
|
||||
>::apply(geometry);
|
||||
dispatch::reverse<Geometry>::apply(geometry);
|
||||
}
|
||||
|
||||
}} // namespace boost::geometry
|
||||
|
||||
@@ -34,27 +34,21 @@ namespace dispatch
|
||||
|
||||
|
||||
template <typename Geometry>
|
||||
struct reverse<multi_linestring_tag, Geometry>
|
||||
struct reverse<Geometry, multi_linestring_tag>
|
||||
: detail::multi_modify
|
||||
<
|
||||
Geometry,
|
||||
detail::reverse::range_reverse
|
||||
<
|
||||
typename boost::range_value<Geometry>::type
|
||||
>
|
||||
>
|
||||
{};
|
||||
|
||||
|
||||
template <typename Geometry>
|
||||
struct reverse<multi_polygon_tag, Geometry>
|
||||
struct reverse<Geometry, multi_polygon_tag>
|
||||
: detail::multi_modify
|
||||
<
|
||||
Geometry,
|
||||
detail::reverse::polygon_reverse
|
||||
<
|
||||
typename boost::range_value<Geometry>::type
|
||||
>
|
||||
>
|
||||
{};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user