summaryrefslogtreecommitdiff
path: root/example.c
diff options
context:
space:
mode:
authorVito Caputo <vcaputo@pengaru.com>2020-11-04 16:12:56 -0800
committerVito Caputo <vcaputo@pengaru.com>2020-11-04 16:12:56 -0800
commit71d53baee273ab397533c2585293457a620a66df (patch)
treea3327f2be93171f4b23e77d4ddaac1ab7024560f /example.c
parent18d2918a02028bf649607bb9959b926d10f184f6 (diff)
thunk: introduce split instantiation and payloads
The existing THUNK() instantiation macro has really nice ergonomics taking the form of the bare function call wrapped by THUNK(). It's desirable however to sometimes enlarge the instance's allocation to accomodate some user-specified data with an instance-boound life cycle. There didn't seem to be a clean way to provide that with the existing THUNK() interface. This commit introduces a split THUNK() variant for such scenarios: THUNK_ALLOC(function_name, payload_pointer, payload_size) and THUNK_INIT(function_name(thunk_instance, [function_args] ...)) It's expected that these be used in pairs, like so: char *buf; thunk_t *t = THUNK_ALLOC(foo_func, &buf, BUFSIZ); THUNK_INIT(foo_func(t, foo_arg1, foo_arg2)); Note the THUNK_INIT's foo_func call has the thunk_t * passed as the first parameter. This isn't part of foo_func's THUNK_DEFINE signature, it's only part of the initializer for the function, followed by the real parameters from the THUNK_DEFINE's signature if there are any. This differs from the simpler THUNK() variant, where you'd do: THUNK(foo_func(foo_arg1, foo_arg2)); Also note the THUNK_ALLOC() above has stored a pointer to BUFSIZ bytes of payload memory @ *buf. This could then be supplied into foo_func, which is sometimes convenient: THUNK_INIT(foo_func(t, foo_arg1, buf)); The payloads are particularly useful when chaining up multiple thunks, and there's a need for some shared state across them for inputs/outputs, that you'd like automatically cleaned up when the instance the payload belongs to executes and returns freeing itself.
Diffstat (limited to 'example.c')
0 files changed, 0 insertions, 0 deletions
© All Rights Reserved