diff options
Diffstat (limited to 'src/stage.c')
-rw-r--r-- | src/stage.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/stage.c b/src/stage.c index e6da788..10a7f0a 100644 --- a/src/stage.c +++ b/src/stage.c @@ -34,12 +34,13 @@ struct stage_t { stage_render_func_t *render; /* render object */ stage_free_func_t *free; /* free object */ + stage_match_func_t *match; /* match object against key */ void *object; /* object */ }; /* minimally initialize a stage to carry an object */ -static void _stage_set_object(stage_t *stage, const char *name, void *object, stage_render_func_t *render_func, stage_free_func_t *free_func) +static void _stage_set_object(stage_t *stage, const char *name, void *object, stage_render_func_t *render_func, stage_free_func_t *free_func, stage_match_func_t *match_func) { assert(stage); assert(name); @@ -47,12 +48,13 @@ static void _stage_set_object(stage_t *stage, const char *name, void *object, st strncpy(stage->name, name, sizeof(stage->name)); stage->render = render_func; stage->free = free_func; + stage->match = match_func; stage->object = object; } /* allocate a stage, this purely creates a stage in isolation and assigns its associated name, object and functions */ -static stage_t * _stage_new(const char *name, void *object, stage_render_func_t *render_func, stage_free_func_t *free_func) +static stage_t * _stage_new(const char *name, void *object, stage_render_func_t *render_func, stage_free_func_t *free_func, stage_match_func_t *match_func) { stage_t *stage; @@ -64,7 +66,7 @@ static stage_t * _stage_new(const char *name, void *object, stage_render_func_t for (int i = 0; i < STAGE_LAYERS_MAX; i++) dll_init(&stage->layers[i]); - _stage_set_object(stage, name, object, render_func, free_func); + _stage_set_object(stage, name, object, render_func, free_func, match_func); return stage; } @@ -84,14 +86,14 @@ static void _stage_free(stage_t *stage) /* returns a new stage, attached at the specified layer under parent if supplied */ /* layer has no effect when parent == NULL */ -stage_t * stage_new(stage_t *parent, int layer, const char *name, void *object, stage_render_func_t *render_func, stage_free_func_t *free_func) +stage_t * stage_new(stage_t *parent, int layer, const char *name, void *object, stage_render_func_t *render_func, stage_free_func_t *free_func, stage_match_func_t *match_func) { stage_t *stage; assert(parent || !layer); assert(layer < STAGE_LAYERS_MAX); - stage = _stage_new(name, object, render_func, free_func); + stage = _stage_new(name, object, render_func, free_func, match_func); if (!stage) return NULL; @@ -105,14 +107,14 @@ stage_t * stage_new(stage_t *parent, int layer, const char *name, void *object, /* replaces a given stage's object-related properties but otherwise keeping the existing state */ -void stage_replace(stage_t *stage, const char *name, void *object, stage_render_func_t *render_func, stage_free_func_t *free_func) +void stage_replace(stage_t *stage, const char *name, void *object, stage_render_func_t *render_func, stage_free_func_t *free_func, stage_match_func_t *match_func) { assert(stage); if (stage->free) stage->free(stage, stage->object); - _stage_set_object(stage, name, object, render_func, free_func); + _stage_set_object(stage, name, object, render_func, free_func, match_func); } |