#ifndef INCLUDED_FIXED_RBTREE_H #define INCLUDED_FIXED_RBTREE_H #ifndef INCLUDED_OS_TYPES_H #include #endif /*INCLUDED_OS_TYPES_H*/ #ifndef INCLUDED_POOL_H #include #endif /*INCLUDED_POOL_H*/ /* ------------------------------------------------------------------------------------------------------------------ */ /* */ typedef struct fixed_rbtree_node_s{ struct fixed_rbtree_node_s* left; struct fixed_rbtree_node_s* right; struct fixed_rbtree_node_s* parent; char color; void* key; void* val; }fixed_rbtree_node_t; typedef struct { int (*cmp)(const void* key_a, const void* key_b, void* args); void* args; }fixed_rbtree_ops_t; typedef struct { fixed_rbtree_node_t* root; fixed_rbtree_ops_t ops; pool_t node_pool; }fixed_rbtree_t; /* ------------------------------------------------------------------------------------------------------------------ */ /* */ // 初始化时指定一个 node 的对象池,最大只能容纳这些 node void fixed_rbtree_init(fixed_rbtree_t* self, void* node_block, os_size_t node_block_size, fixed_rbtree_ops_t ops); void fixed_rbtree_add_node_pool(fixed_rbtree_t* self, void* node_block, os_size_t node_block_size); void fixed_rbtree_destroy(fixed_rbtree_t* self); fixed_rbtree_node_t* fixed_rbtree_find(fixed_rbtree_t* self, const void* key); fixed_rbtree_node_t* fixed_rbtree_custom_find(fixed_rbtree_t* self, const void* key , fixed_rbtree_node_t* (*custom_find)(fixed_rbtree_t* tree, const void* key, fixed_rbtree_node_t* x, void* args) , void* args); os_err_t fixed_rbtree_insert(fixed_rbtree_t* self, void* key, void* val); void fixed_rbtree_remove(fixed_rbtree_t* self, const void* key); void fixed_rbtree_remove_node(fixed_rbtree_t* self, fixed_rbtree_node_t* x); void fixed_rbtree_inorder(fixed_rbtree_t* self , int (*apply)(fixed_rbtree_t* tree, fixed_rbtree_node_t* x, void* args), void* args); #endif /*INCLUDED_FIXED_RBTREE_H*/