1// Boost.Geometry (aka GGL, Generic Geometry Library)
2
3// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
4// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
5// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
6
7// This file was modified by Oracle on 2015.
8// Modifications copyright (c) 2015, Oracle and/or its affiliates.
9
10// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
11
12// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
13// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
14
15// Use, modification and distribution is subject to the Boost Software License,
16// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
17// http://www.boost.org/LICENSE_1_0.txt)
18
19
20#ifndef BOOST_GEOMETRY_ALGORITHMS_NOT_IMPLEMENTED_HPP
21#define BOOST_GEOMETRY_ALGORITHMS_NOT_IMPLEMENTED_HPP
22
23
24#include <boost/mpl/assert.hpp>
25#include <boost/mpl/identity.hpp>
26#include <boost/geometry/core/tags.hpp>
27
28
29namespace boost { namespace geometry
30{
31
32
33namespace info
34{
35 struct UNRECOGNIZED_GEOMETRY_TYPE {};
36 struct POINT {};
37 struct LINESTRING {};
38 struct POLYGON {};
39 struct RING {};
40 struct BOX {};
41 struct SEGMENT {};
42 struct MULTI_POINT {};
43 struct MULTI_LINESTRING {};
44 struct MULTI_POLYGON {};
45 struct GEOMETRY_COLLECTION {};
46 template <size_t D> struct DIMENSION {};
47}
48
49
50namespace nyi
51{
52
53
54struct not_implemented_tag {};
55
56template
57<
58 typename Term1,
59 typename Term2,
60 typename Term3
61>
62struct not_implemented_error
63{
64
65#ifndef BOOST_GEOMETRY_IMPLEMENTATION_STATUS_BUILD
66# define BOOST_GEOMETRY_IMPLEMENTATION_STATUS_BUILD false
67#endif
68
69 BOOST_MPL_ASSERT_MSG
70 (
71 BOOST_GEOMETRY_IMPLEMENTATION_STATUS_BUILD,
72 THIS_OPERATION_IS_NOT_OR_NOT_YET_IMPLEMENTED,
73 (
74 types<Term1, Term2, Term3>
75 )
76 );
77};
78
79template <typename Tag>
80struct tag_to_term
81{
82 typedef Tag type;
83};
84
85template <> struct tag_to_term<geometry_not_recognized_tag> { typedef info::UNRECOGNIZED_GEOMETRY_TYPE type; };
86template <> struct tag_to_term<point_tag> { typedef info::POINT type; };
87template <> struct tag_to_term<linestring_tag> { typedef info::LINESTRING type; };
88template <> struct tag_to_term<polygon_tag> { typedef info::POLYGON type; };
89template <> struct tag_to_term<ring_tag> { typedef info::RING type; };
90template <> struct tag_to_term<box_tag> { typedef info::BOX type; };
91template <> struct tag_to_term<segment_tag> { typedef info::SEGMENT type; };
92template <> struct tag_to_term<multi_point_tag> { typedef info::MULTI_POINT type; };
93template <> struct tag_to_term<multi_linestring_tag> { typedef info::MULTI_LINESTRING type; };
94template <> struct tag_to_term<multi_polygon_tag> { typedef info::MULTI_POLYGON type; };
95template <> struct tag_to_term<geometry_collection_tag> { typedef info::GEOMETRY_COLLECTION type; };
96template <int D> struct tag_to_term<boost::mpl::int_<D> > { typedef info::DIMENSION<D> type; };
97
98
99}
100
101
102template
103<
104 typename Term1 = void,
105 typename Term2 = void,
106 typename Term3 = void
107>
108struct not_implemented
109 : nyi::not_implemented_tag,
110 nyi::not_implemented_error
111 <
112 typename boost::mpl::identity
113 <
114 typename nyi::tag_to_term<Term1>::type
115 >::type,
116 typename boost::mpl::identity
117 <
118 typename nyi::tag_to_term<Term2>::type
119 >::type,
120 typename boost::mpl::identity
121 <
122 typename nyi::tag_to_term<Term3>::type
123 >::type
124 >
125{};
126
127
128}} // namespace boost::geometry
129
130
131#endif // BOOST_GEOMETRY_ALGORITHMS_NOT_IMPLEMENTED_HPP
132

source code of boost/boost/geometry/algorithms/not_implemented.hpp