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) |
| Result< Layout > | GetInfo (InfoType info_type, const void *ptr) const |
| Result< Layout > | GetRequestedLayout (const void *ptr) const |
| Result< Layout > | GetUsableLayout (const void *ptr) const |
| Result< Layout > | GetAllocatedLayout (const void *ptr) const |
| bool | Recognizes (const void *ptr) const |
| virtual void | DoDeallocate (void *ptr)=0 |
| virtual Result< Layout > | DoGetInfo (InfoType, const void *) const |
Additional Inherited Members | |
Public Types inherited from pw::Deallocator | |
| using | Capabilities = allocator::Capabilities |
| using | Capability = allocator::Capability |
| using | Layout = allocator::Layout |
Protected Types inherited from pw::Deallocator | |
| enum class | InfoType { kRequestedLayoutOf , kUsableLayoutOf , kAllocatedLayoutOf , kCapacity , kRecognizes } |
Static Protected Member Functions inherited from pw::Deallocator | |
| static Result< Layout > | GetInfo (const Deallocator &deallocator, InfoType info_type, const void *ptr) |
| static Result< Layout > | GetRequestedLayout (const Deallocator &deallocator, const void *ptr) |
| static Result< Layout > | GetUsableLayout (const Deallocator &deallocator, const void *ptr) |
| static Result< Layout > | GetAllocatedLayout (const Deallocator &deallocator, const void *ptr) |
| static bool | Recognizes (const Deallocator &deallocator, const void *ptr) |
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. |