]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/libs/unordered/test/unordered/allocator_traits.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / unordered / test / unordered / allocator_traits.cpp
index 4f4fe79723220e1c5adf4289bf71970582b2821a..9b8738c25735b72a4474e4b7864d9d41e9fba3d8 100644 (file)
 // Distributed under the Boost Software License, Version 1.0. (See accompanying
 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
-#include <boost/unordered/detail/allocate.hpp>
 #include <boost/detail/lightweight_test.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/static_assert.hpp>
 #include <boost/limits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/unordered/detail/implementation.hpp>
 
 // Boilerplate
 
-#define ALLOCATOR_METHODS(name)                                             \
-    template <typename U> struct rebind {                                   \
-        typedef name<U> other;                                              \
-    };                                                                      \
-                                                                            \
-    name() {}                                                               \
-    template <typename Y> name(name<Y> const&) {}                           \
-    T* address(T& r) { return &r;}                                          \
-    T const* address(T const& r) { return &r; }                             \
-    T* allocate(std::size_t n)                                              \
-    { return static_cast<T*>(::operator new(n * sizeof(T))); }              \
-    T* allocate(std::size_t n, void const*)                                 \
-    { return static_cast<T*>(::operator new(n * sizeof(T))); }              \
-    void deallocate(T* p, std::size_t) { ::operator delete((void*) p); }    \
-    void construct(T* p, T const& t) { new(p) T(t); }                       \
-    void destroy(T* p) { p->~T(); }                                         \
-    std::size_t max_size() const                                            \
-    { return (std::numeric_limits<std::size_t>::max)(); }                   \
-    bool operator==(name<T> const&) { return true; }                        \
-    bool operator!=(name<T> const&) { return false; }                       \
+#define ALLOCATOR_METHODS(name)                                                \
+  template <typename U> struct rebind                                          \
+  {                                                                            \
+    typedef name<U> other;                                                     \
+  };                                                                           \
+                                                                               \
+  name() {}                                                                    \
+  template <typename Y> name(name<Y> const&) {}                                \
+  T* address(T& r) { return &r; }                                              \
+  T const* address(T const& r) { return &r; }                                  \
+  T* allocate(std::size_t n)                                                   \
+  {                                                                            \
+    return static_cast<T*>(::operator new(n * sizeof(T)));                     \
+  }                                                                            \
+  T* allocate(std::size_t n, void const*)                                      \
+  {                                                                            \
+    return static_cast<T*>(::operator new(n * sizeof(T)));                     \
+  }                                                                            \
+  void deallocate(T* p, std::size_t) { ::operator delete((void*)p); }          \
+  void construct(T* p, T const& t) { new (p) T(t); }                           \
+  void destroy(T* p) { p->~T(); }                                              \
+  std::size_t max_size() const                                                 \
+  {                                                                            \
+    return (std::numeric_limits<std::size_t>::max)();                          \
+  }                                                                            \
+  bool operator==(name<T> const&) { return true; }                             \
+  bool operator!=(name<T> const&) { return false; }                            \
 /**/
 
-#define ALLOCATOR_METHODS_TYPEDEFS(name)                                    \
-    template <typename U> struct rebind {                                   \
-        typedef name<U> other;                                              \
-    };                                                                      \
-                                                                            \
-    name() {}                                                               \
-    template <typename Y> name(name<Y> const&) {}                           \
-    pointer address(T& r) { return &r;}                                     \
-    const_pointer address(T const& r) { return &r; }                        \
-    pointer allocate(std::size_t n)                                         \
-    { return pointer(::operator new(n * sizeof(T))); }                      \
-    pointer allocate(std::size_t n, void const*)                            \
-    { return pointer(::operator new(n * sizeof(T))); }                      \
-    void deallocate(pointer p, std::size_t)                                 \
-    { ::operator delete((void*) p); }                                       \
-    void construct(T* p, T const& t) { new(p) T(t); }                       \
-    void destroy(T* p) { p->~T(); }                                         \
-    size_type max_size() const                                              \
-    { return (std::numeric_limits<size_type>::max)(); }                     \
-    bool operator==(name<T> const&) { return true; }                        \
-    bool operator!=(name<T> const&) { return false; }                       \
+#define ALLOCATOR_METHODS_TYPEDEFS(name)                                       \
+  template <typename U> struct rebind                                          \
+  {                                                                            \
+    typedef name<U> other;                                                     \
+  };                                                                           \
+                                                                               \
+  name() {}                                                                    \
+  template <typename Y> name(name<Y> const&) {}                                \
+  pointer address(T& r) { return &r; }                                         \
+  const_pointer address(T const& r) { return &r; }                             \
+  pointer allocate(std::size_t n)                                              \
+  {                                                                            \
+    return pointer(::operator new(n * sizeof(T)));                             \
+  }                                                                            \
+  pointer allocate(std::size_t n, void const*)                                 \
+  {                                                                            \
+    return pointer(::operator new(n * sizeof(T)));                             \
+  }                                                                            \
+  void deallocate(pointer p, std::size_t) { ::operator delete((void*)p); }     \
+  void construct(T* p, T const& t) { new (p) T(t); }                           \
+  void destroy(T* p) { p->~T(); }                                              \
+  size_type max_size() const                                                   \
+  {                                                                            \
+    return (std::numeric_limits<size_type>::max)();                            \
+  }                                                                            \
+  bool operator==(name<T> const&) { return true; }                             \
+  bool operator!=(name<T> const&) { return false; }                            \
 /**/
 
-struct yes_type { enum { value = true }; };
-struct no_type { enum { value = false }; };
+struct yes_type
+{
+  enum
+  {
+    value = true
+  };
+};
+struct no_type
+{
+  enum
+  {
+    value = false
+  };
+};
 
 // For tracking calls...
 
 static int selected;
-void reset() {
-    selected = 0;
-}
+void reset() { selected = 0; }
 
-template <typename Allocator>
-int call_select()
+template <typename Allocator> int call_select()
 {
-    typedef boost::unordered::detail::allocator_traits<Allocator> traits;
-    Allocator a;
+  typedef boost::unordered::detail::allocator_traits<Allocator> traits;
+  Allocator a;
 
-    reset();
-    BOOST_TEST(traits::select_on_container_copy_construction(a) == a);
-    return selected;
+  reset();
+  BOOST_TEST(traits::select_on_container_copy_construction(a) == a);
+  return selected;
 }
 
 // Empty allocator test
 
-template <typename T>
-struct empty_allocator
+template <typename T> struct empty_allocator
 {
-    typedef T value_type;
-    ALLOCATOR_METHODS(empty_allocator)
+  typedef T value_type;
+  ALLOCATOR_METHODS(empty_allocator)
 };
 
 void test_empty_allocator()
 {
-    typedef empty_allocator<int> allocator;
-    typedef boost::unordered::detail::allocator_traits<allocator> traits;
+  typedef empty_allocator<int> allocator;
+  typedef boost::unordered::detail::allocator_traits<allocator> traits;
 #if BOOST_UNORDERED_USE_ALLOCATOR_TRAITS == 1
-    BOOST_STATIC_ASSERT((boost::is_same<traits::size_type,
-        std::make_unsigned<std::ptrdiff_t>::type>::value));
+  BOOST_STATIC_ASSERT((boost::is_same<traits::size_type,
+    std::make_unsigned<std::ptrdiff_t>::type>::value));
 #else
-    BOOST_STATIC_ASSERT((boost::is_same<traits::size_type, std::size_t>::value));
+  BOOST_STATIC_ASSERT((boost::is_same<traits::size_type, std::size_t>::value));
 #endif
-    BOOST_STATIC_ASSERT((boost::is_same<traits::difference_type, std::ptrdiff_t>::value));
-    BOOST_STATIC_ASSERT((boost::is_same<traits::pointer, int*>::value));
-    BOOST_STATIC_ASSERT((boost::is_same<traits::const_pointer, int const*>::value));
-    BOOST_STATIC_ASSERT((boost::is_same<traits::value_type, int>::value));
-    BOOST_TEST(!traits::propagate_on_container_copy_assignment::value);
-    BOOST_TEST(!traits::propagate_on_container_move_assignment::value);
-    BOOST_TEST(!traits::propagate_on_container_swap::value);
-    BOOST_TEST(call_select<allocator>() == 0);
+  BOOST_STATIC_ASSERT(
+    (boost::is_same<traits::difference_type, std::ptrdiff_t>::value));
+  BOOST_STATIC_ASSERT((boost::is_same<traits::pointer, int*>::value));
+  BOOST_STATIC_ASSERT(
+    (boost::is_same<traits::const_pointer, int const*>::value));
+  BOOST_STATIC_ASSERT((boost::is_same<traits::value_type, int>::value));
+  BOOST_TEST(!traits::propagate_on_container_copy_assignment::value);
+  BOOST_TEST(!traits::propagate_on_container_move_assignment::value);
+  BOOST_TEST(!traits::propagate_on_container_swap::value);
+  BOOST_TEST(call_select<allocator>() == 0);
 }
 
 // allocator 1
 
-template <typename T>
-struct allocator1
-{
-    typedef T value_type;
-    ALLOCATOR_METHODS(allocator1)
-    
-    typedef yes_type propagate_on_container_copy_assignment;
-    typedef yes_type propagate_on_container_move_assignment;
-    typedef yes_type propagate_on_container_swap;
-    
-    allocator1<T> select_on_container_copy_construction() const {
-        ++selected;
-        return allocator1<T>();
-    }
+template <typename T> struct allocator1
+{
+  typedef T value_type;
+  ALLOCATOR_METHODS(allocator1)
+
+  typedef yes_type propagate_on_container_copy_assignment;
+  typedef yes_type propagate_on_container_move_assignment;
+  typedef yes_type propagate_on_container_swap;
+
+  allocator1<T> select_on_container_copy_construction() const
+  {
+    ++selected;
+    return allocator1<T>();
+  }
 };
 
 void test_allocator1()
 {
-    typedef allocator1<int> allocator;
-    typedef boost::unordered::detail::allocator_traits<allocator> traits;
+  typedef allocator1<int> allocator;
+  typedef boost::unordered::detail::allocator_traits<allocator> traits;
 #if BOOST_UNORDERED_USE_ALLOCATOR_TRAITS == 1
-    BOOST_STATIC_ASSERT((boost::is_same<traits::size_type,
-        std::make_unsigned<std::ptrdiff_t>::type>::value));
+  BOOST_STATIC_ASSERT((boost::is_same<traits::size_type,
+    std::make_unsigned<std::ptrdiff_t>::type>::value));
 #else
-    BOOST_STATIC_ASSERT((boost::is_same<traits::size_type, std::size_t>::value));
+  BOOST_STATIC_ASSERT((boost::is_same<traits::size_type, std::size_t>::value));
 #endif
-    BOOST_STATIC_ASSERT((boost::is_same<traits::difference_type, std::ptrdiff_t>::value));
-    BOOST_STATIC_ASSERT((boost::is_same<traits::pointer, int*>::value));
-    BOOST_STATIC_ASSERT((boost::is_same<traits::const_pointer, int const*>::value));
-    BOOST_STATIC_ASSERT((boost::is_same<traits::value_type, int>::value));
-    BOOST_TEST(traits::propagate_on_container_copy_assignment::value);
-    BOOST_TEST(traits::propagate_on_container_move_assignment::value);
-    BOOST_TEST(traits::propagate_on_container_swap::value);
-    BOOST_TEST(call_select<allocator>() == 1);
+  BOOST_STATIC_ASSERT(
+    (boost::is_same<traits::difference_type, std::ptrdiff_t>::value));
+  BOOST_STATIC_ASSERT((boost::is_same<traits::pointer, int*>::value));
+  BOOST_STATIC_ASSERT(
+    (boost::is_same<traits::const_pointer, int const*>::value));
+  BOOST_STATIC_ASSERT((boost::is_same<traits::value_type, int>::value));
+  BOOST_TEST(traits::propagate_on_container_copy_assignment::value);
+  BOOST_TEST(traits::propagate_on_container_move_assignment::value);
+  BOOST_TEST(traits::propagate_on_container_swap::value);
+  BOOST_TEST(call_select<allocator>() == 1);
 }
 
 // allocator 2
 
-template <typename Alloc>
-struct allocator2_base
+template <typename Alloc> struct allocator2_base
 {
-    Alloc select_on_container_copy_construction() const {
-        ++selected;
-        return Alloc();
-    }
+  Alloc select_on_container_copy_construction() const
+  {
+    ++selected;
+    return Alloc();
+  }
 };
 
-template <typename T>
-struct allocator2 : allocator2_base<allocator2<T> >
-{
-    typedef T value_type;
-    typedef T* pointer;
-    typedef T const* const_pointer;
-    typedef std::size_t size_type;
-    
-    ALLOCATOR_METHODS(allocator2)
-    
-    typedef no_type propagate_on_container_copy_assignment;
-    typedef no_type propagate_on_container_move_assignment;
-    typedef no_type propagate_on_container_swap;
+template <typename T> struct allocator2 : allocator2_base<allocator2<T> >
+{
+  typedef T value_type;
+  typedef T* pointer;
+  typedef T const* const_pointer;
+  typedef std::size_t size_type;
+
+  ALLOCATOR_METHODS(allocator2)
+
+  typedef no_type propagate_on_container_copy_assignment;
+  typedef no_type propagate_on_container_move_assignment;
+  typedef no_type propagate_on_container_swap;
 };
 
 void test_allocator2()
 {
-    typedef allocator2<int> allocator;
-    typedef boost::unordered::detail::allocator_traits<allocator> traits;
-    BOOST_STATIC_ASSERT((boost::is_same<traits::size_type, std::size_t>::value));
-    BOOST_STATIC_ASSERT((boost::is_same<traits::difference_type, std::ptrdiff_t>::value));
-    BOOST_STATIC_ASSERT((boost::is_same<traits::pointer, int*>::value));
-    BOOST_STATIC_ASSERT((boost::is_same<traits::const_pointer, int const*>::value));
-    BOOST_STATIC_ASSERT((boost::is_same<traits::value_type, int>::value));
-    BOOST_TEST(!traits::propagate_on_container_copy_assignment::value);
-    BOOST_TEST(!traits::propagate_on_container_move_assignment::value);
-    BOOST_TEST(!traits::propagate_on_container_swap::value);
-    BOOST_TEST(call_select<allocator>() == 1);
+  typedef allocator2<int> allocator;
+  typedef boost::unordered::detail::allocator_traits<allocator> traits;
+  BOOST_STATIC_ASSERT((boost::is_same<traits::size_type, std::size_t>::value));
+  BOOST_STATIC_ASSERT(
+    (boost::is_same<traits::difference_type, std::ptrdiff_t>::value));
+  BOOST_STATIC_ASSERT((boost::is_same<traits::pointer, int*>::value));
+  BOOST_STATIC_ASSERT(
+    (boost::is_same<traits::const_pointer, int const*>::value));
+  BOOST_STATIC_ASSERT((boost::is_same<traits::value_type, int>::value));
+  BOOST_TEST(!traits::propagate_on_container_copy_assignment::value);
+  BOOST_TEST(!traits::propagate_on_container_move_assignment::value);
+  BOOST_TEST(!traits::propagate_on_container_swap::value);
+  BOOST_TEST(call_select<allocator>() == 1);
 }
 
 // allocator 3
 
-template <typename T>
-struct ptr
+template <typename T> struct ptr
 {
-    T* value_;
-    
-    ptr(void* v) : value_((T*) v) {}
-    T& operator*() const { return *value_; }
+  T* value_;
+
+  ptr(void* v) : value_((T*)v) {}
+  T& operator*() const { return *value_; }
 };
 
-template <>
-struct ptr<void>
+template <> struct ptr<void>
 {
-    void* value_;
-    ptr(void* v) : value_(v) {}
+  void* value_;
+  ptr(void* v) : value_(v) {}
 };
 
-template <>
-struct ptr<const void>
+template <> struct ptr<const void>
 {
-    void const* value_;
-    ptr(void const* v) : value_(v) {}
+  void const* value_;
+  ptr(void const* v) : value_(v) {}
 };
 
-template <typename T>
-struct allocator3
+template <typename T> struct allocator3
 {
-    typedef T value_type;
-    typedef ptr<T> pointer;
-    typedef ptr<T const> const_pointer;
-    typedef unsigned short size_type;
+  typedef T value_type;
+  typedef ptr<T> pointer;
+  typedef ptr<T const> const_pointer;
+  typedef unsigned short size_type;
+
+  ALLOCATOR_METHODS_TYPEDEFS(allocator3)
 
-    ALLOCATOR_METHODS_TYPEDEFS(allocator3)
-    
-    typedef yes_type propagate_on_container_copy_assignment;
-    typedef no_type propagate_on_container_move_assignment;
+  typedef yes_type propagate_on_container_copy_assignment;
+  typedef no_type propagate_on_container_move_assignment;
 
-    allocator3<T> select_on_container_copy_construction() const {
-        ++selected;
-        return allocator3<T>();
-    }
+  allocator3<T> select_on_container_copy_construction() const
+  {
+    ++selected;
+    return allocator3<T>();
+  }
 };
 
 void test_allocator3()
 {
-    typedef allocator3<int> allocator;
-    typedef boost::unordered::detail::allocator_traits<allocator> traits;
-    BOOST_STATIC_ASSERT((boost::is_same<traits::size_type, unsigned short>::value));
-    BOOST_STATIC_ASSERT((boost::is_same<traits::difference_type, std::ptrdiff_t>::value));
-    BOOST_STATIC_ASSERT((boost::is_same<traits::pointer, ptr<int> >::value));
-    BOOST_STATIC_ASSERT((boost::is_same<traits::const_pointer, ptr<int const> >::value));
-    BOOST_STATIC_ASSERT((boost::is_same<traits::value_type, int>::value));
-    BOOST_TEST(traits::propagate_on_container_copy_assignment::value);
-    BOOST_TEST(!traits::propagate_on_container_move_assignment::value);
-    BOOST_TEST(!traits::propagate_on_container_swap::value);
-    BOOST_TEST(call_select<allocator>() == 1);
+  typedef allocator3<int> allocator;
+  typedef boost::unordered::detail::allocator_traits<allocator> traits;
+  BOOST_STATIC_ASSERT(
+    (boost::is_same<traits::size_type, unsigned short>::value));
+  BOOST_STATIC_ASSERT(
+    (boost::is_same<traits::difference_type, std::ptrdiff_t>::value));
+  BOOST_STATIC_ASSERT((boost::is_same<traits::pointer, ptr<int> >::value));
+  BOOST_STATIC_ASSERT(
+    (boost::is_same<traits::const_pointer, ptr<int const> >::value));
+  BOOST_STATIC_ASSERT((boost::is_same<traits::value_type, int>::value));
+  BOOST_TEST(traits::propagate_on_container_copy_assignment::value);
+  BOOST_TEST(!traits::propagate_on_container_move_assignment::value);
+  BOOST_TEST(!traits::propagate_on_container_swap::value);
+  BOOST_TEST(call_select<allocator>() == 1);
 }
 
 int main()
 {
-    test_empty_allocator();
-    test_allocator1();
-    test_allocator2();
-    test_allocator3();
-    return boost::report_errors();
+  test_empty_allocator();
+  test_allocator1();
+  test_allocator2();
+  test_allocator3();
+  return boost::report_errors();
 }