import
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
#ifndef INCLUDED_DRV_RBTREE_H
|
||||
#define INCLUDED_DRV_RBTREE_H
|
||||
|
||||
#ifndef INCLUDED_OS_TYPES_H
|
||||
#include <os_types.h>
|
||||
#endif /*INCLUDED_OS_TYPES_H*/
|
||||
|
||||
#ifndef INCLUDED_OS_MACROS_H
|
||||
#include <os_macros.h>
|
||||
#endif /*INCLUDED_OS_MACROS_H*/
|
||||
|
||||
#ifndef INCLUDED_OS_COMPILER_H
|
||||
#include <os_compiler.h>
|
||||
#endif /*INCLUDED_OS_COMPILER_H*/
|
||||
|
||||
#ifndef INCLUDED_POOL_H
|
||||
#include <pool.h>
|
||||
#endif /*INCLUDED_POOL_H*/
|
||||
|
||||
#ifndef INCLUDED_DRV_DEVICE_H
|
||||
#include <drv_device.h>
|
||||
#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*/
|
||||
Reference in New Issue
Block a user