You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
135 lines
3.2 KiB
135 lines
3.2 KiB
// Boost.Geometry (aka GGL, Generic Geometry Library) |
|
|
|
// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. |
|
// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. |
|
// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. |
|
|
|
// 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_DISTANCE_HPP |
|
#define BOOST_GEOMETRY_STRATEGIES_DISTANCE_HPP |
|
|
|
|
|
#include <boost/mpl/assert.hpp> |
|
|
|
#include <boost/geometry/core/cs.hpp> |
|
#include <boost/geometry/strategies/tags.hpp> |
|
|
|
|
|
namespace boost { namespace geometry |
|
{ |
|
|
|
|
|
namespace strategy { namespace distance { namespace services |
|
{ |
|
|
|
|
|
template <typename Strategy> struct tag {}; |
|
template <typename Strategy> struct return_type |
|
{ |
|
BOOST_MPL_ASSERT_MSG |
|
( |
|
false, NOT_IMPLEMENTED_FOR_THIS_STRATEGY, (types<Strategy>) |
|
); |
|
}; |
|
|
|
|
|
/*! |
|
\brief Metafunction delivering a similar strategy with other input point types |
|
*/ |
|
template |
|
< |
|
typename Strategy, |
|
typename Point1, |
|
typename Point2 |
|
> |
|
struct similar_type |
|
{ |
|
BOOST_MPL_ASSERT_MSG |
|
( |
|
false, NOT_IMPLEMENTED_FOR_THIS_STRATEGY |
|
, (types<Strategy, Point1, Point2>) |
|
); |
|
}; |
|
|
|
template |
|
< |
|
typename Strategy, |
|
typename Point1, |
|
typename Point2 |
|
> |
|
struct get_similar |
|
{ |
|
BOOST_MPL_ASSERT_MSG |
|
( |
|
false, NOT_IMPLEMENTED_FOR_THIS_STRATEGY |
|
, (types<Strategy, Point1, Point2>) |
|
); |
|
}; |
|
|
|
template <typename Strategy> struct comparable_type |
|
{ |
|
BOOST_MPL_ASSERT_MSG |
|
( |
|
false, NOT_IMPLEMENTED_FOR_THIS_STRATEGY, (types<Strategy>) |
|
); |
|
}; |
|
|
|
template <typename Strategy> struct get_comparable |
|
{ |
|
BOOST_MPL_ASSERT_MSG |
|
( |
|
false, NOT_IMPLEMENTED_FOR_THIS_STRATEGY, (types<Strategy>) |
|
); |
|
}; |
|
|
|
template <typename Strategy> struct result_from_distance {}; |
|
|
|
|
|
// For point-segment only: |
|
template <typename Strategy> struct strategy_point_point {}; |
|
|
|
|
|
// Default strategy |
|
|
|
|
|
/*! |
|
\brief Traits class binding a default strategy for distance |
|
to one (or possibly two) coordinate system(s) |
|
\ingroup distance |
|
\tparam GeometryTag tag (point/segment) for which this strategy is the default |
|
\tparam Point1 first point-type |
|
\tparam Point2 second point-type |
|
\tparam CsTag1 tag of coordinate system of first point type |
|
\tparam CsTag2 tag of coordinate system of second point type |
|
*/ |
|
template |
|
< |
|
typename GeometryTag, |
|
typename Point1, |
|
typename Point2 = Point1, |
|
typename CsTag1 = typename cs_tag<Point1>::type, |
|
typename CsTag2 = typename cs_tag<Point2>::type, |
|
typename UnderlyingStrategy = void |
|
> |
|
struct default_strategy |
|
{ |
|
BOOST_MPL_ASSERT_MSG |
|
( |
|
false, NOT_IMPLEMENTED_FOR_THIS_POINT_TYPE_COMBINATION |
|
, (types<Point1, Point2, CsTag1, CsTag2>) |
|
); |
|
}; |
|
|
|
|
|
}}} // namespace strategy::distance::services |
|
|
|
|
|
}} // namespace boost::geometry |
|
|
|
#endif // BOOST_GEOMETRY_STRATEGIES_DISTANCE_HPP
|
|
|