This commit is contained in:
2026-05-19 11:49:22 +08:00
commit add7af4222
96 changed files with 8635 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
#ifndef INCLUDED_FIXED_RBTREE_H
#define INCLUDED_FIXED_RBTREE_H
#ifndef INCLUDED_OS_TYPES_H
#include <os_types.h>
#endif /*INCLUDED_OS_TYPES_H*/
#ifndef INCLUDED_POOL_H
#include <pool.h>
#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*/