Pigweed
C/C++ API Reference
|
Public Member Functions | |
constexpr | Pool (const Capabilities &capabilities, const Layout &layout) |
constexpr const Layout & | layout () const |
void * | Allocate () |
template<typename T , int &... kExplicitGuard, std::enable_if_t<!std::is_array_v< T >, int > = 0, typename... Args> | |
T * | New (Args &&... args) |
template<typename T , int &... kExplicitGuard, typename ElementType = std::remove_extent_t<T>, std::enable_if_t< is_bounded_array_v< T >, int > = 0> | |
ElementType * | New () |
template<typename T , int &... kExplicitGuard, typename ElementType = std::remove_extent_t<T>, std::enable_if_t< is_unbounded_array_v< T >, int > = 0> | |
ElementType * | New () |
template<typename T , int &... kExplicitGuard, std::enable_if_t<!std::is_array_v< T >, int > = 0, typename... Args> | |
UniquePtr< T > | MakeUnique (Args &&... args) |
template<typename T , int &... kExplicitGuard, std::enable_if_t< is_bounded_array_v< T >, int > = 0> | |
UniquePtr< T > | MakeUnique () |
template<typename T , int &... kExplicitGuard, std::enable_if_t< is_unbounded_array_v< T >, int > = 0> | |
UniquePtr< T > | MakeUnique () |
![]() | |
constexpr const Capabilities & | capabilities () const |
bool | HasCapability (Capability capability) const |
Returns whether a given capability is enabled for this object. | |
void | Deallocate (void *ptr) |
void | Deallocate (void *ptr, Layout layout) |
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) |
Private Member Functions | |
virtual void * | DoAllocate ()=0 |
Virtual Allocate function that can be overridden by derived classes. | |
Additional Inherited Members | |
![]() | |
using | Capabilities = allocator::Capabilities |
using | Capability = allocator::Capability |
using | Layout = allocator::Layout |
![]() | |
constexpr | Deallocator ()=default |
TODO(b/326509341): Remove when downstream consumers migrate. | |
constexpr | Deallocator (const Capabilities &capabilities) |
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 > | |
static constexpr bool | is_bounded_array_v |
template<typename T > | |
static constexpr bool | is_unbounded_array_v |
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.
|
inline |
Returns a chunk of memory with this object's fixed layout.
Like pw::allocator::Allocate
, returns null if memory is exhausted.
The | allocated memory. |
|
privatepure virtual |
Virtual Allocate
function that can be overridden by derived classes.
Implemented in pw::allocator::AllocatorAsPool, pw::allocator::AsyncPool, and pw::allocator::ChunkPool.
|
inline |
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.
T | Type 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. |
|
inline |
Allocates and constructs an object.
This method is similar to Allocator::New
, except that it is specific to the pool's layout.
T | Type 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. |