#ifndef INCLUDED_DRV_RBTREE_H #define INCLUDED_DRV_RBTREE_H #ifndef INCLUDED_OS_TYPES_H #include #endif /*INCLUDED_OS_TYPES_H*/ #ifndef INCLUDED_OS_MACROS_H #include #endif /*INCLUDED_OS_MACROS_H*/ #ifndef INCLUDED_OS_COMPILER_H #include #endif /*INCLUDED_OS_COMPILER_H*/ #ifndef INCLUDED_POOL_H #include #endif /*INCLUDED_POOL_H*/ #ifndef INCLUDED_DRV_DEVICE_H #include #endif /*INCLUDED_DRV_DEVICE_H*/ /* ------------------------------------------------------------------------------------------------------------------ */ /* */ typedef struct drv_rbtree_node_s{ struct drv_rbtree_node_s* left; struct drv_rbtree_node_s* right; struct drv_rbtree_node_s* parent; char color; drv_device_t* device; }drv_rbtree_node_t; typedef struct { drv_rbtree_node_t* root; pool_t node_pool; }drv_rbtree_t; #define DRV_RBTREE_NODE_SIZE sizeof(drv_rbtree_node_t) /* ------------------------------------------------------------------------------------------------------------------ */ /* */ // 初始化时指定一个 node 的对象池,最大只能容纳这些 node void drv_rbtree_init(drv_rbtree_t* self, void* node_block, os_size_t node_block_size); void drv_rbtree_add_node_pool(drv_rbtree_t* self, void* node_block, os_size_t node_block_size); void drv_rbtree_destroy(drv_rbtree_t* self); drv_rbtree_node_t* drv_rbtree_find(drv_rbtree_t* self, const char* name); drv_rbtree_node_t* drv_rbtree_custom_find(drv_rbtree_t* self, const char* name , drv_rbtree_node_t* (*custom_find)(drv_rbtree_t* tree, const char* name, drv_rbtree_node_t* x, void* args) , void* args); os_err_t drv_rbtree_insert(drv_rbtree_t* self, drv_device_t* device); void drv_rbtree_remove(drv_rbtree_t* self, const char* name); void drv_rbtree_remove_node(drv_rbtree_t* self, drv_rbtree_node_t* x); void drv_rbtree_inorder(drv_rbtree_t* self , int (*apply)(drv_rbtree_t* tree, drv_rbtree_node_t* x, void* args), void* args); #endif /*INCLUDED_DRV_RBTREE_H*/