From 9cd61fb3cdf06eaa8cd9290ab48e745518675fa4 Mon Sep 17 00:00:00 2001 From: Bruno Lalande Date: Tue, 5 Jun 2012 16:47:37 +0000 Subject: [PATCH] Moved template params from class to function level in dispatch::envelope for those we don't actually dispatch on. [SVN r78813] --- .../boost/geometry/algorithms/envelope.hpp | 120 ++++-------------- .../geometry/multi/algorithms/envelope.hpp | 34 ++--- 2 files changed, 37 insertions(+), 117 deletions(-) diff --git a/include/boost/geometry/algorithms/envelope.hpp b/include/boost/geometry/algorithms/envelope.hpp index da34f6a78..c9f4348bf 100644 --- a/include/boost/geometry/algorithms/envelope.hpp +++ b/include/boost/geometry/algorithms/envelope.hpp @@ -35,9 +35,9 @@ namespace detail { namespace envelope /// Calculate envelope of an 2D or 3D segment -template struct envelope_expand_one { + template static inline void apply(Geometry const& geometry, Box& mbr) { assign_inverse(mbr); @@ -63,10 +63,10 @@ inline void envelope_range_additional(Range const& range, Box& mbr) /// Generic range dispatching struct -template struct envelope_range { /// Calculate envelope of range using a strategy + template static inline void apply(Range const& range, Box& mbr) { assign_inverse(mbr); @@ -88,9 +88,8 @@ namespace dispatch template < - typename Tag1, typename Tag2, - typename Geometry, typename Box, - typename StrategyLess, typename StrategyGreater + typename Geometry, + typename Tag1 = typename tag::type > struct envelope { @@ -102,102 +101,45 @@ struct envelope }; -template -< - typename Point, typename Box, - typename StrategyLess, typename StrategyGreater -> -struct envelope - < - point_tag, box_tag, - Point, Box, - StrategyLess, StrategyGreater - > - : detail::envelope::envelope_expand_one +template +struct envelope + : detail::envelope::envelope_expand_one {}; -template -< - typename BoxIn, typename BoxOut, - typename StrategyLess, typename StrategyGreater -> -struct envelope - < - box_tag, box_tag, - BoxIn, BoxOut, - StrategyLess, StrategyGreater - > - : detail::envelope::envelope_expand_one +template +struct envelope + : detail::envelope::envelope_expand_one {}; -template -< - typename Segment, typename Box, - typename StrategyLess, typename StrategyGreater -> -struct envelope - < - segment_tag, box_tag, - Segment, Box, - StrategyLess, StrategyGreater - > - : detail::envelope::envelope_expand_one +template +struct envelope + : detail::envelope::envelope_expand_one {}; -template -< - typename Linestring, typename Box, - typename StrategyLess, typename StrategyGreater -> -struct envelope - < - linestring_tag, box_tag, - Linestring, Box, - StrategyLess, StrategyGreater - > - : detail::envelope::envelope_range +template +struct envelope + : detail::envelope::envelope_range {}; -template -< - typename Ring, typename Box, - typename StrategyLess, typename StrategyGreater -> -struct envelope - < - ring_tag, box_tag, - Ring, Box, - StrategyLess, StrategyGreater - > - : detail::envelope::envelope_range +template +struct envelope + : detail::envelope::envelope_range {}; -template -< - typename Polygon, typename Box, - typename StrategyLess, typename StrategyGreater -> -struct envelope - < - polygon_tag, box_tag, - Polygon, Box, - StrategyLess, StrategyGreater - > +template +struct envelope + : detail::envelope::envelope_range { + template static inline void apply(Polygon const& poly, Box& mbr) { // For polygon, inspecting outer ring is sufficient - - detail::envelope::envelope_range - < - typename ring_type::type, - Box - >::apply(exterior_ring(poly), mbr); + detail::envelope::envelope_range::apply(exterior_ring(poly), mbr); } }; @@ -228,12 +170,7 @@ inline void envelope(Geometry const& geometry, Box& mbr) concept::check(); concept::check(); - dispatch::envelope - < - typename tag::type, typename tag::type, - Geometry, Box, - void, void - >::apply(geometry, mbr); + dispatch::envelope::apply(geometry, mbr); } @@ -259,12 +196,7 @@ inline Box return_envelope(Geometry const& geometry) concept::check(); Box mbr; - dispatch::envelope - < - typename tag::type, typename tag::type, - Geometry, Box, - void, void - >::apply(geometry, mbr); + dispatch::envelope::apply(geometry, mbr); return mbr; } diff --git a/include/boost/geometry/multi/algorithms/envelope.hpp b/include/boost/geometry/multi/algorithms/envelope.hpp index 1876b5f91..026fc71e6 100644 --- a/include/boost/geometry/multi/algorithms/envelope.hpp +++ b/include/boost/geometry/multi/algorithms/envelope.hpp @@ -34,9 +34,9 @@ namespace detail { namespace envelope { -template struct envelope_multi_linestring { + template static inline void apply(MultiLinestring const& mp, Box& mbr) { assign_inverse(mbr); @@ -52,9 +52,9 @@ struct envelope_multi_linestring // version for multi_polygon: outer ring's of all polygons -template struct envelope_multi_polygon { + template static inline void apply(MultiPolygon const& mp, Box& mbr) { assign_inverse(mbr); @@ -78,32 +78,20 @@ struct envelope_multi_polygon namespace dispatch { -template -< - typename Multi, typename Box, - typename StrategyLess, typename StrategyGreater -> -struct envelope - : detail::envelope::envelope_range +template +struct envelope + : detail::envelope::envelope_range {}; -template -< - typename Multi, typename Box, - typename StrategyLess, typename StrategyGreater -> -struct envelope - : detail::envelope::envelope_multi_linestring +template +struct envelope + : detail::envelope::envelope_multi_linestring {}; -template -< - typename Multi, typename Box, - typename StrategyLess, typename StrategyGreater -> -struct envelope - : detail::envelope::envelope_multi_polygon +template +struct envelope + : detail::envelope::envelope_multi_polygon {};