diff options
Diffstat (limited to 'pw_function/public/pw_function/config.h')
-rw-r--r-- | pw_function/public/pw_function/config.h | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/pw_function/public/pw_function/config.h b/pw_function/public/pw_function/config.h index b83489adc..e62f38d92 100644 --- a/pw_function/public/pw_function/config.h +++ b/pw_function/public/pw_function/config.h @@ -17,12 +17,15 @@ #include <cstddef> -// The maximum size of a callable that can be inlined within a function. This is -// also the size of the Function object itself. Callables larger than this are -// stored externally to the function. +#include "lib/fit/function.h" + +// The maximum size of a callable that can be inlined within a function. +// Callables larger than this are stored externally to the function (if dynamic +// allocation is enabled). // -// This defaults to 1 pointer, which is capable of storing common callables -// such as function pointers and lambdas with a single capture. +// This defaults to the size of 1 pointer, which is capable of storing common +// callables such as function pointers and lambdas with a single pointer's size +// of captured data. #ifndef PW_FUNCTION_INLINE_CALLABLE_SIZE #define PW_FUNCTION_INLINE_CALLABLE_SIZE (sizeof(void*)) #endif // PW_FUNCTION_INLINE_CALLABLE_SIZE @@ -30,12 +33,30 @@ static_assert(PW_FUNCTION_INLINE_CALLABLE_SIZE > 0 && PW_FUNCTION_INLINE_CALLABLE_SIZE % alignof(void*) == 0); -// Whether functions should allocate memory dynamically (using operator new) if -// a callable is larger than the inline size. +// Whether functions should allocate memory dynamically if a callable is larger +// than the inline size. +// +// Enabling this allows functions to support callables larger than +// `PW_FUNCTION_INLINE_CALLABLE_SIZE` by dynamically allocating storage space +// for them. The Allocator type used can be provided as a template argument, and +// the default type can be specified by overriding +// `PW_FUNCTION_DEFAULT_ALLOCATOR_TYPE`. The Allocator must satisfy the C++ +// named requirements for Allocator: +// https://en.cppreference.com/w/cpp/named_req/Allocator #ifndef PW_FUNCTION_ENABLE_DYNAMIC_ALLOCATION #define PW_FUNCTION_ENABLE_DYNAMIC_ALLOCATION 0 #endif // PW_FUNCTION_ENABLE_DYNAMIC_ALLOCATION +// The default Allocator used to dynamically allocate the callable, if dynamic +// allocation is enabled. Its `value_type` is irrelevant, since it must support +// rebinding. +// +// This definition is useful to ensure that a project can specify an Allocator +// that will be used even by Pigweed source code. +#ifndef PW_FUNCTION_DEFAULT_ALLOCATOR_TYPE +#define PW_FUNCTION_DEFAULT_ALLOCATOR_TYPE fit::default_callable_allocator +#endif // PW_FUNCTION_DEFAULT_ALLOCATOR_TYPE + namespace pw::function_internal::config { inline constexpr size_t kInlineCallableSize = PW_FUNCTION_INLINE_CALLABLE_SIZE; |