12345678910111213141516171819202122232425262728293031323334 |
- #ifndef _DELAYED_CALL_H
- #define _DELAYED_CALL_H
- /*
- * Poor man's closures; I wish we could've done them sanely polymorphic,
- * but...
- */
- struct delayed_call {
- void (*fn)(void *);
- void *arg;
- };
- #define DEFINE_DELAYED_CALL(name) struct delayed_call name = {NULL, NULL}
- /* I really wish we had closures with sane typechecking... */
- static inline void set_delayed_call(struct delayed_call *call,
- void (*fn)(void *), void *arg)
- {
- call->fn = fn;
- call->arg = arg;
- }
- static inline void do_delayed_call(struct delayed_call *call)
- {
- if (call->fn)
- call->fn(call->arg);
- }
- static inline void clear_delayed_call(struct delayed_call *call)
- {
- call->fn = NULL;
- }
- #endif
|