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