]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/geometry/geometries/register/point.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / geometry / geometries / register / point.hpp
1 // Boost.Geometry (aka GGL, Generic Geometry Library)
2
3 // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
4 // Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
5 // Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
6
7 // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
8 // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
9
10 // Use, modification and distribution is subject to the Boost Software License,
11 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
12 // http://www.boost.org/LICENSE_1_0.txt)
13
14 #ifndef BOOST_GEOMETRY_GEOMETRIES_REGISTER_POINT_HPP
15 #define BOOST_GEOMETRY_GEOMETRIES_REGISTER_POINT_HPP
16
17
18 #include <cstddef>
19
20 #ifndef DOXYGEN_NO_SPECIALIZATIONS
21
22 // Starting point, specialize basic traits necessary to register a point
23 #define BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, Dim, CoordinateType, CoordinateSystem) \
24 template<> struct tag<Point> { typedef point_tag type; }; \
25 template<> struct dimension<Point> : boost::mpl::int_<Dim> {}; \
26 template<> struct coordinate_type<Point> { typedef CoordinateType type; }; \
27 template<> struct coordinate_system<Point> { typedef CoordinateSystem type; };
28
29 // Specialize access class per dimension
30 #define BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, Dim, CoordinateType, Get, Set) \
31 template<> struct access<Point, Dim> \
32 { \
33 static inline CoordinateType get(Point const& p) { return p. Get; } \
34 static inline void set(Point& p, CoordinateType const& value) { p. Set = value; } \
35 };
36
37 // Const version
38 #define BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST(Point, Dim, CoordinateType, Get) \
39 template<> struct access<Point, Dim> \
40 { \
41 static inline CoordinateType get(Point const& p) { return p. Get; } \
42 };
43
44
45 // Getter/setter version
46 #define BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_GET_SET(Point, Dim, CoordinateType, Get, Set) \
47 template<> struct access<Point, Dim> \
48 { \
49 static inline CoordinateType get(Point const& p) \
50 { return p. Get (); } \
51 static inline void set(Point& p, CoordinateType const& value) \
52 { p. Set ( value ); } \
53 };
54
55 #endif // DOXYGEN_NO_SPECIALIZATIONS
56
57
58 /*!
59 \brief \brief_macro{2D point type}
60 \ingroup register
61 \details \details_macro{BOOST_GEOMETRY_REGISTER_POINT_2D, two-dimensional point type}
62 \param Point \param_macro_type{Point}
63 \param CoordinateType \param_macro_coortype{point}
64 \param CoordinateSystem \param_macro_coorsystem
65 \param Field0 \param_macro_member{\macro_x}
66 \param Field1 \param_macro_member{\macro_y}
67
68 \qbk{[include reference/geometries/register/point.qbk]}
69 */
70 #define BOOST_GEOMETRY_REGISTER_POINT_2D(Point, CoordinateType, CoordinateSystem, Field0, Field1) \
71 namespace boost { namespace geometry { namespace traits { \
72 BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 2, CoordinateType, CoordinateSystem) \
73 BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, 0, CoordinateType, Field0, Field0) \
74 BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, 1, CoordinateType, Field1, Field1) \
75 }}}
76
77 /*!
78 \brief \brief_macro{3D point type}
79 \ingroup register
80 \details \details_macro{BOOST_GEOMETRY_REGISTER_POINT_3D, three-dimensional point type}
81 \param Point \param_macro_type{Point}
82 \param CoordinateType \param_macro_coortype{point}
83 \param CoordinateSystem \param_macro_coorsystem
84 \param Field0 \param_macro_member{\macro_x}
85 \param Field1 \param_macro_member{\macro_y}
86 \param Field2 \param_macro_member{\macro_z}
87 */
88 #define BOOST_GEOMETRY_REGISTER_POINT_3D(Point, CoordinateType, CoordinateSystem, Field0, Field1, Field2) \
89 namespace boost { namespace geometry { namespace traits { \
90 BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 3, CoordinateType, CoordinateSystem) \
91 BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, 0, CoordinateType, Field0, Field0) \
92 BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, 1, CoordinateType, Field1, Field1) \
93 BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, 2, CoordinateType, Field2, Field2) \
94 }}}
95
96 /*!
97 \brief \brief_macro{2D point type} \brief_macro_const
98 \ingroup register
99 \details \details_macro{BOOST_GEOMETRY_REGISTER_POINT_2D_CONST, two-dimensional point type}. \details_macro_const
100 \param Point \param_macro_type{Point}
101 \param CoordinateType \param_macro_coortype{point}
102 \param CoordinateSystem \param_macro_coorsystem
103 \param Field0 \param_macro_member{\macro_x}
104 \param Field1 \param_macro_member{\macro_y}
105 */
106 #define BOOST_GEOMETRY_REGISTER_POINT_2D_CONST(Point, CoordinateType, CoordinateSystem, Field0, Field1) \
107 namespace boost { namespace geometry { namespace traits { \
108 BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 2, CoordinateType, CoordinateSystem) \
109 BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST(Point, 0, CoordinateType, Field0) \
110 BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST(Point, 1, CoordinateType, Field1) \
111 }}}
112
113 /*!
114 \brief \brief_macro{3D point type} \brief_macro_const
115 \ingroup register
116 \details \details_macro{BOOST_GEOMETRY_REGISTER_POINT_3D_CONST, three-dimensional point type}. \details_macro_const
117 \param Point \param_macro_type{Point}
118 \param CoordinateType \param_macro_coortype{point}
119 \param CoordinateSystem \param_macro_coorsystem
120 \param Field0 \param_macro_member{\macro_x}
121 \param Field1 \param_macro_member{\macro_y}
122 \param Field2 \param_macro_member{\macro_z}
123 */
124 #define BOOST_GEOMETRY_REGISTER_POINT_3D_CONST(Point, CoordinateType, CoordinateSystem, Field0, Field1, Field2) \
125 namespace boost { namespace geometry { namespace traits { \
126 BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 3, CoordinateType, CoordinateSystem) \
127 BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST(Point, 0, CoordinateType, Field0) \
128 BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST(Point, 1, CoordinateType, Field1) \
129 BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST(Point, 2, CoordinateType, Field2) \
130 }}}
131
132 /*!
133 \brief \brief_macro{2D point type} \brief_macro_getset
134 \ingroup register
135 \details \details_macro{BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET, two-dimensional point type}. \details_macro_getset
136 \param Point \param_macro_type{Point}
137 \param CoordinateType \param_macro_coortype{point}
138 \param CoordinateSystem \param_macro_coorsystem
139 \param Get0 \param_macro_getset{get, \macro_x}
140 \param Get1 \param_macro_getset{get, \macro_y}
141 \param Set0 \param_macro_getset{set, \macro_x}
142 \param Set1 \param_macro_getset{set, \macro_y}
143 */
144 #define BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET(Point, CoordinateType, CoordinateSystem, Get0, Get1, Set0, Set1) \
145 namespace boost { namespace geometry { namespace traits { \
146 BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 2, CoordinateType, CoordinateSystem) \
147 BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_GET_SET(Point, 0, CoordinateType, Get0, Set0) \
148 BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_GET_SET(Point, 1, CoordinateType, Get1, Set1) \
149 }}}
150
151 /*!
152 \brief \brief_macro{3D point type} \brief_macro_getset
153 \ingroup register
154 \details \details_macro{BOOST_GEOMETRY_REGISTER_POINT_3D_GET_SET, three-dimensional point type}. \details_macro_getset
155 \param Point \param_macro_type{Point}
156 \param CoordinateType \param_macro_coortype{point}
157 \param CoordinateSystem \param_macro_coorsystem
158 \param Get0 \param_macro_getset{get, \macro_x}
159 \param Get1 \param_macro_getset{get, \macro_y}
160 \param Get2 \param_macro_getset{get, \macro_z}
161 \param Set0 \param_macro_getset{set, \macro_x}
162 \param Set1 \param_macro_getset{set, \macro_y}
163 \param Set2 \param_macro_getset{set, \macro_z}
164 */
165 #define BOOST_GEOMETRY_REGISTER_POINT_3D_GET_SET(Point, CoordinateType, CoordinateSystem, Get0, Get1, Get2, Set0, Set1, Set2) \
166 namespace boost { namespace geometry { namespace traits { \
167 BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 3, CoordinateType, CoordinateSystem) \
168 BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_GET_SET(Point, 0, CoordinateType, Get0, Set0) \
169 BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_GET_SET(Point, 1, CoordinateType, Get1, Set1) \
170 BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_GET_SET(Point, 2, CoordinateType, Get2, Set2) \
171 }}}
172
173 #endif // BOOST_GEOMETRY_GEOMETRIES_REGISTER_POINT_HPP