mirror of
https://gitee.com/apaki/unicstl.git
synced 2025-07-03 23:56:54 +08:00
tree先添加了新的迭代器接口,但是还未实现。
This commit is contained in:
parent
88580acb1e
commit
bb8e01fe7c
@ -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);
|
||||||
|
|
||||||
|
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)
|
static bool tree_avl_init(struct _tree* self, uint32_t obj_size)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
|
Loading…
Reference in New Issue
Block a user