A pool that is implemented by forwarding calls to another pool.
This type can be used as a generic base type for forwarding pools that provide additional behavior to another pool. It provides default implementations of the virtual methods from Deallocator and Pool, allowing authors of derived types to avoid boilerplate.
pool accessor or call this type's implementation methods directly:
Protected Member Functions | |
| constexpr | ForwardingPool (const Capabilities &capabilities, Layout layout) noexcept |
| constexpr | ForwardingPool (Pool &pool) noexcept |
| constexpr void | Init (Pool &pool) |
| constexpr Pool & | pool () |
| constexpr const Pool & | pool () const |
| void * | DoAllocate () override |
| void | DoDeallocate (void *ptr) override |
| Result< Layout > | DoGetInfo (InfoType info_type, const void *ptr) const 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 |
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) |
| template<typename ElementType > | |
| void | Destroy (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 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> |
|
inlineconstexprprotectednoexcept |
Creates a forwarding pool without setting its wrapped pool.
This constructor should be used when the forwarding pool needs to be created before the pool being wrapped. The pool must be set using Init before any other method is called. The given capabilities and layout must match those of the pool subsequently provided to Init.
|
inlineexplicitconstexprprotectednoexcept |
Creates a forwarding pool that wraps a given pool.
This constructor should be used when the forwarding pool is created after the pool being wrapped.
The pool must remain valid for the lifetime of this object.
|
inlineoverrideprotectedvirtual |
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.
|
inlineoverrideprotectedvirtual |
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.
|
inlineoverrideprotectedvirtual |
Returns deallocator-specific information about allocations.
Deallocators may support any number of InfoTypes. See that type for what each supported type returns. For unsupported types, this method returns UNIMPLEMENTED.
Reimplemented from pw::Deallocator.
|
inlineconstexprprotected |
Sets the pool being wrapped.
It is an error to call this method if a pool was provided to the constructor. The capabilities of the given pool must match those of previously provided to the constructor.
The pool must remain valid for the lifetime of this object.