mirror of
https://gitee.com/apaki/unicstl.git
synced 2025-05-17 19:41:36 +08:00
tree先添加了新的迭代器接口,但是还未实现。
This commit is contained in:
parent
88580acb1e
commit
bb8e01fe7c
@ -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);
|
||||
|
||||
|
45
src/tree.c
45
src/tree.c
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user