mirror of
https://gitee.com/apaki/unicstl.git
synced 2025-05-17 19:41:36 +08:00
iterator区分private和public
This commit is contained in:
parent
21485efb51
commit
4fa56e1ed8
@ -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);
|
||||
};
|
||||
|
@ -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;
|
||||
}
|
||||
|
25
src/stack.c
25
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)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if(stack_init(stack, obj_size) != true)
|
||||
{
|
||||
free(stack);
|
||||
stack = NULL;
|
||||
}
|
||||
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)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if(stack_init2(stack, obj_size, capacity) != true)
|
||||
{
|
||||
free(stack);
|
||||
stack = NULL;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
return stack;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user