bond/x64/src/lib/inc/avl_tree.h
2017-01-31 19:26:08 -08:00

56 lines
1.3 KiB
C

/* Copyright 2016 secXsQuared
* Distributed under GPL license
* See COPYING under root for details
*/
#ifndef _K_AVL_TREE_H_
#define _K_AVL_TREE_H_
#include "g_type.h"
#include "g_abi.h"
#include "sxtdlib.h"
typedef struct _k_avl_tree_node_t
{
struct _k_avl_tree_node_t *left;
struct _k_avl_tree_node_t *right;
struct _k_avl_tree_node_t *parent;
int32_t height;
} avl_tree_node_t;
/*
* A comparison function between tree_node and your_node
* Returns:
* < 0 if tree_node < your_node
* = 0 if tree_node == your_node
* > 0 if tree_node > your_node
*/
typedef struct _k_avl_tree_t
{
callback_func_t compare;
avl_tree_node_t *root;
} avl_tree_t;
avl_tree_node_t *KABI lb_avl_tree_search(avl_tree_t *tree, avl_tree_node_t *entry);
void KABI lb_avl_tree_insert(avl_tree_t *tree, avl_tree_node_t *entry);
avl_tree_node_t *KABI lb_avl_tree_delete(avl_tree_t *tree, avl_tree_node_t *entry);
void KABI lb_avl_tree_init(avl_tree_t *tree, callback_func_t compare);
avl_tree_node_t *KABI lb_avl_tree_largest(avl_tree_t *tree);
avl_tree_node_t *KABI lb_avl_tree_smallest(avl_tree_t *tree);
avl_tree_node_t *KABI lb_avl_tree_larger(avl_tree_node_t *entry);
avl_tree_node_t *KABI lb_avl_tree_smaller(avl_tree_node_t *entry);
bool KABI lb_avl_tree_validate(avl_tree_t *tree);
int32_t KABI lb_avl_tree_size(avl_tree_t *tree);
#endif