Pigweed
 
Loading...
Searching...
No Matches
pw::allocator::ChunkPool Class Reference

#include <chunk_pool.h>

Inheritance diagram for pw::allocator::ChunkPool:
pw::allocator::Pool pw::Deallocator pw::allocator::TypedPool< T >

Public Member Functions

 ChunkPool (ByteSpan region, const Layout &layout)
 
- Public Member Functions inherited from pw::allocator::Pool
constexpr Pool (const Capabilities &capabilities, const Layout &layout)
 
const Layoutlayout () const
 
void * Allocate ()
 
- Public Member Functions inherited from pw::Deallocator
constexpr const Capabilitiescapabilities () const
 
bool HasCapability (Capability capability) const
 Returns whether a given capabilityis enabled for this object.
 
void Deallocate (void *ptr)
 
void Deallocate (void *ptr, Layout layout)
 
template<typename T >
void Delete (T *ptr)
 
StatusWithSize GetCapacity () const
 
bool IsEqual (const Deallocator &other) const
 
template<typename T , int &... kExplicitGuard, std::enable_if_t< is_bounded_array_v< T >, int > = 0, typename... Args>
void WrapUnique (Args &&...)=delete
 

Static Public Attributes

static constexpr Capabilities kCapabilities
 
static constexpr size_t kMinSize = sizeof(void*)
 
static constexpr size_t kMinAlignment = alignof(void*)
 

Private Member Functions

void * DoAllocate () override
 
void DoDeallocate (void *ptr) override
 
Result< LayoutDoGetInfo (InfoType info_type, const void *ptr) const override
 

Additional Inherited Members

- Public Types inherited from pw::Deallocator
using Capabilities = allocator::Capabilities
 
using Capability = allocator::Capability
 
using Layout = allocator::Layout
 
- Protected Member Functions inherited from pw::Deallocator
constexpr Deallocator ()=default
 TODO(b/326509341): Remove when downstream consumers migrate.
 
constexpr Deallocator (const Capabilities &capabilities)
 
template<typename T , std::enable_if_t<!std::is_array_v< T >, int > = 0>
UniquePtr< T > WrapUnique (T *ptr)
 
template<typename T , int &... kExplicitGuard, typename ElementType = std::remove_extent_t<T>, std::enable_if_t< is_unbounded_array_v< T >, int > = 0>
UniquePtr< T > WrapUnique (ElementType *ptr, size_t size)
 
template<typename T >
UniquePtr< T[]> WrapUniqueArray (T *ptr, size_t size)
 
- Static Protected Attributes inherited from pw::Deallocator
template<typename T >
static constexpr bool is_bounded_array_v
 
template<typename T >
static constexpr bool is_unbounded_array_v
 

Detailed Description

Implementation of Pool that uses a list of free chunks.

The first sizeof(void*) bytes of each free chunk is used to store a pointer to the next free chunk, or null for the last free chunk.

Constructor & Destructor Documentation

◆ ChunkPool()

pw::allocator::ChunkPool::ChunkPool ( ByteSpan  region,
const Layout layout 
)

Construct a Pool that allocates from a region of memory.

Parameters
regionThe memory to allocate from. Must be large enough to allocate at least one chunk with the given layout.
layoutThe size and alignment of the memory to be returned from this pool.

Member Function Documentation

◆ DoAllocate()

void * pw::allocator::ChunkPool::DoAllocate ( )
overrideprivatevirtual

Returns a chunk of memory with this object's fixed layout.

Like pw::allocator::Allocate, returns null if memory is exhausted.

Return values
Theallocated memory.

Implements pw::allocator::Pool.

◆ DoDeallocate()

void pw::allocator::ChunkPool::DoDeallocate ( void *  ptr)
overrideprivate

Releases a previously-allocated block of memory.

The given pointer must have been previously provided by this memory resource; otherwise the behavior is undefined.

Parameters
[in]ptrPointer to previously-allocated memory.

◆ DoGetInfo()

Result< Layout > pw::allocator::ChunkPool::DoGetInfo ( InfoType  info_type,
const void *  ptr 
) const
overrideprivate

Member Data Documentation

◆ kCapabilities

constexpr Capabilities pw::allocator::ChunkPool::kCapabilities
staticconstexpr
Initial value:
=
kImplementsGetRequestedLayout | kImplementsGetUsableLayout |
kImplementsGetAllocatedLayout | kImplementsGetCapacity |
kImplementsRecognizes

The documentation for this class was generated from the following file: