From ee1e0e0899e92084aabd20faa413c850d9e9cd52 Mon Sep 17 00:00:00 2001 From: Menelaos Karavelas Date: Sat, 7 Mar 2015 17:34:17 +0200 Subject: [PATCH] [algorithms][detail][partition] remove the forward range(s) argument(s) --- .../geometry/algorithms/detail/partition.hpp | 214 ++++++------------ 1 file changed, 66 insertions(+), 148 deletions(-) diff --git a/include/boost/geometry/algorithms/detail/partition.hpp b/include/boost/geometry/algorithms/detail/partition.hpp index 8408c38fc..8b19add47 100644 --- a/include/boost/geometry/algorithms/detail/partition.hpp +++ b/include/boost/geometry/algorithms/detail/partition.hpp @@ -47,16 +47,9 @@ inline void divide_box(Box const& box, Box& lower_box, Box& upper_box) // Divide forward_range into three subsets: lower, upper and oversized // (not-fitting) // (lower == left or bottom, upper == right or top) -template -< - typename OverlapsPolicy, - typename ForwardRange, - typename Box, - typename IteratorVector -> +template inline void divide_into_subsets(Box const& lower_box, Box const& upper_box, - ForwardRange const& /*forward_range*/, IteratorVector const& input, IteratorVector& lower, IteratorVector& upper, @@ -96,12 +89,9 @@ template < typename ExpandPolicy, typename Box, - typename ForwardRange, typename IteratorVector > -inline void expand_with_elements(Box& total, - ForwardRange const& /*forward_range*/, - IteratorVector const& input) +inline void expand_with_elements(Box& total, IteratorVector const& input) { typedef typename boost::range_iterator::type it_type; for(it_type it = boost::begin(input); it != boost::end(input); ++it) @@ -112,15 +102,8 @@ inline void expand_with_elements(Box& total, // Match forward_range with itself -template -< - typename ForwardRange, - typename Policy, - typename IteratorVector -> -inline void handle_one(ForwardRange const& /*forward_range*/, - IteratorVector const& input, - Policy& policy) +template +inline void handle_one(IteratorVector const& input, Policy& policy) { if (boost::size(input) == 0) { @@ -143,15 +126,12 @@ inline void handle_one(ForwardRange const& /*forward_range*/, // Match forward range 1 with forward range 2 template < - typename ForwardRange1, - typename ForwardRange2, typename Policy, typename IteratorVector1, typename IteratorVector2 > -inline void handle_two( - ForwardRange1 const& /*forward_range1*/, IteratorVector1 const& input1, - ForwardRange2 const& /*forward_range2*/, IteratorVector2 const& input2, +inline void handle_two(IteratorVector1 const& input1, + IteratorVector2 const& input2, Policy& policy) { typedef typename boost::range_iterator @@ -237,24 +217,17 @@ template > class partition_one_range { - template - static inline Box get_new_box(ForwardRange const& forward_range, - IteratorVector const& input) + template + static inline Box get_new_box(IteratorVector const& input) { Box box; geometry::assign_inverse(box); - expand_with_elements(box, forward_range, input); + expand_with_elements(box, input); return box; } - template - < - typename ForwardRange, - typename Policy, - typename IteratorVector - > + template static inline void next_level(Box const& box, - ForwardRange const& forward_range, IteratorVector const& input, std::size_t level, std::size_t min_elements, Policy& policy, VisitBoxPolicy& box_policy) @@ -268,25 +241,18 @@ class partition_one_range OverlapsPolicy, ExpandPolicy, VisitBoxPolicy - >::apply(box, forward_range, input, - level + 1, min_elements, policy, box_policy); + >::apply(box, input, level + 1, min_elements, policy, box_policy); } else { - handle_one(forward_range, input, policy); + handle_one(input, policy); } } // Function to switch to two forward ranges if there are // geometries exceeding the separation line - template - < - typename ForwardRange, - typename Policy, - typename IteratorVector - > + template static inline void next_level2(Box const& box, - ForwardRange const& forward_range, IteratorVector const& input1, IteratorVector const& input2, std::size_t level, std::size_t min_elements, @@ -301,24 +267,18 @@ class partition_one_range OverlapsPolicy, OverlapsPolicy, ExpandPolicy, ExpandPolicy, VisitBoxPolicy - >::apply(box, forward_range, input1, forward_range, input2, - level + 1, min_elements, policy, box_policy); + >::apply(box, input1, input2, level + 1, min_elements, + policy, box_policy); } else { - handle_two(forward_range, input1, forward_range, input2, policy); + handle_two(input1, input2, policy); } } public : - template - < - typename ForwardRange, - typename Policy, - typename IteratorVector - > + template static inline void apply(Box const& box, - ForwardRange const& forward_range, IteratorVector const& input, std::size_t level, std::size_t min_elements, @@ -330,32 +290,30 @@ public : divide_box(box, lower_box, upper_box); IteratorVector lower, upper, exceeding; - divide_into_subsets(lower_box, upper_box, forward_range, + divide_into_subsets(lower_box, upper_box, input, lower, upper, exceeding); if (boost::size(exceeding) > 0) { // Get the box of exceeding-only - Box exceeding_box = get_new_box(forward_range, exceeding); + Box exceeding_box = get_new_box(exceeding); // Recursively do exceeding elements only, in next dimension they // will probably be less exceeding within the new box - next_level(exceeding_box, forward_range, exceeding, level, - min_elements, policy, box_policy); + next_level(exceeding_box, exceeding, level, min_elements, + policy, box_policy); // Switch to two forward ranges, combine exceeding with // lower resp upper, but not lower/lower, upper/upper - next_level2(exceeding_box, forward_range, exceeding, lower, level, - min_elements, policy, box_policy); - next_level2(exceeding_box, forward_range, exceeding, upper, level, - min_elements, policy, box_policy); + next_level2(exceeding_box, exceeding, lower, level, min_elements, + policy, box_policy); + next_level2(exceeding_box, exceeding, upper, level, min_elements, + policy, box_policy); } // Recursively call operation both parts - next_level(lower_box, forward_range, lower, level, min_elements, - policy, box_policy); - next_level(upper_box, forward_range, upper, level, min_elements, - policy, box_policy); + next_level(lower_box, lower, level, min_elements, policy, box_policy); + next_level(upper_box, upper, level, min_elements, policy, box_policy); } }; @@ -373,16 +331,12 @@ class partition_two_ranges { template < - typename ForwardRange1, - typename ForwardRange2, typename Policy, typename IteratorVector1, typename IteratorVector2 > static inline void next_level(Box const& box, - ForwardRange1 const& forward_range1, IteratorVector1 const& input1, - ForwardRange2 const& forward_range2, IteratorVector2 const& input2, std::size_t level, std::size_t min_elements, Policy& policy, VisitBoxPolicy& box_policy) @@ -396,56 +350,37 @@ class partition_two_ranges ExpandPolicy1, ExpandPolicy2, VisitBoxPolicy - >::apply(box, forward_range1, input1, forward_range2, input2, - level + 1, min_elements, - policy, box_policy); + >::apply(box, input1, input2, level + 1, min_elements, + policy, box_policy); } - template - < - typename ExpandPolicy, - typename ForwardRange, - typename IteratorVector - > - static inline Box get_new_box(ForwardRange const& forward_range, - IteratorVector const& input) + template + static inline Box get_new_box(IteratorVector const& input) { Box box; geometry::assign_inverse(box); - expand_with_elements(box, forward_range, input); + expand_with_elements(box, input); return box; } - template - < - typename ForwardRange1, - typename ForwardRange2, - typename IteratorVector1, - typename IteratorVector2 - > - static inline Box get_new_box(ForwardRange1 const& forward_range1, - IteratorVector1 const& input1, - ForwardRange2 const& forward_range2, + template + static inline Box get_new_box(IteratorVector1 const& input1, IteratorVector2 const& input2) { - Box box = get_new_box(forward_range1, input1); - expand_with_elements(box, forward_range2, input2); + Box box = get_new_box(input1); + expand_with_elements(box, input2); return box; } public : template < - typename ForwardRange1, - typename ForwardRange2, typename Policy, typename IteratorVector1, typename IteratorVector2 > static inline void apply(Box const& box, - ForwardRange1 const& forward_range1, IteratorVector1 const& input1, - ForwardRange2 const& forward_range2, IteratorVector2 const& input2, std::size_t level, std::size_t min_elements, @@ -459,9 +394,9 @@ public : IteratorVector1 lower1, upper1, exceeding1; IteratorVector2 lower2, upper2, exceeding2; divide_into_subsets(lower_box, upper_box, - forward_range1, input1, lower1, upper1, exceeding1); + input1, lower1, upper1, exceeding1); divide_into_subsets(lower_box, upper_box, - forward_range2, input2, lower2, upper2, exceeding2); + input2, lower2, upper2, exceeding2); if (boost::size(exceeding1) > 0) { @@ -469,16 +404,13 @@ public : if (recurse_ok(exceeding1, exceeding2, min_elements, level)) { - Box exceeding_box = get_new_box(forward_range1, exceeding1, - forward_range2, exceeding2); - next_level(exceeding_box, forward_range1, exceeding1, - forward_range2, exceeding2, level, - min_elements, policy, box_policy); + Box exceeding_box = get_new_box(exceeding1, exceeding2); + next_level(exceeding_box, exceeding1, exceeding2, level, + min_elements, policy, box_policy); } else { - handle_two(forward_range1, exceeding1, forward_range2, - exceeding2, policy); + handle_two(exceeding1, exceeding2, policy); } // All exceeding from 1 with lower and upper of 2: @@ -487,21 +419,16 @@ public : // the same combinations again and again) if (recurse_ok(lower2, upper2, exceeding1, min_elements, level)) { - Box exceeding_box - = get_new_box(forward_range1, exceeding1); - next_level(exceeding_box, forward_range1, exceeding1, - forward_range2, lower2, level, min_elements, - policy, box_policy); - next_level(exceeding_box, forward_range1, exceeding1, - forward_range2, upper2, level, min_elements, - policy, box_policy); + Box exceeding_box = get_new_box(exceeding1); + next_level(exceeding_box, exceeding1, lower2, level, + min_elements, policy, box_policy); + next_level(exceeding_box, exceeding1, upper2, level, + min_elements, policy, box_policy); } else { - handle_two(forward_range1, exceeding1, forward_range2, lower2, - policy); - handle_two(forward_range1, exceeding1, forward_range2, upper2, - policy); + handle_two(exceeding1, lower2, policy); + handle_two(exceeding1, upper2, policy); } } @@ -510,43 +437,36 @@ public : // All exceeding from 2 with lower and upper of 1: if (recurse_ok(lower1, upper1, exceeding2, min_elements, level)) { - Box exceeding_box - = get_new_box(forward_range2, exceeding2); - next_level(exceeding_box, forward_range1, lower1, - forward_range2, exceeding2, level, min_elements, - policy, box_policy); - next_level(exceeding_box, forward_range1, upper1, - forward_range2, exceeding2, level, min_elements, - policy, box_policy); + Box exceeding_box = get_new_box(exceeding2); + next_level(exceeding_box, lower1, exceeding2, level, + min_elements, policy, box_policy); + next_level(exceeding_box, upper1, exceeding2, level, + min_elements, policy, box_policy); } else { - handle_two(forward_range1, lower1, forward_range2, exceeding2, - policy); - handle_two(forward_range1, upper1, forward_range2, exceeding2, - policy); + handle_two(lower1, exceeding2, policy); + handle_two(upper1, exceeding2, policy); } } if (recurse_ok(lower1, lower2, min_elements, level)) { - next_level(lower_box, forward_range1, lower1, - forward_range2, lower2, level, - min_elements, policy, box_policy); + next_level(lower_box, lower1, lower2, level, + min_elements, policy, box_policy); } else { - handle_two(forward_range1, lower1, forward_range2, lower2, policy); + handle_two(lower1, lower2, policy); } if (recurse_ok(upper1, upper2, min_elements, level)) { - next_level(upper_box, forward_range1, upper1, - forward_range2, upper2, level, - min_elements, policy, box_policy); + next_level(upper_box, upper1, upper2, level, + min_elements, policy, box_policy); } else { - handle_two(forward_range1, upper1, forward_range2, upper2, policy); + handle_two(upper1, upper2, policy); } } }; @@ -633,8 +553,8 @@ public : OverlapsPolicy1, ExpandPolicy1, VisitBoxPolicy - >::apply(total, forward_range, iterator_vector, 0, min_elements, - visitor, box_visitor); + >::apply(total, iterator_vector, 0, min_elements, + visitor, box_visitor); } else { @@ -691,10 +611,8 @@ public : < 0, Box, OverlapsPolicy1, OverlapsPolicy2, ExpandPolicy1, ExpandPolicy2, VisitBoxPolicy - >::apply(total, - forward_range1, iterator_vector1, - forward_range2, iterator_vector2, - 0, min_elements, visitor, box_visitor); + >::apply(total, iterator_vector1, iterator_vector2, + 0, min_elements, visitor, box_visitor); } else {