37 lines
1.0 KiB
C
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__*/
|