Files
RTOS/AppKit/fixed_rbtree_pool.h
2026-07-09 10:16:24 +08:00

44 lines
1.5 KiB
C

#ifndef INCLUDED_FIXED_RBTREE_POOL_H
#define INCLUDED_FIXED_RBTREE_POOL_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*/
/* ------------------------------------------------------------------------------------------------------------------ */
/*
* 1. 只能支持固定数量的 node 节点
* 2. 根据 obj_size 建立不同的对象池,同样大小的对象都通过同一个池进行分配
*/
typedef struct fixed_rbtree_pool_block_s{
struct fixed_rbtree_pool_block_s* left;
struct fixed_rbtree_pool_block_s* right;
struct fixed_rbtree_pool_block_s* parent;
char color;
pool_t pool;
}fixed_rbtree_pool_node_t;
typedef struct {
fixed_rbtree_pool_node_t* root;
pool_t node_pool;
}fixed_rbtree_pool_t;
/* ------------------------------------------------------------------------------------------------------------------ */
/* */
void fixed_rbtree_pool_init(fixed_rbtree_pool_t* self, void* node_block, os_size_t node_block_size);
os_bool_t fixed_rbtree_pool_add_node_pool(fixed_rbtree_pool_t* self, void* node_block, os_size_t node_block_size);
void fixed_rbtree_pool_destroy(fixed_rbtree_pool_t* self);
os_bool_t fixed_rbtree_pool_add(fixed_rbtree_pool_t* self, os_size_t obj_size, void* block, os_size_t block_size);
void* fixed_rbtree_pool_alloc(fixed_rbtree_pool_t* self, os_size_t obj_size);
void fixed_rbtree_pool_free(fixed_rbtree_pool_t* self, os_size_t obj_size, void* ptr);
#endif /*INCLUDED_FIXED_RBTREE_POOL_H*/