aboutsummaryrefslogtreecommitdiff
path: root/pw_function/public/pw_function/config.h
diff options
context:
space:
mode:
Diffstat (limited to 'pw_function/public/pw_function/config.h')
-rw-r--r--pw_function/public/pw_function/config.h35
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;