118 lines
3.4 KiB
C++
118 lines
3.4 KiB
C++
// Boost.Geometry (aka GGL, Generic Geometry Library)
|
|
|
|
// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
|
|
// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
|
|
// Copyright (c) 2009-2012 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_ALGORITHMS_NOT_IMPLEMENTED_HPP
|
|
#define BOOST_GEOMETRY_ALGORITHMS_NOT_IMPLEMENTED_HPP
|
|
|
|
|
|
#include <boost/mpl/assert.hpp>
|
|
#include <boost/geometry/core/tags.hpp>
|
|
#include <boost/geometry/multi/core/tags.hpp>
|
|
|
|
|
|
namespace boost { namespace geometry
|
|
{
|
|
|
|
|
|
namespace info
|
|
{
|
|
struct UNRECOGNIZED_GEOMETRY_TYPE {};
|
|
struct POINT {};
|
|
struct LINESTRING {};
|
|
struct POLYGON {};
|
|
struct RING {};
|
|
struct BOX {};
|
|
struct SEGMENT {};
|
|
struct MULTI_POINT {};
|
|
struct MULTI_LINESTRING {};
|
|
struct MULTI_POLYGON {};
|
|
struct GEOMETRY_COLLECTION {};
|
|
template <size_t D> struct DIMENSION {};
|
|
}
|
|
|
|
|
|
namespace nyi
|
|
{
|
|
|
|
|
|
struct not_implemented_tag {};
|
|
|
|
template
|
|
<
|
|
typename Term1,
|
|
typename Term2,
|
|
typename Term3
|
|
>
|
|
struct not_implemented_error
|
|
{
|
|
|
|
#ifndef BOOST_GEOMETRY_IMPLEMENTATION_STATUS_BUILD
|
|
# define BOOST_GEOMETRY_IMPLEMENTATION_STATUS_BUILD false
|
|
#endif
|
|
|
|
BOOST_MPL_ASSERT_MSG
|
|
(
|
|
BOOST_GEOMETRY_IMPLEMENTATION_STATUS_BUILD,
|
|
THIS_OPERATION_IS_NOT_OR_NOT_YET_IMPLEMENTED,
|
|
(
|
|
types<Term1, Term2, Term3>
|
|
)
|
|
);
|
|
};
|
|
|
|
template <typename Tag>
|
|
struct tag_to_term
|
|
{
|
|
typedef Tag type;
|
|
};
|
|
|
|
template <> struct tag_to_term<geometry_not_recognized_tag> { typedef info::UNRECOGNIZED_GEOMETRY_TYPE type; };
|
|
template <> struct tag_to_term<point_tag> { typedef info::POINT type; };
|
|
template <> struct tag_to_term<linestring_tag> { typedef info::LINESTRING type; };
|
|
template <> struct tag_to_term<polygon_tag> { typedef info::POLYGON type; };
|
|
template <> struct tag_to_term<ring_tag> { typedef info::RING type; };
|
|
template <> struct tag_to_term<box_tag> { typedef info::BOX type; };
|
|
template <> struct tag_to_term<segment_tag> { typedef info::SEGMENT type; };
|
|
template <> struct tag_to_term<multi_point_tag> { typedef info::MULTI_POINT type; };
|
|
template <> struct tag_to_term<multi_linestring_tag> { typedef info::MULTI_LINESTRING type; };
|
|
template <> struct tag_to_term<multi_polygon_tag> { typedef info::MULTI_POLYGON type; };
|
|
template <> struct tag_to_term<geometry_collection_tag> { typedef info::GEOMETRY_COLLECTION type; };
|
|
template <int D> struct tag_to_term<mpl::int_<D> > { typedef info::DIMENSION<D> type; };
|
|
|
|
|
|
}
|
|
|
|
|
|
template
|
|
<
|
|
typename Term1 = void,
|
|
typename Term2 = void,
|
|
typename Term3 = void
|
|
>
|
|
struct not_implemented
|
|
: nyi::not_implemented_tag,
|
|
nyi::not_implemented_error
|
|
<
|
|
typename mpl::identity<typename nyi::tag_to_term<Term1>::type>::type,
|
|
typename mpl::identity<typename nyi::tag_to_term<Term2>::type>::type,
|
|
typename mpl::identity<typename nyi::tag_to_term<Term3>::type>::type
|
|
>
|
|
{};
|
|
|
|
|
|
}} // namespace boost::geometry
|
|
|
|
|
|
#endif // BOOST_GEOMETRY_ALGORITHMS_NOT_IMPLEMENTED_HPP
|