iter的node一定是当前节点,因此cur的前缀就有些多余了

This commit is contained in:
建峰 2025-04-27 12:44:47 +08:00
parent 4691b848ef
commit c70b007386
7 changed files with 23 additions and 24 deletions

View File

@ -17,7 +17,7 @@ struct _iterator
{ {
// ---------- private ---------- // ---------- private ----------
void* _parent; void* _parent;
void* _cur_node; void* _node;
uint32_t _index; uint32_t _index;
uint32_t _order; uint32_t _order;

View File

@ -305,11 +305,11 @@ iterator_t deque_iter(struct _deque* self, enum _deque_order order)
iter->_order = order; iter->_order = order;
if(iter->_order == DEQUE_FORWARD) if(iter->_order == DEQUE_FORWARD)
{ {
iter->_cur_node = self->_head; iter->_node = self->_head;
} }
else else
{ {
iter->_cur_node = self->_tail; iter->_node = self->_tail;
} }
return iter; return iter;
} }
@ -335,7 +335,7 @@ const void* deque_iter_next(struct _iterator* iter)
deque_t self = (deque_t)iter->_parent; deque_t self = (deque_t)iter->_parent;
void *obj = NULL; void *obj = NULL;
struct _deque_node * cur_node = (struct _deque_node *)iter->_cur_node; struct _deque_node * cur_node = (struct _deque_node *)iter->_node;
if(cur_node == NULL) if(cur_node == NULL)
{ {
return NULL; return NULL;
@ -344,11 +344,11 @@ const void* deque_iter_next(struct _iterator* iter)
obj = cur_node->obj; obj = cur_node->obj;
if(iter->_order == DEQUE_FORWARD) if(iter->_order == DEQUE_FORWARD)
{ {
iter->_cur_node = cur_node->next; iter->_node = cur_node->next;
} }
else else
{ {
iter->_cur_node = cur_node->prev; iter->_node = cur_node->prev;
} }
iter->_index += 1; iter->_index += 1;

View File

@ -829,14 +829,14 @@ iterator_t graph_iter(struct _graph *self, enum _graph_search search_type, void
iter->_parent = self; iter->_parent = self;
iter->_index = 0; iter->_index = 0;
iter->_cur_node = self->_head->next; iter->_node = self->_head->next;
struct _graph_node *start_node = find_node(self, start); struct _graph_node *start_node = find_node(self, start);
if (start_node == NULL) if (start_node == NULL)
{ {
goto done; goto done;
} }
iter->_cur_node = start_node; iter->_node = start_node;
struct _graph_node *node = self->_head->next; struct _graph_node *node = self->_head->next;
while (node != NULL) while (node != NULL)
@ -850,7 +850,7 @@ iterator_t graph_iter(struct _graph *self, enum _graph_search search_type, void
{ {
case GRAPH_BFS: case GRAPH_BFS:
{ {
self->queue->push(self->queue, &iter->_cur_node); self->queue->push(self->queue, &iter->_node);
} }
break; break;
case GRAPH_DFS: case GRAPH_DFS:
@ -893,7 +893,7 @@ const void *graph_iter_next(struct _iterator *iter)
{ {
case GRAPH_BFS: case GRAPH_BFS:
{ {
struct _graph_node *cur_node = iter->_cur_node; struct _graph_node *cur_node = iter->_node;
struct _graph_edge *cur_edge = cur_node->edgehead; struct _graph_edge *cur_edge = cur_node->edgehead;
struct _graph_node *target = NULL; struct _graph_node *target = NULL;
struct _graph_node *node = cur_node; struct _graph_node *node = cur_node;
@ -932,14 +932,13 @@ const void *graph_iter_next(struct _iterator *iter)
cur_node = node; cur_node = node;
} }
iter->_cur_node = cur_node; iter->_node = cur_node;
obj = cur_node->obj; obj = cur_node->obj;
} }
break; break;
case GRAPH_DFS: case GRAPH_DFS:
{ {
// self->stack->push(self->stack, iter->_cur_node); struct _graph_node *cur_node = iter->_node;
struct _graph_node *cur_node = self->_iter._cur_node;
struct _graph_node *node = NULL; struct _graph_node *node = NULL;
stack_t stack = self->stack; stack_t stack = self->stack;
@ -975,7 +974,7 @@ const void *graph_iter_next(struct _iterator *iter)
} }
} }
} }
iter->_cur_node = cur_node; iter->_node = cur_node;
obj = node->obj; obj = node->obj;
} }
break; break;

View File

@ -257,7 +257,7 @@ iterator_t heap_iter(struct _heap* self)
iter->_parent = self; iter->_parent = self;
iter->_index = 0; iter->_index = 0;
iter->_cur_node = self->obj; iter->_node = self->obj;
return iter; return iter;
} }

View File

@ -313,7 +313,7 @@ static iterator_t queue_iter(struct _queue* self)
iter->_parent = self; iter->_parent = self;
iter->_index = 0; iter->_index = 0;
iter->_cur_node = self->_front; iter->_node = self->_front;
return iter; return iter;
} }
@ -339,11 +339,11 @@ static const void* queue_iter_next(struct _iterator* iter)
void *obj = NULL; void *obj = NULL;
// base on linklist // base on linklist
struct _queue_node * node = (struct _queue_node *)iter->_cur_node; struct _queue_node * node = (struct _queue_node *)iter->_node;
if(node != NULL) if(node != NULL)
{ {
obj = node->obj; obj = node->obj;
iter->_cur_node = node->next; iter->_node = node->next;
} }
iter->_index += 1; iter->_index += 1;
return obj; return obj;

View File

@ -273,11 +273,11 @@ const void* stack_iter_next(struct _iterator* iter)
if(self->_head->obj == NULL) if(self->_head->obj == NULL)
{ {
// base on linklist // base on linklist
struct _stack_node* node = (struct _stack_node *)self->_iter._cur_node; struct _stack_node* node = (struct _stack_node *)iter->_node;
if(node != NULL) if(node != NULL)
{ {
obj = node->obj; obj = node->obj;
self->_iter._cur_node = node->next; iter->_node = node->next;
} }
} }
else else
@ -311,7 +311,7 @@ iterator_t stack_iter(struct _stack* self)
iter->_parent = self; iter->_parent = self;
iter->_index = 0; iter->_index = 0;
iter->_cur_node = self->_head->next; iter->_node = self->_head->next;
return iter; return iter;
} }

View File

@ -1158,7 +1158,7 @@ static iterator_t tree_iter(struct _tree* self, enum _tree_order order)
iter->_parent = self; iter->_parent = self;
iter->_index = 0; iter->_index = 0;
iter->_cur_node = self->_root; iter->_node = self->_root;
iter->_order = order; iter->_order = order;
self->stack->clear(self->stack); self->stack->clear(self->stack);
@ -1256,7 +1256,7 @@ static const void* tree_iter_next(struct _iterator* iter)
tree_t self = (tree_t)iter->_parent; tree_t self = (tree_t)iter->_parent;
void *obj = NULL; void *obj = NULL;
struct _tree_node* cur_node = self->_iter._cur_node; struct _tree_node* cur_node = iter->_node;
struct _tree_node* target_node = NULL; struct _tree_node* target_node = NULL;
switch (iter->_order) switch (iter->_order)
{ {
@ -1392,7 +1392,7 @@ static const void* tree_iter_next(struct _iterator* iter)
}break; }break;
} }
self->_iter._cur_node = cur_node; iter->_node = cur_node;
obj = target_node->obj; obj = target_node->obj;
iter->_index += 1; iter->_index += 1;
return obj; return obj;