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 | |
29 | namespace boost { namespace geometry |
30 | { |
31 | |
32 | |
33 | namespace 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 | |
50 | namespace nyi |
51 | { |
52 | |
53 | |
54 | struct not_implemented_tag {}; |
55 | |
56 | template |
57 | < |
58 | typename Term1, |
59 | typename Term2, |
60 | typename Term3 |
61 | > |
62 | struct 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 | |
79 | template <typename Tag> |
80 | struct tag_to_term |
81 | { |
82 | typedef Tag type; |
83 | }; |
84 | |
85 | template <> struct tag_to_term<geometry_not_recognized_tag> { typedef info::UNRECOGNIZED_GEOMETRY_TYPE type; }; |
86 | template <> struct tag_to_term<point_tag> { typedef info::POINT type; }; |
87 | template <> struct tag_to_term<linestring_tag> { typedef info::LINESTRING type; }; |
88 | template <> struct tag_to_term<polygon_tag> { typedef info::POLYGON type; }; |
89 | template <> struct tag_to_term<ring_tag> { typedef info::RING type; }; |
90 | template <> struct tag_to_term<box_tag> { typedef info::BOX type; }; |
91 | template <> struct tag_to_term<segment_tag> { typedef info::SEGMENT type; }; |
92 | template <> struct tag_to_term<multi_point_tag> { typedef info::MULTI_POINT type; }; |
93 | template <> struct tag_to_term<multi_linestring_tag> { typedef info::MULTI_LINESTRING type; }; |
94 | template <> struct tag_to_term<multi_polygon_tag> { typedef info::MULTI_POLYGON type; }; |
95 | template <> struct tag_to_term<geometry_collection_tag> { typedef info::GEOMETRY_COLLECTION type; }; |
96 | template <int D> struct tag_to_term<boost::mpl::int_<D> > { typedef info::DIMENSION<D> type; }; |
97 | |
98 | |
99 | } |
100 | |
101 | |
102 | template |
103 | < |
104 | typename Term1 = void, |
105 | typename Term2 = void, |
106 | typename Term3 = void |
107 | > |
108 | struct 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 | |