]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/asio/detail/recycling_allocator.hpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / boost / asio / detail / recycling_allocator.hpp
index adab0a7a61bbb38b6588f871476fa4724777fdf6..74003bfdd67f67b05230db4759d48f3ab2105716 100644 (file)
@@ -2,7 +2,7 @@
 // detail/recycling_allocator.hpp
 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 //
-// Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2019 Christopher M. Kohlhoff (chris at kohlhoff dot com)
 //
 // 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)
@@ -26,7 +26,7 @@ namespace boost {
 namespace asio {
 namespace detail {
 
-template <typename T>
+template <typename T, typename Purpose = thread_info_base::default_tag>
 class recycling_allocator
 {
 public:
@@ -35,7 +35,7 @@ public:
   template <typename U>
   struct rebind
   {
-    typedef recycling_allocator<U> other;
+    typedef recycling_allocator<U, Purpose> other;
   };
 
   recycling_allocator()
@@ -43,26 +43,28 @@ public:
   }
 
   template <typename U>
-  recycling_allocator(const recycling_allocator<U>&)
+  recycling_allocator(const recycling_allocator<U, Purpose>&)
   {
   }
 
   T* allocate(std::size_t n)
   {
     typedef thread_context::thread_call_stack call_stack;
-    void* p = thread_info_base::allocate(call_stack::top(), sizeof(T) * n);
+    void* p = thread_info_base::allocate(Purpose(),
+        call_stack::top(), sizeof(T) * n);
     return static_cast<T*>(p);
   }
 
   void deallocate(T* p, std::size_t n)
   {
     typedef thread_context::thread_call_stack call_stack;
-    thread_info_base::deallocate(call_stack::top(), p, sizeof(T) * n);
+    thread_info_base::deallocate(Purpose(),
+        call_stack::top(), p, sizeof(T) * n);
   }
 };
 
-template <>
-class recycling_allocator<void>
+template <typename Purpose>
+class recycling_allocator<void, Purpose>
 {
 public:
   typedef void value_type;
@@ -70,7 +72,7 @@ public:
   template <typename U>
   struct rebind
   {
-    typedef recycling_allocator<U> other;
+    typedef recycling_allocator<U, Purpose> other;
   };
 
   recycling_allocator()
@@ -78,22 +80,22 @@ public:
   }
 
   template <typename U>
-  recycling_allocator(const recycling_allocator<U>&)
+  recycling_allocator(const recycling_allocator<U, Purpose>&)
   {
   }
 };
 
-template <typename Allocator>
+template <typename Allocator, typename Purpose>
 struct get_recycling_allocator
 {
   typedef Allocator type;
   static type get(const Allocator& a) { return a; }
 };
 
-template <typename T>
-struct get_recycling_allocator<std::allocator<T> >
+template <typename T, typename Purpose>
+struct get_recycling_allocator<std::allocator<T>, Purpose>
 {
-  typedef recycling_allocator<T> type;
+  typedef recycling_allocator<T, Purpose> type;
   static type get(const std::allocator<T>&) { return type(); }
 };