8 namespace boost {
namespace memory {
10 template <
typename bucketizer_type>
11 bucketizer_helper<bucketizer_type>::bucketizer_helper(bucketizer_type& instance)
18 template <
typename bucketizer_type>
19 template <std::
size_t bucket>
20 inline auto& bucketizer_helper<bucketizer_type>::get() noexcept
22 static const auto min = bucketizer_type::min_size;
23 static const auto max = bucketizer_type::max_size;
24 static const auto step = bucketizer_type::step_size;
26 static_assert(bucket < (max - min) / step,
"Wrong bucket number!");
28 return instance_.buckets_[bucket];
36 inline memory_block bucketizer<
40 step>::allocate(std::size_t size)
42 if (min <= size && size <= max)
44 auto bucket_index = (size - min) / step;
45 auto& bucket = buckets_[bucket_index];
47 return bucket.allocate(size);
51 return {
nullptr, 0ul };
60 inline void bucketizer<
64 step>::deallocate(memory_block& block)
66 if (min <= block.size && block.size <= max)
68 auto bucket_index = (block.size - min) / step;
69 auto& bucket = buckets_[bucket_index];
71 return bucket.deallocate(block);
80 inline bool bucketizer<
84 step>::owns(memory_block& block)
86 if (min <= block.size && block.size <= max)
88 auto bucket_index = (block.size - min) / step;
89 auto& bucket = buckets_[bucket_index];
91 return bucket.owns(block);