libcopp 2.3.1
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
stack_allocator_pool.h
Go to the documentation of this file.
1// Copyright 2023 owent
2
3#pragma once
4
5#include <libcopp/utils/config/libcopp_build_features.h>
8
9#include <assert.h>
10#include <cstddef>
11#include <memory>
12
13#ifdef LIBCOPP_HAS_ABI_HEADERS
14# include LIBCOPP_ABI_PREFIX
15#endif
16
17LIBCOPP_COPP_NAMESPACE_BEGIN
18struct stack_context;
19
20namespace allocator {
21
26template <typename TPool>
27class LIBCOPP_COPP_API_HEAD_ONLY stack_allocator_pool {
28 public:
29 using pool_type = TPool;
30
31 // Compability with libcopp-1.x
33
34 public:
35 stack_allocator_pool() LIBCOPP_MACRO_NOEXCEPT {}
36 stack_allocator_pool(const LIBCOPP_COPP_NAMESPACE_ID::memory::default_strong_rc_ptr<pool_type> &p)
37 LIBCOPP_MACRO_NOEXCEPT : pool_(p) {}
39
46 void attach(const LIBCOPP_COPP_NAMESPACE_ID::memory::default_strong_rc_ptr<pool_type> &p) LIBCOPP_MACRO_NOEXCEPT {
47 pool_ = p;
48 }
49
56 void allocate(stack_context &ctx, std::size_t) LIBCOPP_MACRO_NOEXCEPT {
57 assert(pool_);
58 if (pool_) {
59 pool_->allocate(ctx);
60 }
61 }
62
67 void deallocate(stack_context &ctx) LIBCOPP_MACRO_NOEXCEPT {
68 assert(pool_);
69 if (pool_) {
70 pool_->deallocate(ctx);
71 }
72 }
73
74 private:
75 LIBCOPP_COPP_NAMESPACE_ID::memory::default_strong_rc_ptr<pool_type> pool_;
76};
77} // namespace allocator
78LIBCOPP_COPP_NAMESPACE_END
79
80#ifdef LIBCOPP_HAS_ABI_HEADERS
81# include LIBCOPP_ABI_SUFFIX
82#endif
memory allocator this allocator will maintain buffer using malloc/free function
stack_allocator_pool() LIBCOPP_MACRO_NOEXCEPT
LIBCOPP_COPP_NAMESPACE_ID::memory::default_strong_rc_ptr< pool_type > pool_
void deallocate(stack_context &ctx) LIBCOPP_MACRO_NOEXCEPT
void attach(const LIBCOPP_COPP_NAMESPACE_ID::memory::default_strong_rc_ptr< pool_type > &p) LIBCOPP_MACRO_NOEXCEPT
void allocate(stack_context &ctx, std::size_t) LIBCOPP_MACRO_NOEXCEPT
stack_allocator_pool(const LIBCOPP_COPP_NAMESPACE_ID::memory::default_strong_rc_ptr< pool_type > &p) LIBCOPP_MACRO_NOEXCEPT