C/C++ API Reference
Loading...
Searching...
No Matches
pw::allocator::Pool Class Referenceabstract

Overview

Abstract interface for fixed-layout memory allocation.

The interface makes no guarantees about its implementation. Consumers of the generic interface must not make any assumptions around allocator behavior, thread safety, or performance.

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

Public Member Functions

constexpr const Layoutlayout () const
 
void * Allocate ()
 
template<typename T , int &... kExplicitGuard, typename... Args>
std::enable_if_t<!std::is_array_v< T >, T * > New (Args &&... args)
 
template<typename T , int &... kExplicitGuard, typename ElementType = std::remove_extent_t<T>>
std::enable_if_t< pw::is_bounded_array_v< T >, ElementType * > New ()
 
template<typename T , int &... kExplicitGuard, typename ElementType = std::remove_extent_t<T>>
std::enable_if_t< pw::is_unbounded_array_v< T >, ElementType * > New ()
 
template<typename T , int &... kExplicitGuard, typename... Args>
std::enable_if_t<!std::is_array_v< T >, UniquePtr< T > > MakeUnique (Args &&... args)
 
template<typename T >
std::enable_if_t< pw::is_bounded_array_v< T >, UniquePtr< T > > MakeUnique ()
 
template<typename T >
std::enable_if_t< pw::is_unbounded_array_v< T >, UniquePtr< T > > MakeUnique ()
 
- Public Member Functions inherited from pw::Deallocator
constexpr const Capabilitiescapabilities () const
 
constexpr bool HasCapability (Capability capability) const
 Returns whether a given capability is enabled for this object.
 
void Deallocate (void *ptr)
 
template<typename ElementType >
void DeleteArray (ElementType *ptr, size_t count)
 
StatusWithSize GetCapacity () const
 
bool IsEqual (const Deallocator &other) const
 
template<typename T , int &... kExplicitGuard, std::enable_if_t<!std::is_array_v< T >, int > = 0>
void Delete (T *ptr)
 
template<typename T , int &... kExplicitGuard, typename ElementType = std::remove_extent_t<T>, std::enable_if_t< is_bounded_array_v< T >, int > = 0>
void Delete (ElementType *ptr)
 
template<typename T , int &... kExplicitGuard, typename ElementType = std::remove_extent_t<T>, std::enable_if_t< is_unbounded_array_v< T >, int > = 0>
void Delete (ElementType *ptr, size_t count)
 

Protected Member Functions

constexpr Pool (const Capabilities &capabilities, const Layout &layout)
 
virtual void * DoAllocate ()=0
 
- Protected Member Functions inherited from pw::Deallocator
constexpr Deallocator ()=default
 TODO(b/326509341): Remove when downstream consumers migrate.
 
constexpr Deallocator (const Capabilities &capabilities)
 

Additional Inherited Members

- Public Types inherited from pw::Deallocator
using Capabilities = allocator::Capabilities
 
using Capability = allocator::Capability
 
using Layout = allocator::Layout
 
- Static Protected Attributes inherited from pw::Deallocator
template<typename T >
static constexpr bool is_bounded_array_v = ::pw::is_bounded_array_v<T>
 
template<typename T >
static constexpr bool is_unbounded_array_v = ::pw::is_unbounded_array_v<T>
 

Member Function Documentation

◆ Allocate()

void * pw::allocator::Pool::Allocate ( )
inline

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.

◆ DoAllocate()

virtual void * pw::allocator::Pool::DoAllocate ( )
protectedpure virtual

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.

Implemented in pw::allocator::AllocatorAsPool, pw::allocator::AsyncPool, and pw::allocator::ChunkPool.

◆ MakeUnique()

template<typename T , int &... kExplicitGuard, typename... Args>
std::enable_if_t<!std::is_array_v< T >, UniquePtr< T > > pw::allocator::Pool::MakeUnique ( Args &&...  args)

Constructs an object and wraps it in a UniquePtr

This method is similar to Allocator::MakeUnique, except that it is specific to the pool's layout.

Template Parameters
TType of object to allocate. Either Layout::Of<T> must match the pool's layout, or T must be an unbounded array whose elements a size and alignment that evenly divide the pool's layout's size and alignment respectively.

◆ New()

template<typename T , int &... kExplicitGuard, typename... Args>
std::enable_if_t<!std::is_array_v< T >, T * > pw::allocator::Pool::New ( Args &&...  args)

Allocates and constructs an object.

This method is similar to Allocator::New, except that it is specific to the pool's layout.

Template Parameters
TType of object to allocate. Either Layout::Of<T> must match the pool's layout, or T must be an unbounded array whose elements a size and alignment that evenly divide the pool's layout's size and alignment respectively.

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