summaryrefslogtreecommitdiff
path: root/src/stage.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/stage.c')
-rw-r--r--src/stage.c16
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);
}
© All Rights Reserved