A wrapper around a Pool that allows for asynchronous allocation.
This class is not thread safe. It should only be used from the dispatcher thread, or wrapped to provided synchronized access.
Public Member Functions | |
| constexpr | AsyncPool (Pool &pool) |
| async2::Poll< void * > | PendAllocate (async2::Context &context) |
Public Member Functions inherited from pw::allocator::Pool | |
| 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 | |
| void * | DoAllocate () override |
| void | DoDeallocate (void *ptr) override |
Protected Member Functions inherited from pw::allocator::Pool | |
| 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> |
|
overrideprotectedvirtual |
Returns a chunk of memory with this object's fixed layout.
Like pw::allocator::Allocate, returns null if memory is exhausted.
| The | allocated memory. |
Implements pw::allocator::Pool.
|
overrideprotectedvirtual |
Releases a previously-allocated block of memory.
The given pointer must have been previously provided by this memory resource; otherwise the behavior is undefined.
| [in] | ptr | Pointer to previously-allocated memory. |
Implements pw::Deallocator.
| async2::Poll< void * > pw::allocator::AsyncPool::PendAllocate | ( | async2::Context & | context | ) |
Asynchronously allocates a chunk of memory with the fixed layout from the pool.