From a95f3f18ea19671ea22ec98d278abe4aead29639 Mon Sep 17 00:00:00 2001 From: Gregory Lirent Date: Wed, 8 Jun 2022 09:58:49 +0300 Subject: [PATCH] Refacor set --- src/set/base.c | 22 ++++++++++++---------- src/set/copy.c | 12 +++++------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/set/base.c b/src/set/base.c index 23b1dd9..07752bb 100644 --- a/src/set/base.c +++ b/src/set/base.c @@ -5,13 +5,13 @@ #include "../__internal/rbtree.h" -void vset_init(vtype_set* x, vtype t) { +void vset_init(set_t* x, vtype t) { x->root = rbnode_empty; x->type = t; } -void vset_free(vtype_set* x) { +void vset_free(set_t* x) { rbnode_t* t; rbnode_t* c; @@ -42,24 +42,26 @@ void vset_free(vtype_set* x) { } -size_t vset_size(const vtype_set* x) { +size_t vset_size(const set_t* x) { stack_t z = { .prev = 0, .value = x->root }; size_t n = 0; rbnode_t* c; - while ((c = stack_pop(&z))) { - ++n; - if (!rbnode_is_empty(c->left)) - stack_push(&z, c->left); - if (!rbnode_is_empty(c->right)) - stack_push(&z, c->right); + if (!rbnode_is_empty(x->root)) { + while ((c = stack_pop(&z))) { + ++n; + if (!rbnode_is_empty(c->left)) + stack_push(&z, c->left); + if (!rbnode_is_empty(c->right)) + stack_push(&z, c->right); + } } return n; } -int vset_compare(const vtype_set* s0, const vtype_set* s1) { +int vset_compare(const set_t* s0, const set_t* s1) { stack_t z = { .prev = 0, .value = 0 }; vtype t = s0->type; int c = 0; diff --git a/src/set/copy.c b/src/set/copy.c index 07e5ef3..954d7d8 100644 --- a/src/set/copy.c +++ b/src/set/copy.c @@ -4,7 +4,7 @@ #include "../../include/set.h" #include "../__internal/rbtree.h" -vtype_set vset_copy(const vtype_set* s) { +set_t vset_copy(const set_t* s) { set_t x = { .type = s->type }; stack_t z = { .prev = 0, .value = s->root }; @@ -15,10 +15,8 @@ vtype_set vset_copy(const vtype_set* s) { stack_push(&z, x.root); do { - rbnode_t *p0, *p1; - - p0 = stack_pop(&z); - p1 = stack_pop(&z); + rbnode_t *p0 = stack_pop(&z); + rbnode_t *p1 = stack_pop(&z); if (!rbnode_is_empty(p1->left)) { p0->left = rbnode_create(vnode_duplicate(&p1->left->value, t), p0, p1->left->colored); @@ -40,7 +38,7 @@ vtype_set vset_copy(const vtype_set* s) { } -vtype_set* vset_duplicate(const vtype_set* s) { +set_t* vset_duplicate(const set_t* s) { set_t* x = malloc(sizeof(*x)); stack_t z = { .prev = 0, .value = s->root }; @@ -74,7 +72,7 @@ vtype_set* vset_duplicate(const vtype_set* s) { } -void vset_copy_init(vtype_set* x, const vtype_set* s) { +void vset_copy_init(set_t* x, const set_t* s) { stack_t z = { .prev = 0, .value = s->root }; vtype t = x->type = s->type;