Skip to content

Commit 78b9a57

Browse files
committed
Updates.
1 parent e617f79 commit 78b9a57

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

src/ramp.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,21 @@ void *ramp_defer(ramp_t *Ramp, size_t Size, void (*CleanupFn)(void *)) {
9696
return Defer + 1;
9797
}
9898

99+
typedef struct {
100+
void (*CleanupFn)(void *);
101+
void *Arg;
102+
} ramp_on_reset_t;
103+
104+
static void ramp_on_reset_fn(ramp_on_reset_t *OnReset) {
105+
OnReset->CleanupFn(OnReset->Arg);
106+
}
107+
108+
void ramp_on_reset(ramp_t *Ramp, void (*CleanupFn)(void *), void *Arg) {
109+
ramp_on_reset_t *OnReset = ramp_defer(Ramp, sizeof(ramp_on_reset_t), (void *)ramp_on_reset_fn);
110+
OnReset->CleanupFn = CleanupFn;
111+
OnReset->Arg = Arg;
112+
}
113+
99114
void ramp_clear(ramp_t *Ramp) {
100115
for (ramp_defer_t *Defer = Ramp->Defers; Defer; Defer = Defer->Next) Defer->CleanupFn(Defer + 1);
101116
Ramp->Defers = NULL;

src/ramp.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,15 @@ void *ramp_strdup(ramp_t *Ramp, const char *String) __attribute__((malloc));
3737
*/
3838
void *ramp_defer(ramp_t *Ramp, size_t Size, void (*CleanupFn)(void *));
3939

40+
/**
41+
* \brief adds a function to call on reset with a single argument
42+
*
43+
* \param Ramp ramp_t object allocated with ramp_new.
44+
* \param CleanupFn Function to call on reset.
45+
* \param Arg Argument to pass to CleanupFn.
46+
*/
47+
void ramp_on_reset(ramp_t *Ramp, void (*CleanupFn)(void *), void *Arg);
48+
4049
/**
4150
* \brief frees memory allocated within ramp_t instance while keeping memory blocks for reuse.
4251
*

0 commit comments

Comments
 (0)