$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r80665 - in trunk/boost/geometry: algorithms multi/algorithms
From: bruno.lalande_at_[hidden]
Date: 2012-09-23 08:30:51
Author: bruno.lalande
Date: 2012-09-23 08:30:51 EDT (Sun, 23 Sep 2012)
New Revision: 80665
URL: http://svn.boost.org/trac/boost/changeset/80665
Log:
Made dispatch::perimeter able to retrieve the tag by itself.
Text files modified: 
   trunk/boost/geometry/algorithms/perimeter.hpp       |    18 +++++-------------                      
   trunk/boost/geometry/multi/algorithms/perimeter.hpp |     8 ++------                                
   2 files changed, 7 insertions(+), 19 deletions(-)
Modified: trunk/boost/geometry/algorithms/perimeter.hpp
==============================================================================
--- trunk/boost/geometry/algorithms/perimeter.hpp	(original)
+++ trunk/boost/geometry/algorithms/perimeter.hpp	2012-09-23 08:30:51 EDT (Sun, 23 Sep 2012)
@@ -33,7 +33,7 @@
 {
 
 // Default perimeter is 0.0, specializations implement calculated values
-template <typename Tag, typename Geometry>
+template <typename Geometry, typename Tag = typename tag<Geometry>::type>
 struct perimeter : detail::calculate_null
 {
     typedef typename default_length_result<Geometry>::type return_type;
@@ -46,7 +46,7 @@
 };
 
 template <typename Geometry>
-struct perimeter<ring_tag, Geometry>
+struct perimeter<Geometry, ring_tag>
     : detail::length::range_length
         <
             Geometry,
@@ -55,7 +55,7 @@
 {};
 
 template <typename Polygon>
-struct perimeter<polygon_tag, Polygon> : detail::calculate_polygon_sum
+struct perimeter<Polygon, polygon_tag> : detail::calculate_polygon_sum
 {
     typedef typename default_length_result<Polygon>::type return_type;
     typedef detail::length::range_length
@@ -103,11 +103,7 @@
 
     // detail::throw_on_empty_input(geometry);
         
-    return dispatch::perimeter
-        <
-            typename tag<Geometry>::type,
-            Geometry
-        >::apply(geometry, strategy_type());
+    return dispatch::perimeter<Geometry>::apply(geometry, strategy_type());
 }
 
 /*!
@@ -132,11 +128,7 @@
 
     // detail::throw_on_empty_input(geometry);
     
-    return dispatch::perimeter
-        <
-            typename tag<Geometry>::type,
-            Geometry
-        >::apply(geometry, strategy);
+    return dispatch::perimeter<Geometry>::apply(geometry, strategy);
 }
 
 }} // namespace boost::geometry
Modified: trunk/boost/geometry/multi/algorithms/perimeter.hpp
==============================================================================
--- trunk/boost/geometry/multi/algorithms/perimeter.hpp	(original)
+++ trunk/boost/geometry/multi/algorithms/perimeter.hpp	2012-09-23 08:30:51 EDT (Sun, 23 Sep 2012)
@@ -31,7 +31,7 @@
 namespace dispatch
 {
 template <typename MultiPolygon>
-struct perimeter<multi_polygon_tag, MultiPolygon> : detail::multi_sum
+struct perimeter<MultiPolygon, multi_polygon_tag> : detail::multi_sum
 {
     template <typename Strategy>
     static inline typename default_length_result<MultiPolygon>::type
@@ -40,11 +40,7 @@
         return multi_sum::apply
                <
                    typename default_length_result<MultiPolygon>::type,
-                   perimeter
-                   <
-                       polygon_tag,
-                       typename boost::range_value<MultiPolygon>::type
-                   >
+                   perimeter<typename boost::range_value<MultiPolygon>::type>
                >(multi, strategy);
     }
 };