From 28c0347ab1af0adec0249788f8351b0bde06297e Mon Sep 17 00:00:00 2001 From: Vito Caputo Date: Tue, 27 Nov 2018 23:47:46 -0800 Subject: libix3: add ix3_reset() This basically amounts to a pad_reset() wrapper. Also incorporated resets into the test, while fixing a stupid bug there. --- src/ix3.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/ix3.c') diff --git a/src/ix3.c b/src/ix3.c index b5ac3cd..29ee4e7 100644 --- a/src/ix3.c +++ b/src/ix3.c @@ -167,7 +167,9 @@ static void init_node(ix3_node_t *node, bb3f_t *aabb) assert(node); assert(aabb); + node->children = NULL; INIT_LIST_HEAD(&node->objects); + node->n_objects = 0; node->center.x = aabb->min.x; node->center.y = aabb->min.y; @@ -508,6 +510,23 @@ fail_ix3: } +/* Reset the index ix3 to its state as-returned by ix3_new() + * + * Note this doesn't free memory, it just discards the index while keeping all + * the memory around in the caches for efficient reuse. + */ +void ix3_reset(ix3_t *ix3) +{ + assert(ix3); + + pad_reset(ix3->node_pad); + pad_reset(ix3->ref_pad); + pad_reset(ix3->object_pad); + + init_node(&ix3->root, &ix3->aabb); +} + + /* Free the index ix3 and everything associated with it */ /* Note the external objects which have been indexed are not freed */ void ix3_free(ix3_t *ix3) -- cgit v1.2.3