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
{
// -------------------- private --------------------
struct _tree_node * _root;
uint32_t _size;
@ -69,6 +70,9 @@ struct _tree
queue_t queue;
struct _tree_node * cur_node;
struct _iterator _iter;
// -------------------- public --------------------
// kernel
bool (*insert)(struct _tree* self, void* obj);
bool (*delete)(struct _tree* self, void* obj);
@ -89,6 +93,8 @@ struct _tree
uint32_t (*size)(struct _tree* self);
// iter
iterator_t (*iter)(struct _tree* self);
/**
* @brief
*
@ -111,7 +117,7 @@ struct _tree
// free
void (*destory)(struct _tree* self);
// ----- print -----
// -------------------- debug --------------------
// traversal depth
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)
{
assert(self != NULL);