diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/stage.c | 16 | ||||
-rw-r--r-- | src/stage.h | 5 |
2 files changed, 12 insertions, 9 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); } diff --git a/src/stage.h b/src/stage.h index 59329d7..b273b7b 100644 --- a/src/stage.h +++ b/src/stage.h @@ -24,9 +24,10 @@ typedef struct stage_t stage_t; typedef void (stage_render_func_t)(const stage_t *stage, void *object, float alpha); typedef void (stage_free_func_t)(const stage_t *stage, void *object); +typedef int (stage_match_func_t)(const stage_t *stage, void *object, void *key); -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); -void stage_replace(stage_t *stage, 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); +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); stage_t * stage_free(stage_t *stage); void stage_render(const stage_t *stage); void stage_clear(stage_t *stage); |