diff --git a/include/boost/geometry/algorithms/detail/distance/default_strategies.hpp b/include/boost/geometry/algorithms/detail/distance/default_strategies.hpp index 70e8521ea..131265c0e 100644 --- a/include/boost/geometry/algorithms/detail/distance/default_strategies.hpp +++ b/include/boost/geometry/algorithms/detail/distance/default_strategies.hpp @@ -25,6 +25,7 @@ #include #include #include +#include #include @@ -52,7 +53,8 @@ template typename Tag2 = typename tag_cast < typename tag::type, pointlike_tag - >::type + >::type, + bool Reverse = geometry::reverse_dispatch::type::value > struct default_strategy : strategy::distance::services::default_strategy @@ -63,10 +65,24 @@ struct default_strategy > {}; +template +< + typename Geometry1, + typename Geometry2, + typename Tag1, + typename Tag2 +> +struct default_strategy + : default_strategy +{}; + template -struct default_strategy - : strategy::distance::services::default_strategy +struct default_strategy + < + Pointlike1, Pointlike2, + pointlike_tag, pointlike_tag, false + > : strategy::distance::services::default_strategy < point_tag, typename point_type::type, @@ -76,7 +92,7 @@ struct default_strategy template -struct default_strategy +struct default_strategy : strategy::distance::services::default_strategy < point_tag, @@ -91,7 +107,7 @@ struct default_strategy template -struct default_strategy +struct default_strategy : strategy::distance::services::default_strategy < box_tag, diff --git a/include/boost/geometry/strategies/default_comparable_distance_result.hpp b/include/boost/geometry/strategies/default_comparable_distance_result.hpp new file mode 100644 index 000000000..bbaf3656b --- /dev/null +++ b/include/boost/geometry/strategies/default_comparable_distance_result.hpp @@ -0,0 +1,59 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// 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. + +// Use, modification and distribution is subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_GEOMETRY_STRATEGIES_DEFAULT_COMPARABLE_DISTANCE_RESULT_HPP +#define BOOST_GEOMETRY_STRATEGIES_DEFAULT_COMPARABLE_DISTANCE_RESULT_HPP + +#include +#include +#include + + +#include + +namespace boost { namespace geometry +{ + +/*! +\brief Meta-function defining return type of comparable_distance function +\ingroup distance +\note The strategy defines the return-type (so this situation is different + from length, where distance is sqr/sqrt, but length always squared) + */ +template +struct default_comparable_distance_result +{ + typedef typename strategy::distance::services::return_type + < + typename strategy::distance::services::comparable_type + < + typename detail::distance::default_strategy + < + Geometry1, Geometry2 + >::type + >::type, + typename point_type::type, + typename point_type::type + >::type type; +}; + + +}} // namespace boost::geometry + + +#endif // BOOST_GEOMETRY_STRATEGIES_DEFAULT_COMPARABLE_DISTANCE_RESULT_HPP