26 struct alignas(2 * sizeof(Node*))
PTag
31 struct alignas(2 * sizeof(Node*))
Node
53 std::memory_order_relaxed))
68 std::memory_order_relaxed))
81 for (
size_t i = 0;
i + 1 <
mSize;
i++)
92 template <
typename...
Args>
99 std::construct_at(&
node->data, std::forward<Args>(
args)...);
113 if (
node->used.compare_exchange_strong(
old_used,
false, std::memory_order_acquire, std::memory_order_relaxed))
158 template <
typename T>
179 template <
typename...
Args>
183 return &
mObjects.emplace_back(std::forward<Args>(
args)...);
General Purpose Allocator (GPA) interface.
Definition Allocator.hpp:24
Atomic, bounded object pool of fixed allocation sizes. Being a sibling to AtomicStack - key differenc...
Definition AtomicPool.hpp:24
Atomic< PTag > mHead
Definition AtomicPool.hpp:40
Node * mNodes
Definition AtomicPool.hpp:38
ScopedArena mArena
Definition AtomicPool.hpp:41
void Destruct(T *ptr)
Destructs the object pointed to by ptr and returns it to the pool.
Definition AtomicPool.hpp:105
~AtomicPool()
Definition AtomicPool.hpp:147
size_t mSize
Definition AtomicPool.hpp:39
T * At(size_t index)
Returns the pointer at the given index in the pool.
Definition AtomicPool.hpp:132
size_t Index(T *ptr) const
Returns the index of the given pointer in the pool.
Definition AtomicPool.hpp:123
T * Construct(Args &&... args)
Constructs an object of type T in the pool with the given arguments.
Definition AtomicPool.hpp:93
void Collect()
Destruct all allocated objects in the pool, collecting garbage.
Definition AtomicPool.hpp:141
AtomicPool(size_t size, Allocator *alloc)
Definition AtomicPool.hpp:77
void DeallocateNode(Node *node)
Definition AtomicPool.hpp:60
Node * AllocateNode()
Definition AtomicPool.hpp:43
Mutex-protected, dynamically sized object pool with stable object pointers.
Definition AtomicPool.hpp:160
DynamicPool(DynamicPool &&)=delete
DynamicPool(Allocator *alloc)
Definition AtomicPool.hpp:166
~DynamicPool()
Definition AtomicPool.hpp:226
List< T > mObjects
Definition AtomicPool.hpp:162
DynamicPool(DynamicPool const &)=delete
T * Construct(Args &&... args)
Constructs an object of type T in the pool with the given arguments.
Definition AtomicPool.hpp:180
DynamicPool & operator=(DynamicPool &&)=delete
DynamicPool & operator=(DynamicPool const &)=delete
Allocator * mAllocator
Definition AtomicPool.hpp:161
Mutex mMutex
Definition AtomicPool.hpp:163
size_t Size() const
Definition AtomicPool.hpp:220
void Destruct(T *ptr)
Destructs the object pointed to by ptr and releases its storage.
Definition AtomicPool.hpp:189
void Collect()
Destructs all allocated objects in the pool.
Definition AtomicPool.hpp:211
Lock-free atomic primitives and implementations of data structures.
Definition Allocator.hpp:5
std::mutex Mutex
Definition Thread.hpp:10
std::list< T, StlAllocator< T > > List
std::list with explicit Foundation::Core::StlAllocator constructor
Definition Container.hpp:188
std::atomic< T > Atomic
Alias of std::atomic<T>.
Definition Atomic.hpp:26
size_type size
Definition Allocator.hpp:19
pointer memory
Definition Allocator.hpp:18
Definition AtomicPool.hpp:32
Atomic< uintptr_t > used
Definition AtomicPool.hpp:34
Node * next
Definition AtomicPool.hpp:33
T data
Definition AtomicPool.hpp:35
Definition AtomicPool.hpp:27
Node * p
Definition AtomicPool.hpp:28
uintptr_t tag
Definition AtomicPool.hpp:29
RAII wrapper for an arena allocated from an Allocator.
Definition Allocator.hpp:45
Arena arena
Definition Allocator.hpp:47