优化
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
#include <fixed_rbtree_pool.h>
|
||||
#include "os_macros.h"
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------------------------ */
|
||||
/* */
|
||||
|
||||
@@ -28,7 +29,7 @@ void node_init(rbtree_t* tree, rbtree_node_t* self, os_size_t obj_size, void* bl
|
||||
|
||||
static
|
||||
int node_cmp(const os_size_t obj_size, const rbtree_node_t* x, void* args){
|
||||
return (obj_size == x->pool.obj_size)?0:((obj_size > x->pool.obj_size)?1:-1);
|
||||
return OS_COMPARE(obj_size, x->pool.obj_size);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------------------------ */
|
||||
@@ -427,32 +428,35 @@ void fixed_rbtree_pool_init(fixed_rbtree_pool_t* self, void* node_block, os_size
|
||||
pool_add_block(&self->node_pool, node_block, node_block_size);
|
||||
}
|
||||
|
||||
void fixed_rbtree_pool_add_node_pool(fixed_rbtree_pool_t* self, void* node_block, os_size_t node_block_size){
|
||||
pool_add_block(&self->node_pool, node_block, 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){
|
||||
return pool_add_block(&self->node_pool, node_block, node_block_size);
|
||||
}
|
||||
|
||||
void fixed_rbtree_pool_destroy(fixed_rbtree_pool_t* self){
|
||||
while(self->root){
|
||||
rbtree_node_t * p = self->root;
|
||||
pool_destroy(&p->pool);
|
||||
node_remove(self, p);
|
||||
node_destroy(self, p);
|
||||
}
|
||||
pool_destroy(&self->node_pool);
|
||||
}
|
||||
|
||||
void fixed_rbtree_pool_add(fixed_rbtree_pool_t* self, os_size_t obj_size, void* block, os_size_t block_size){
|
||||
os_bool_t fixed_rbtree_pool_add(fixed_rbtree_pool_t* self, os_size_t obj_size, void* block, os_size_t block_size){
|
||||
rbtree_node_t* x = find(self, obj_size, self->root);
|
||||
if(x==NULL){
|
||||
x = pool_alloc(&self->node_pool);
|
||||
if(!x) return OS_FALSE;
|
||||
node_init(self, x, obj_size, block, block_size);
|
||||
node_insert(self, x);
|
||||
}else{
|
||||
pool_add_block(&x->pool, block, block_size);
|
||||
}
|
||||
return OS_TRUE;
|
||||
}
|
||||
|
||||
void* fixed_rbtree_pool_alloc(fixed_rbtree_pool_t* self, os_size_t obj_size){
|
||||
rbtree_node_t * x = find(self, obj_size, self->root);
|
||||
OS_ASSERT(x, "No pool exist for obj_size: %"OS_PRIu, obj_size);
|
||||
if(x==NULL){
|
||||
return NULL;
|
||||
}
|
||||
@@ -462,10 +466,9 @@ 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){
|
||||
if(!ptr) return;
|
||||
rbtree_node_t * x = find(self, obj_size, self->root);
|
||||
OS_ASSERT(x, "No pool exist for obj_size: %"OS_PRIu, obj_size);
|
||||
if(x==NULL){
|
||||
return;
|
||||
}
|
||||
pool_free(&self->node_pool, ptr);
|
||||
pool_free(&x->pool, ptr);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user