1// Boost.Geometry (aka GGL, Generic Geometry Library)
2// Unit Test
3
4// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
5// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
6
7// This file was modified by Oracle on 2021.
8// Modifications copyright (c) 2021 Oracle and/or its affiliates.
9// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
10
11// Use, modification and distribution is subject to the Boost Software License,
12// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
13// http://www.boost.org/LICENSE_1_0.txt)
14
15
16#ifndef GEOMETRY_TEST_TEST_COMMON_TEST_POINT_HPP
17#define GEOMETRY_TEST_TEST_COMMON_TEST_POINT_HPP
18
19#include <boost/geometry/core/access.hpp>
20#include <boost/geometry/core/coordinate_type.hpp>
21#include <boost/geometry/core/coordinate_system.hpp>
22#include <boost/geometry/core/coordinate_dimension.hpp>
23#include <boost/geometry/core/cs.hpp>
24#include <boost/geometry/core/tag.hpp>
25#include <boost/geometry/geometries/register/point.hpp>
26
27// NOTE: since Boost 1.51 the Point type may always be a pointer.
28// Therefore the traits class don't need to add a pointer.
29// This obsoletes this whole test-point-type
30
31namespace test
32{
33
34// Test point class
35
36struct test_point
37{
38 float c1, c2, c3;
39};
40
41struct test_const_point
42{
43 test_const_point()
44 : c1(0.0), c2(0.0), c3(0.0) { }
45
46 test_const_point(float c1, float c2, float c3)
47 : c1(c1), c2(c2), c3(c3) { }
48
49 const float c1, c2, c3;
50};
51
52} // namespace test
53
54
55
56namespace boost { namespace geometry { namespace traits {
57
58template<>
59struct tag<test::test_point> { typedef point_tag type; };
60
61template<>
62struct coordinate_type<test::test_point> { typedef float type; };
63
64template<>
65struct coordinate_system<test::test_point> { typedef cs::cartesian type; };
66
67template<>
68struct dimension<test::test_point> : std::integral_constant<int, 3> {};
69
70template<> struct access<test::test_point, 0>
71{
72 static inline const float& get(const test::test_point& p)
73 {
74 return p.c1;
75 }
76
77 static inline void set(test::test_point& p, float const& value)
78 {
79 p.c1 = value;
80 }
81};
82
83template<> struct access<test::test_point, 1>
84{
85 static inline const float& get(const test::test_point& p)
86 {
87 return p.c2;
88 }
89
90 static inline void set(test::test_point& p, float const& value)
91 {
92 p.c2 = value;
93 }
94};
95
96template<> struct access<test::test_point, 2>
97{
98 static inline const float& get(const test::test_point& p)
99 {
100 return p.c3;
101 }
102
103 static inline void set(test::test_point& p, float const& value)
104 {
105 p.c3 = value;
106 }
107};
108
109}}} // namespace bg::traits
110
111BOOST_GEOMETRY_REGISTER_POINT_3D_CONST(test::test_const_point,
112 float,
113 boost::geometry::cs::cartesian,
114 c1, c2, c3)
115
116#endif // GEOMETRY_TEST_TEST_COMMON_TEST_POINT_HPP
117

source code of boost/libs/geometry/test/test_common/test_point.hpp