44 lines
1.5 KiB
C
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);
|
|
void 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);
|
|
|
|
void 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*/
|