From 2ddcf5dccf70d377995dfb287d03643db6691ba9 Mon Sep 17 00:00:00 2001 From: Bruno Lalande Date: Mon, 23 Dec 2013 12:19:25 +0000 Subject: [PATCH] Added resolve_strategy stage for simplify_insert. --- .../boost/geometry/algorithms/simplify.hpp | 59 ++++++++++++++----- 1 file changed, 45 insertions(+), 14 deletions(-) diff --git a/include/boost/geometry/algorithms/simplify.hpp b/include/boost/geometry/algorithms/simplify.hpp index fec379fc1..0dc2bd0c6 100644 --- a/include/boost/geometry/algorithms/simplify.hpp +++ b/include/boost/geometry/algorithms/simplify.hpp @@ -270,6 +270,49 @@ struct simplify } }; +struct simplify_insert +{ + template + < + typename Geometry, + typename OutputIterator, + typename Distance, + typename Strategy + > + static inline void apply(Geometry const& geometry, + OutputIterator& out, + Distance const& max_distance, + Strategy const& strategy) + { + dispatch::simplify_insert::apply(geometry, out, max_distance, strategy); + } + + template + static inline void apply(Geometry const& geometry, + OutputIterator& out, + Distance const& max_distance, + default_strategy) + { + typedef typename point_type::type point_type; + + typedef typename strategy::distance::services::default_strategy + < + segment_tag, point_type + >::type ds_strategy_type; + + typedef strategy::simplify::douglas_peucker + < + point_type, ds_strategy_type + > strategy_type; + + BOOST_CONCEPT_ASSERT( + (concept::SimplifyStrategy) + ); + + apply(geometry, out, max_distance, strategy_type()); + } +}; + } // namespace resolve_strategy @@ -377,23 +420,11 @@ template inline void simplify_insert(Geometry const& geometry, OutputIterator out, Distance const& max_distance) { - typedef typename point_type::type point_type; - // Concept: output point type = point type of input geometry concept::check(); - concept::check(); + concept::check::type>(); - typedef typename strategy::distance::services::default_strategy - < - segment_tag, point_type - >::type ds_strategy_type; - - typedef strategy::simplify::douglas_peucker - < - point_type, ds_strategy_type - > strategy_type; - - dispatch::simplify_insert::apply(geometry, out, max_distance, strategy_type()); + resolve_strategy::simplify_insert::apply(geometry, out, max_distance, default_strategy()); } }} // namespace detail::simplify