diff --git a/demo/demo_stack.c b/demo/demo_stack.c index 3677948..68c8669 100644 --- a/demo/demo_stack.c +++ b/demo/demo_stack.c @@ -200,7 +200,7 @@ static void demo_stack_struct(void) } } - stack->destory(stack); + stack->_destory(stack); stack_free(&stack); } diff --git a/include/stack.h b/include/stack.h index 31c1443..ec8a8bf 100644 --- a/include/stack.h +++ b/include/stack.h @@ -31,7 +31,7 @@ struct _stack struct _iterator _iter; - void (*destory)(struct _stack* self); + void (*_destory)(struct _stack* self); // ---------- public ---------- // kernel diff --git a/src/stack.c b/src/stack.c index 1e346b8..81adf90 100644 --- a/src/stack.c +++ b/src/stack.c @@ -282,7 +282,7 @@ static bool stack_init(struct _stack* self, uint32_t obj_size) // clear and free node self->clear = stack_clear; - self->destory = stack_destory; + self->_destory = stack_destory; // print self->print = stack_print; @@ -304,7 +304,10 @@ const void* stack_iter_next(struct _iterator* iter) assert(iter->parent != NULL); stack_t self = (stack_t)iter->parent; - void *obj = self->_head->obj + self->_iter._cur * self->_obj_size; + // from top to bottom + uint32_t index = self->size(self) - 1 - self->_iter._cur; + + void *obj = self->_head->obj + self->_obj_size * index; self->_iter._cur += 1; return obj; } @@ -360,7 +363,7 @@ static bool stack_init2(struct _stack* self, uint32_t obj_size, uint32_t capacit return false; } - self->destory = stack2_destory; + self->_destory = stack2_destory; // ---------- public ---------- // 2. set function @@ -418,9 +421,9 @@ void stack_free(stack_t *stack) assert(stack != NULL); if(stack != NULL && *stack != NULL) { - if((*stack)->destory != NULL) + if((*stack)->_destory != NULL) { - (*stack)->destory(*stack); + (*stack)->_destory(*stack); } free(*stack); *stack = NULL; diff --git a/test/test_stack.c b/test/test_stack.c index c8376e2..04975e9 100644 --- a/test/test_stack.c +++ b/test/test_stack.c @@ -470,7 +470,7 @@ static void test_stack2_iter(void) while(iter->hasnext(iter)) { temp = *(int *)iter->next(iter); - printf("%d ", temp); + // printf("%d ", temp); TEST_ASSERT_EQUAL_INT(data[len - 1 - i], temp); i++; }