DragonOS/kernel/common/bitree.h

79 lines
1.8 KiB
C
Raw Normal View History

2022-07-25 07:46:32 +00:00
#pragma once
2022-07-25 09:01:37 +00:00
#include <common/glib.h>
2022-07-25 07:46:32 +00:00
struct bt_node_t
{
struct bt_node_t *left;
struct bt_node_t *right;
struct bt_node_t *parent;
void *value; // 数据
} __attribute__((aligned(sizeof(long))));
struct bt_root_t
{
struct bt_node_t *bt_node;
2022-07-26 07:44:01 +00:00
int32_t size; // 树中的元素个数
int (*cmp)(void *a, void *b); // 比较函数 a>b 返回1 a==b返回0, a<b返回-1
2022-07-25 09:01:37 +00:00
/**
* @brief value的函数
* @param value
*/
int (*release)(void *value);
2022-07-25 07:46:32 +00:00
};
/**
* @brief
*
* @param node
* @param cmp
* @param release value的函数
2022-07-25 07:46:32 +00:00
* @return struct bt_root_t*
*/
2022-07-26 07:44:01 +00:00
struct bt_root_t *bt_create_tree(struct bt_node_t *node, int (*cmp)(void *a, void *b), int (*release)(void *value));
2022-07-25 07:46:32 +00:00
/**
* @brief
*
* @param left
* @param right
* @param value
* @return struct bt_node_t*
*/
struct bt_node_t *bt_create_node(struct bt_node_t *left, struct bt_node_t *right, struct bt_node_t *parent, void *value);
/**
* @brief
*
* @param root
* @param value
* @return int
*/
int bt_insert(struct bt_root_t *root, void *value);
/**
* @brief value的结点
*
* @param root
* @param value
* @param ret_addr
* @return int
*/
int bt_query(struct bt_root_t *root, void *value, uint64_t *ret_addr);
/**
* @brief
*
* @param root
* @param value
* @return int
*/
int bt_delete(struct bt_root_t *root, void *value);
/**
* @brief
*
* @param root
* @return int
*/
int bt_destroy_tree(struct bt_root_t *root);