tree先添加了新的迭代器接口,但是还未实现。

This commit is contained in:
建峰 2025-04-24 18:22:56 +08:00
parent 88580acb1e
commit bb8e01fe7c
2 changed files with 52 additions and 1 deletions

View File

@ -55,6 +55,7 @@ struct _tree_node
struct _tree struct _tree
{ {
// -------------------- private --------------------
struct _tree_node * _root; struct _tree_node * _root;
uint32_t _size; uint32_t _size;
@ -69,6 +70,9 @@ struct _tree
queue_t queue; queue_t queue;
struct _tree_node * cur_node; struct _tree_node * cur_node;
struct _iterator _iter;
// -------------------- public --------------------
// kernel // kernel
bool (*insert)(struct _tree* self, void* obj); bool (*insert)(struct _tree* self, void* obj);
bool (*delete)(struct _tree* self, void* obj); bool (*delete)(struct _tree* self, void* obj);
@ -89,6 +93,8 @@ struct _tree
uint32_t (*size)(struct _tree* self); uint32_t (*size)(struct _tree* self);
// iter // iter
iterator_t (*iter)(struct _tree* self);
/** /**
* @brief * @brief
* *
@ -111,7 +117,7 @@ struct _tree
// free // free
void (*destory)(struct _tree* self); void (*destory)(struct _tree* self);
// ----- print ----- // -------------------- debug --------------------
// traversal depth // traversal depth
void (*order)(struct _tree* self, bool right_priority); void (*order)(struct _tree* self, bool right_priority);

View File

@ -1888,6 +1888,51 @@ static void* tree_end(struct _tree* self)
} }
} }
iterator_t tree_iter(struct _tree* self)
{
assert(self != NULL);
iterator_t iter = &self->_iter;
iter->_parent = self;
iter->_cur = 0;
iter->_cur_node = self->_root;
return iter;
}
bool tree_iter_hasnext(struct _iterator* iter)
{
assert(iter != NULL);
assert(iter->parent != NULL);
tree_t self = (tree_t)iter->_parent;
if(iter->_cur < self->size(self))
{
return true;
}
return false;
}
const void* tree_iter_next(struct _iterator* iter)
{
assert(iter != NULL);
assert(iter->parent != NULL);
tree_t self = (tree_t)iter->_parent;
void *obj = NULL;
// base on linklist
struct _tree_node * node = (struct _tree_node *)iter->_cur_node;
if(node != NULL)
{
obj = node->obj;
// iter->_cur_node = node->next;
}
self->_iter._cur += 1;
return obj;
}
static bool tree_avl_init(struct _tree* self, uint32_t obj_size) static bool tree_avl_init(struct _tree* self, uint32_t obj_size)
{ {
assert(self != NULL); assert(self != NULL);