1// Boost.Geometry.Index varray
2// Unit Test
3
4// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
5// Copyright (c) 2012-2013 Andrew Hundt.
6
7// Use, modification and distribution is subject to the Boost Software License,
8// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
9// http://www.boost.org/LICENSE_1_0.txt)
10
11#ifndef BOOST_GEOMETRY_INDEX_TEST_VARRAY_TEST_HPP
12#define BOOST_GEOMETRY_INDEX_TEST_VARRAY_TEST_HPP
13
14#include <boost/geometry/index/detail/varray.hpp>
15
16#include <boost/shared_ptr.hpp>
17#include "movable.hpp"
18
19class value_ndc
20{
21public:
22 explicit value_ndc(size_t a) : aa(a) {}
23 ~value_ndc() {}
24 bool operator==(value_ndc const& v) const { return aa == v.aa; }
25 bool operator<(value_ndc const& v) const { return aa < v.aa; }
26private:
27 value_ndc(value_ndc const&) {}
28 value_ndc & operator=(value_ndc const&) { return *this; }
29 size_t aa;
30};
31
32class value_nd
33{
34public:
35 explicit value_nd(size_t a) : aa(a) {}
36 ~value_nd() {}
37 bool operator==(value_nd const& v) const { return aa == v.aa; }
38 bool operator<(value_nd const& v) const { return aa < v.aa; }
39private:
40 size_t aa;
41};
42
43class value_nc
44{
45public:
46 explicit value_nc(size_t a = 0) : aa(a) {}
47 ~value_nc() {}
48 bool operator==(value_nc const& v) const { return aa == v.aa; }
49 bool operator<(value_nc const& v) const { return aa < v.aa; }
50private:
51 value_nc(value_nc const&) {}
52 value_nc & operator=(value_ndc const&) { return *this; }
53 size_t aa;
54};
55
56class counting_value
57{
58 BOOST_COPYABLE_AND_MOVABLE(counting_value)
59
60public:
61 explicit counting_value(size_t a = 0, size_t b = 0) : aa(a), bb(b) { ++c(); }
62 counting_value(counting_value const& v) : aa(v.aa), bb(v.bb) { ++c(); }
63 counting_value(BOOST_RV_REF(counting_value) p) : aa(p.aa), bb(p.bb) { p.aa = 0; p.bb = 0; ++c(); } // Move constructor
64 counting_value& operator=(BOOST_RV_REF(counting_value) p) { aa = p.aa; p.aa = 0; bb = p.bb; p.bb = 0; return *this; } // Move assignment
65 counting_value& operator=(BOOST_COPY_ASSIGN_REF(counting_value) p) { aa = p.aa; bb = p.bb; return *this; } // Copy assignment
66 ~counting_value() { --c(); }
67 bool operator==(counting_value const& v) const { return aa == v.aa && bb == v.bb; }
68 bool operator<(counting_value const& v) const { return aa < v.aa || ( aa == v.aa && bb < v.bb ); }
69 static size_t count() { return c(); }
70
71private:
72 static size_t & c() { static size_t co = 0; return co; }
73 size_t aa, bb;
74};
75
76namespace boost {
77
78template <>
79struct has_nothrow_move<counting_value>
80{
81 static const bool value = true;
82};
83
84}
85
86class shptr_value
87{
88 typedef boost::shared_ptr<size_t> Ptr;
89public:
90 explicit shptr_value(size_t a = 0) : m_ptr(new size_t(a)) {}
91 bool operator==(shptr_value const& v) const { return *m_ptr == *(v.m_ptr); }
92 bool operator<(shptr_value const& v) const { return *m_ptr < *(v.m_ptr); }
93private:
94 boost::shared_ptr<size_t> m_ptr;
95};
96
97#endif // BOOST_GEOMETRY_INDEX_TEST_VARRAY_TEST_HPP
98

source code of boost/libs/geometry/index/test/varray_test.hpp