Pigweed
C/C++ API Reference
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | List of all members
pw::allocator::test::FaultInjectingAllocator Class Reference
Inheritance diagram for pw::allocator::test::FaultInjectingAllocator:
pw::Allocator pw::Deallocator

Public Member Functions

constexpr FaultInjectingAllocator (Allocator &allocator)
 
void EnableAll ()
 Forward Allocate, Resize, and Reallocate calls to the allocator.
 
void DisableAll ()
 
void EnableAllocate ()
 Forward Allocate calls to the allocator.
 
void DisableAllocate ()
 Return nullptr for Allocate calls.
 
void EnableResize ()
 Forward Resize calls to the allocator.
 
void DisableResize ()
 Return false for Resize calls.
 
void EnableReallocate ()
 Forward Reallocate calls to the allocator.
 
void DisableReallocate ()
 Return nullptr for Reallocate calls.
 
Allocatorreal_allocator ()
 Returns a reference to the wrapped allocator.
 
- Public Member Functions inherited from pw::Allocator
void * Allocate (Layout layout)
 
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< 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 (size_t count)
 
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 (size_t count, size_t alignment)
 Constructs an alignment-byte aligned array of count objects.
 
template<typename T >
T * NewArray (size_t count)
 
template<typename T >
T * NewArray (size_t count, size_t alignment)
 
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_unbounded_array_v< T >, int > = 0>
UniquePtr< T > MakeUnique (size_t size)
 
template<typename T , int &... kExplicitGuard, std::enable_if_t< is_unbounded_array_v< T >, int > = 0>
UniquePtr< T > MakeUnique (size_t size, size_t alignment)
 
template<typename T , int &... kExplicitGuard, std::enable_if_t< is_bounded_array_v< T >, int > = 0>
UniquePtr< T > MakeUnique ()
 
template<typename T >
UniquePtr< T[]> MakeUniqueArray (size_t size)
 
template<typename T >
UniquePtr< T[]> MakeUniqueArray (size_t size, size_t alignment)
 
template<typename T , int &... kExplicitGuard, std::enable_if_t<!std::is_array_v< T >, int > = 0, typename... Args>
SharedPtr< T > MakeShared (Args &&... args)
 
template<typename T , int &... kExplicitGuard, std::enable_if_t< is_unbounded_array_v< T >, int > = 0>
SharedPtr< T > MakeShared (size_t size)
 
template<typename T , int &... kExplicitGuard, std::enable_if_t< is_unbounded_array_v< T >, int > = 0>
SharedPtr< T > MakeShared (size_t size, size_t alignment)
 
template<typename T , int &... kExplicitGuard, std::enable_if_t< is_bounded_array_v< T >, int > = 0>
SharedPtr< T > MakeShared ()
 
bool Resize (void *ptr, size_t new_size)
 
bool Resize (void *ptr, Layout layout, size_t new_size)
 
void * Reallocate (void *ptr, Layout new_layout)
 
void * Reallocate (void *ptr, Layout old_layout, size_t new_size)
 
size_t GetAllocated () const
 
- Public Member Functions inherited from pw::Deallocator
constexpr const Capabilitiescapabilities () 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

void * DoAllocate (Layout layout) override
 
bool DoResize (void *ptr, size_t new_size) override
 
void * DoReallocate (void *ptr, Layout new_layout) override
 

Additional Inherited Members

- Public Types inherited from pw::Deallocator
using Capabilities = allocator::Capabilities
 
using Capability = allocator::Capability
 
using Layout = allocator::Layout
 
- Protected Member Functions inherited from pw::Allocator
constexpr Allocator ()=default
 TODO(b/326509341): Remove when downstream consumers migrate.
 
constexpr Allocator (const Capabilities &capabilities)
 
- Protected Member Functions inherited from pw::Deallocator
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)
 
- Static Protected Attributes inherited from pw::Deallocator
template<typename T >
static constexpr bool is_bounded_array_v
 
template<typename T >
static constexpr bool is_unbounded_array_v
 

Detailed Description

Forwarding allocator for injecting failures. Forwards calls to a real allocator implementation, or artificially fails if requested.

Warning
FaultInjectingAllocator is NOT thread safe, even if used with SynchronizedAllocator.

Member Function Documentation

◆ DisableAll()

void pw::allocator::test::FaultInjectingAllocator::DisableAll ( )
inline

Return errors for Allocate, Resize, and Reallocate calls without forwarding to the allocator.

◆ DoAllocate()

void * pw::allocator::test::FaultInjectingAllocator::DoAllocate ( Layout  layout)
inlineoverrideprivatevirtual

Virtual Allocate function implemented by derived classes.

Parameters
[in]layoutDescribes the memory to be allocated. Guaranteed to have a non-zero size.

Implements pw::Allocator.

◆ DoReallocate()

void * pw::allocator::test::FaultInjectingAllocator::DoReallocate ( void *  ptr,
Layout  new_layout 
)
inlineoverrideprivatevirtual

Virtual Reallocate function that can be overridden by derived classes.

The default implementation will first try to Resize the data. If that is unsuccessful, it will allocate an entirely new block, copy existing data, and deallocate the given block.

Parameters
[in]ptrPointer to memory, guaranteed to not be null.
[in]new_layoutDescribes the memory to be allocated. Guaranteed to have a non-zero size.

Reimplemented from pw::Allocator.

◆ DoResize()

bool pw::allocator::test::FaultInjectingAllocator::DoResize ( void *  ptr,
size_t  new_size 
)
inlineoverrideprivatevirtual

Virtual Resize function implemented by derived classes.

The default implementation simply returns false, indicating that resizing is not supported.

Parameters
[in]ptrPointer to memory, guaranteed to not be null.
[in]new_sizeRequested size, guaranteed to be non-zero..

Reimplemented from pw::Allocator.


The documentation for this class was generated from the following file: