summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVito Caputo <vcaputo@pengaru.com>2019-05-09 19:53:39 -0700
committerVito Caputo <vcaputo@pengaru.com>2019-05-10 14:18:28 -0700
commit0836af39624f5bcf0361d26782695bf0e967f52b (patch)
tree2004016ba704f13f272c1148772bafba2fa0f38e
parent277ead61dc5ff6bba1035acf7b6e194e6de739ad (diff)
libstage: add some rudimentary asserts
-rw-r--r--src/stage.c42
1 files changed, 37 insertions, 5 deletions
diff --git a/src/stage.c b/src/stage.c
index 806b633..a9a5829 100644
--- a/src/stage.c
+++ b/src/stage.c
@@ -14,6 +14,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <assert.h>
#include <stdlib.h>
#include <string.h>
@@ -40,6 +41,9 @@ struct stage_t {
/* 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)
{
+ assert(stage);
+ assert(name);
+
strncpy(stage->name, name, sizeof(stage->name));
stage->render = render_func;
stage->free = free_func;
@@ -69,6 +73,8 @@ static stage_t * _stage_new(const char *name, void *object, stage_render_func_t
/* free a stage, no list manipulation occurs, this is purely cleanup of the stage and its object */
static void _stage_free(stage_t *stage)
{
+ assert(stage);
+
if (stage->free)
stage->free(stage, stage->object);
@@ -82,6 +88,9 @@ stage_t * stage_new(stage_t *parent, int layer, const char *name, void *object,
{
stage_t *stage;
+ assert(parent || !layer);
+ assert(layer < STAGE_LAYERS_MAX);
+
stage = _stage_new(name, object, render_func, free_func);
if (!stage)
return NULL;
@@ -98,12 +107,16 @@ stage_t * stage_new(stage_t *parent, int layer, const char *name, void *object,
/* replace a given stage's object only - retain render/free hooks and everything else, invalidates cache - DOES NOT FREE OLD OBJECT */
void stage_set_object(stage_t *stage, void *object)
{
+ assert(stage);
+
stage->object = object;
}
void stage_get_object(const stage_t *stage, void **res_object)
{
+ assert(stage);
+
*res_object = stage->object;
}
@@ -111,6 +124,8 @@ void stage_get_object(const stage_t *stage, void **res_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)
{
+ assert(stage);
+
if (stage->free)
stage->free(stage, stage->object);
@@ -124,6 +139,8 @@ static void _stage_free_all(stage_t *stage, int force);
/* recursively free the layers of this stage, but not the stage itself */
static void _stage_free_layers(stage_t *stage, int force)
{
+ assert(stage);
+
for (int i = 0; i < STAGE_LAYERS_MAX; i++) {
stage_t *s, *_s;
@@ -136,6 +153,8 @@ static void _stage_free_layers(stage_t *stage, int force)
/* free the stage recursively, skipping locked stages if !force */
static void _stage_free_all(stage_t *stage, int force)
{
+ assert(stage);
+
if (stage->locked && !force)
return;
@@ -160,6 +179,8 @@ stage_t * stage_free(stage_t *stage)
/* set the alpha on a stage */
void stage_set_alpha(stage_t *stage, float alpha)
{
+ assert(stage);
+
stage->alpha = alpha;
}
@@ -167,6 +188,8 @@ void stage_set_alpha(stage_t *stage, float alpha)
/* set a stage's active state (participates in rendering) */
void stage_set_active(stage_t *stage, int active)
{
+ assert(stage);
+
stage->active = active;
}
@@ -174,6 +197,8 @@ void stage_set_active(stage_t *stage, int active)
/* set a stage's locked state (doesn't get freed by clears) */
void stage_set_locked(stage_t *stage, int locked)
{
+ assert(stage);
+
stage->locked = locked;
}
@@ -182,11 +207,11 @@ void stage_set_locked(stage_t *stage, int locked)
/* TODO: maybe support supplying a parent here for switching parents? */
void stage_set_layer(stage_t *stage, int layer)
{
- /* TODO: assert parent, and layer sanity */
- if (stage->parent) {
- (void) dll_del(&stage->layer);
- (void) dll_add_pre(&stage->parent->layers[layer], &stage->layer);
- }
+ assert(stage);
+ assert(stage->parent);
+
+ (void) dll_del(&stage->layer);
+ (void) dll_add_pre(&stage->parent->layers[layer], &stage->layer);
}
@@ -226,6 +251,8 @@ static void _render_stage(const stage_t *stage, float alpha)
{
float a = alpha * stage->alpha;
+ assert(stage);
+
if (stage->render)
stage->render(stage, stage->object, a);
@@ -245,6 +272,8 @@ static void _render_stage(const stage_t *stage, float alpha)
/* recursively render the supplied stage tree, skipping inactive branches */
void stage_render(const stage_t *stage)
{
+ assert(stage);
+
if (!stage->active)
return;
@@ -255,6 +284,9 @@ void stage_render(const stage_t *stage)
/* lookup a stage from a name, returns first match */
stage_t * stage_lookup_name(stage_t *stage, const char *name)
{
+ assert(stage);
+ assert(name);
+
if (!strncmp(stage->name, name, sizeof(stage->name)))
return stage;
© All Rights Reserved