diff options
Diffstat (limited to 'boost/asio/detail/recycling_allocator.hpp')
-rw-r--r-- | boost/asio/detail/recycling_allocator.hpp | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/boost/asio/detail/recycling_allocator.hpp b/boost/asio/detail/recycling_allocator.hpp index adab0a7a61..74003bfdd6 100644 --- a/boost/asio/detail/recycling_allocator.hpp +++ b/boost/asio/detail/recycling_allocator.hpp @@ -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(); } }; |