37 lines
1.0 KiB
C

/* splay tree implementation */
#ifndef __SPLAY_H__
#define __SPLAY_H__
#include <stdint.h>
#define tree_root_priv(T) ((T)->splay_sentinel.splay_left)
#define tree_null_priv(L) (&(L)->splay_sentinel)
#define TREE_DEPTH_MAX 64
typedef long (*splay_compare_t)(const void*, const void*);
typedef struct __splay_node_t {
struct __splay_node_t *splay_left;
struct __splay_node_t *splay_right;
struct __splay_node_t *splay_parent;
void *splay_data;
const void *splay_node_key;
} splay_node_t;
typedef struct __splay_t {
uint64_t nodecount;
uint64_t maxcount;
splay_node_t splay_sentinel;
splay_compare_t splay_compare;
void *splay_context;
} splay_t;
int splay_init(splay_t *sp, splay_compare_t cmp_fu);
int splay_insert(splay_t *sp, splay_node_t *node, const void *node_key);
int splay_delete(splay_t *sp, splay_node_t *node);
splay_node_t *splay_lookup(splay_t *sp, const void *key);
splay_node_t *splay_first(splay_t *sp);
splay_node_t *splay_next(splay_t *sp, splay_node_t *curr);
#endif /* __SPLAY_H__*/