1//////////////////////////////////////////////////////////////////////////////
2//
3// (C) Copyright Ion Gaztanaga 2015-2015. Distributed under the Boost
4// Software License, Version 1.0. (See accompanying file
5// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6//
7// See http://www.boost.org/libs/container for documentation.
8//
9//////////////////////////////////////////////////////////////////////////////
10
11#define BOOST_CONTAINER_SOURCE
12#include <boost/container/detail/config_begin.hpp>
13#include <boost/container/detail/workaround.hpp>
14#include <boost/container/detail/thread_mutex.hpp>
15
16#include <boost/container/pmr/synchronized_pool_resource.hpp>
17#include <cstddef>
18
19namespace {
20
21using namespace boost::container::dtl;
22
23class thread_mutex_lock
24{
25 thread_mutex &m_mut;
26
27 public:
28 explicit thread_mutex_lock(thread_mutex &m)
29 : m_mut(m)
30 {
31 m_mut.lock();
32 }
33
34 ~thread_mutex_lock()
35 {
36 m_mut.unlock();
37 }
38};
39
40} //namespace {
41
42namespace boost {
43namespace container {
44namespace pmr {
45
46synchronized_pool_resource::synchronized_pool_resource(const pool_options& opts, memory_resource* upstream) BOOST_NOEXCEPT
47 : m_mut(), m_pool_resource(opts, upstream)
48{}
49
50synchronized_pool_resource::synchronized_pool_resource() BOOST_NOEXCEPT
51 : m_mut(), m_pool_resource()
52{}
53
54synchronized_pool_resource::synchronized_pool_resource(memory_resource* upstream) BOOST_NOEXCEPT
55 : m_mut(), m_pool_resource(upstream)
56{}
57
58synchronized_pool_resource::synchronized_pool_resource(const pool_options& opts) BOOST_NOEXCEPT
59 : m_mut(), m_pool_resource(opts)
60{}
61
62synchronized_pool_resource::~synchronized_pool_resource() //virtual
63{}
64
65void synchronized_pool_resource::release()
66{
67 thread_mutex_lock lck(m_mut); (void)lck;
68 m_pool_resource.release();
69}
70
71memory_resource* synchronized_pool_resource::upstream_resource() const
72{ return m_pool_resource.upstream_resource(); }
73
74pool_options synchronized_pool_resource::options() const
75{ return m_pool_resource.options(); }
76
77void* synchronized_pool_resource::do_allocate(std::size_t bytes, std::size_t alignment) //virtual
78{
79 thread_mutex_lock lck(m_mut); (void)lck;
80 return m_pool_resource.do_allocate(bytes, alignment);
81}
82
83void synchronized_pool_resource::do_deallocate(void* p, std::size_t bytes, std::size_t alignment) //virtual
84{
85 thread_mutex_lock lck(m_mut); (void)lck;
86 return m_pool_resource.do_deallocate(p, bytes, alignment);
87}
88
89bool synchronized_pool_resource::do_is_equal(const memory_resource& other) const BOOST_NOEXCEPT //virtual
90{ return this == &other; }
91
92std::size_t synchronized_pool_resource::pool_count() const
93{ return m_pool_resource.pool_count(); }
94
95std::size_t synchronized_pool_resource::pool_index(std::size_t bytes) const
96{ return m_pool_resource.pool_index(bytes); }
97
98std::size_t synchronized_pool_resource::pool_next_blocks_per_chunk(std::size_t pool_idx) const
99{ return m_pool_resource.pool_next_blocks_per_chunk(pool_idx); }
100
101std::size_t synchronized_pool_resource::pool_block(std::size_t pool_idx) const
102{ return m_pool_resource.pool_block(pool_idx); }
103
104std::size_t synchronized_pool_resource::pool_cached_blocks(std::size_t pool_idx) const
105{ return m_pool_resource.pool_cached_blocks(pool_idx); }
106
107} //namespace pmr {
108} //namespace container {
109} //namespace boost {
110
111#include <boost/container/detail/config_end.hpp>
112

source code of boost/libs/container/src/synchronized_pool_resource.cpp