diff options
Diffstat (limited to 'boost/geometry/algorithms/difference.hpp')
-rw-r--r-- | boost/geometry/algorithms/difference.hpp | 42 |
1 files changed, 17 insertions, 25 deletions
diff --git a/boost/geometry/algorithms/difference.hpp b/boost/geometry/algorithms/difference.hpp index c11ceca243..7a96e130dc 100644 --- a/boost/geometry/algorithms/difference.hpp +++ b/boost/geometry/algorithms/difference.hpp @@ -2,8 +2,8 @@ // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2017. -// Modifications copyright (c) 2017, Oracle and/or its affiliates. +// This file was modified by Oracle on 2017, 2019. +// Modifications copyright (c) 2017, 2019, Oracle and/or its affiliates. // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle @@ -55,13 +55,11 @@ template typename GeometryOut, typename Geometry1, typename Geometry2, - typename RobustPolicy, typename OutputIterator, typename Strategy > inline OutputIterator difference_insert(Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { @@ -69,6 +67,17 @@ inline OutputIterator difference_insert(Geometry1 const& geometry1, concepts::check<Geometry2 const>(); concepts::check<GeometryOut>(); + typedef typename geometry::rescale_overlay_policy_type + < + Geometry1, + Geometry2, + typename Strategy::cs_tag + >::type rescale_policy_type; + + rescale_policy_type robust_policy + = geometry::get_rescale_policy<rescale_policy_type>( + geometry1, geometry2, strategy); + return geometry::dispatch::intersection_insert < Geometry1, Geometry2, @@ -100,12 +109,10 @@ template typename GeometryOut, typename Geometry1, typename Geometry2, - typename RobustPolicy, typename OutputIterator > inline OutputIterator difference_insert(Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, OutputIterator out) { typedef typename strategy::relate::services::default_strategy @@ -114,8 +121,8 @@ inline OutputIterator difference_insert(Geometry1 const& geometry1, Geometry2 >::type strategy_type; - return difference_insert<GeometryOut>(geometry1, geometry2, - robust_policy, out, strategy_type()); + return difference_insert<GeometryOut>(geometry1, geometry2, out, + strategy_type()); } @@ -131,20 +138,18 @@ struct difference < typename Geometry1, typename Geometry2, - typename RobustPolicy, typename Collection, typename Strategy > static inline void apply(Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, Collection & output_collection, Strategy const& strategy) { typedef typename boost::range_value<Collection>::type geometry_out; detail::difference::difference_insert<geometry_out>( - geometry1, geometry2, robust_policy, + geometry1, geometry2, range::back_inserter(output_collection), strategy); } @@ -153,19 +158,17 @@ struct difference < typename Geometry1, typename Geometry2, - typename RobustPolicy, typename Collection > static inline void apply(Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, Collection & output_collection, default_strategy) { typedef typename boost::range_value<Collection>::type geometry_out; detail::difference::difference_insert<geometry_out>( - geometry1, geometry2, robust_policy, + geometry1, geometry2, range::back_inserter(output_collection)); } }; @@ -185,18 +188,7 @@ struct difference Collection& output_collection, Strategy const& strategy) { - typedef typename geometry::rescale_overlay_policy_type - < - Geometry1, - Geometry2 - >::type rescale_policy_type; - - rescale_policy_type robust_policy - = geometry::get_rescale_policy<rescale_policy_type>(geometry1, - geometry2); - resolve_strategy::difference::apply(geometry1, geometry2, - robust_policy, output_collection, strategy); } |