From ddc5ddf0ffb8ed967a8dac842f086d79e7ca2376 Mon Sep 17 00:00:00 2001 From: Menelaos Karavelas Date: Thu, 8 May 2014 15:04:23 +0300 Subject: [PATCH] [comparable distance] add free function for comparable distance that takes a strategy --- .../algorithms/comparable_distance.hpp | 64 +++++++++++++++---- 1 file changed, 51 insertions(+), 13 deletions(-) diff --git a/include/boost/geometry/algorithms/comparable_distance.hpp b/include/boost/geometry/algorithms/comparable_distance.hpp index 4f0563a8a..9bce0390b 100644 --- a/include/boost/geometry/algorithms/comparable_distance.hpp +++ b/include/boost/geometry/algorithms/comparable_distance.hpp @@ -1,8 +1,13 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2014 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2014 Mateusz Loskot, London, UK. + +// This file was modified by Oracle on 2014. +// Modifications copyright (c) 2014, Oracle and/or its affiliates. + +// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -15,13 +20,45 @@ #define BOOST_GEOMETRY_ALGORITHMS_COMPARABLE_DISTANCE_HPP +#include + +#include + #include +#include namespace boost { namespace geometry { +// MK::need to add qbk documentation +template +inline typename strategy::distance::services::return_type + < + typename strategy::distance::services::comparable_type + < + Strategy + >::type, + typename point_type::type, + typename point_type::type + >::type +comparable_distance(Geometry1 const& geometry1, Geometry2 const& geometry2, + Strategy const& strategy) +{ + concept::check(); + concept::check(); + + return distance(geometry1, geometry2, + strategy::distance::services::get_comparable + < + Strategy + >::apply(strategy) + ); +} + + + /*! \brief \brief_calc2{comparable distance measurement} \ingroup distance @@ -45,10 +82,7 @@ inline typename default_distance_result::type comparable_d concept::check(); concept::check(); - typedef typename point_type::type point1_type; - typedef typename point_type::type point2_type; - - // Define a point-point-distance-strategy + // Define a default-distance-strategy // for either the normal case, either the reversed case typedef typename strategy::distance::services::comparable_type @@ -57,14 +91,18 @@ inline typename default_distance_result::type comparable_d < geometry::reverse_dispatch ::type::value, - typename strategy::distance::services::default_strategy - ::type, - typename strategy::distance::services::default_strategy - ::type + typename detail::distance::default_strategy + < + Geometry2, Geometry1 + >::type, + typename detail::distance::default_strategy + < + Geometry1, Geometry2 + >::type >::type - >::type strategy_type; + >::type default_comparable_strategy_type; - return distance(geometry1, geometry2, strategy_type()); + return distance(geometry1, geometry2, default_comparable_strategy_type()); }