odyssey/src/mm_call.h

53 lines
833 B
C
Raw Normal View History

#ifndef MM_CALL_H_
#define MM_CALL_H_
/*
* machinarium.
*
* cocallerative multitasking engine.
*/
typedef struct mm_call_t mm_call_t;
typedef void (*mm_cancel_t)(void*, void *arg);
struct mm_call_t {
int active;
mm_cancel_t cancel_function;
void *arg;
};
static inline void
mm_call_init(mm_call_t *call)
{
call->active = 0;
call->cancel_function = NULL;
call->arg = NULL;
}
static inline void
mm_call_begin(mm_call_t *call, mm_cancel_t function, void *arg)
{
call->active = 1;
call->cancel_function = function;
call->arg = arg;
}
static inline void
mm_call_end(mm_call_t *call)
{
call->active = 0;
call->cancel_function = NULL;
call->arg = NULL;
}
static inline void
mm_call_cancel(mm_call_t *call, void *arg)
{
if (! call->active)
return;
call->cancel_function(arg, call->arg);
}
#endif