varray_test.hpp 3.0 KB

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