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.
Public Member Functions | |
| constexpr const Layout & | layout () 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 Capabilities & | capabilities () 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> |
|
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. |
|
protectedpure virtual |
Returns a chunk of memory with this object's fixed layout.
Like pw::allocator::Allocate, returns null if memory is exhausted.
| The | allocated memory. |
Implemented in pw::allocator::AllocatorAsPool, pw::allocator::AsyncPool, and pw::allocator::ChunkPool.
| 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.
| 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. |
| 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.
| 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. |