Files
xiuos/Ubiquitous/XiZi_AIoT/softkernel/include/rbtree.h
T
2024-12-24 02:28:20 +08:00

51 lines
1.1 KiB
C

#pragma once
#include <stddef.h>
#include <stdint.h>
#include "actracer.h"
#define RBTTREE_INSERT_SECC 0
#define RBTTREE_INSERT_FAILED -1
#define RBTTREE_INSERT_EXISTED -2
#define RBTTREE_DELETE_SUCC 0
#define RBTTREE_DELETE_FAILED -1
// CLRS
// Insertion and Deletion in a Red Black Tree
enum rbt_type {
RED,
BLACK
};
typedef struct RbtNode {
uintptr_t key;
void* data;
struct RbtNode* left;
struct RbtNode* right;
struct RbtNode* parent;
enum rbt_type color;
} RbtNode;
typedef struct RbtTree {
RbtNode* root;
int nr_ele;
} RbtTree;
// return if the traverse needs to continue
typedef bool(rbt_traverse_fn)(RbtNode* node, void* data);
void rbtree_init(RbtTree* tree);
int rbt_insert(RbtTree* tree, uintptr_t key, void* data);
RbtNode* rbt_search(RbtTree* tree, uintptr_t key);
int rbt_delete(RbtTree* tree, uintptr_t key);
void rbt_traverse(RbtTree* tree, rbt_traverse_fn fn, void* data);
void module_rbt_factory_init(TraceTag* _softkernel_tag);
static inline bool rbt_is_empty(RbtTree* tree)
{
return tree->nr_ele == 0;
}