From 4fa56e1ed827f51c58ddfdb4bf145c78ab86b54b Mon Sep 17 00:00:00 2001 From: wjf-hs Date: Thu, 24 Apr 2025 13:07:17 +0800 Subject: [PATCH] =?UTF-8?q?iterator=E5=8C=BA=E5=88=86private=E5=92=8Cpubli?= =?UTF-8?q?c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/iterator.h | 4 +++- src/list.c | 6 +++--- src/stack.c | 37 +++++++++++++++++++++---------------- 3 files changed, 27 insertions(+), 20 deletions(-) diff --git a/include/iterator.h b/include/iterator.h index 743c4b1..fefb810 100644 --- a/include/iterator.h +++ b/include/iterator.h @@ -15,10 +15,12 @@ struct _iterator { - void* parent; + // ---------- private ---------- + void* _parent; void* _cur_node; uint32_t _cur; + // ---------- public ---------- bool (*hasnext)(struct _iterator* self); const void* (*next)(struct _iterator* self); }; diff --git a/src/list.c b/src/list.c index d7b44d8..de31dc2 100644 --- a/src/list.c +++ b/src/list.c @@ -181,7 +181,7 @@ static void list_print(struct _list* self) static const void* list_iter_next(struct _iterator* iter) { - list_t self = (list_t)iter->parent; + list_t self = (list_t)iter->_parent; void *obj = self->obj + self->_iter._cur * self->_obj_size; self->_iter._cur += 1; return obj; @@ -189,7 +189,7 @@ static const void* list_iter_next(struct _iterator* iter) static bool list_iter_hasnext(struct _iterator* iter) { - list_t self = (list_t)iter->parent; + list_t self = (list_t)iter->_parent; if(self->_iter._cur < self->size(self)) { @@ -200,7 +200,7 @@ static bool list_iter_hasnext(struct _iterator* iter) iterator_t list_iter(struct _list* self) { - self->_iter.parent = self; + self->_iter._parent = self; self->_iter._cur = 0; return &self->_iter; } diff --git a/src/stack.c b/src/stack.c index 82bb7f6..3937c50 100644 --- a/src/stack.c +++ b/src/stack.c @@ -124,6 +124,7 @@ static uint32_t stack_capacity(struct _stack* self) static bool stack_clear(struct _stack* self) { assert(self != NULL); + assert(self->_head != NULL); if (self->empty(self)) { return true; @@ -258,7 +259,7 @@ const void* stack2_iter_next(struct _iterator* iter) assert(iter != NULL); assert(iter->parent != NULL); - stack_t self = (stack_t)iter->parent; + stack_t self = (stack_t)iter->_parent; // from top to bottom uint32_t index = self->size(self) - 1 - self->_iter._cur; @@ -272,7 +273,7 @@ const void* stack_iter_next(struct _iterator* iter) assert(iter != NULL); assert(iter->parent != NULL); - stack_t self = (stack_t)iter->parent; + stack_t self = (stack_t)iter->_parent; void *obj = NULL; // from top to bottom @@ -291,7 +292,7 @@ bool stack_iter_hasnext(struct _iterator* iter) assert(iter != NULL); assert(iter->parent != NULL); - stack_t self = (stack_t)iter->parent; + stack_t self = (stack_t)iter->_parent; if(self->_iter._cur < self->size(self)) { return true; @@ -302,7 +303,7 @@ bool stack_iter_hasnext(struct _iterator* iter) iterator_t stack_iter(struct _stack* self) { assert(self != NULL); - self->_iter.parent = self; + self->_iter._parent = self; self->_iter._cur = 0; self->_iter._cur_node = self->_head->next; return &self->_iter; @@ -414,13 +415,15 @@ stack_t stack_new(uint32_t obj_size) { stack_t stack = NULL; stack = (struct _stack*)calloc(1, sizeof(struct _stack)); - if (stack != NULL) + if(stack == NULL) { - if(stack_init(stack, obj_size) != true) - { - free(stack); - stack = NULL; - } + return NULL; + } + + if(stack_init(stack, obj_size) != true) + { + free(stack); + return NULL; } return stack; } @@ -429,13 +432,15 @@ stack_t stack_new2(uint32_t obj_size, uint32_t capacity) { stack_t stack = NULL; stack = (struct _stack*)calloc(1, sizeof(struct _stack)); - if (stack != NULL) + if (stack == NULL) { - if(stack_init2(stack, obj_size, capacity) != true) - { - free(stack); - stack = NULL; - } + return NULL; + } + + if(stack_init2(stack, obj_size, capacity) != true) + { + free(stack); + return NULL; } return stack; }