65 lines
1.6 KiB
C++
65 lines
1.6 KiB
C++
#ifndef AATREE_H
|
|
#define AATREE_H
|
|
|
|
/*
|
|
Andersson binary balanced tree library
|
|
|
|
Log n performance on insert/erase
|
|
|
|
> Created (Julienne Walker): September 10, 2005
|
|
|
|
This code is in the public domain. Anyone may
|
|
use it or change it in any way that they see
|
|
fit. The author assumes no responsibility for
|
|
damages incurred through use of the original
|
|
code or any variations thereof.
|
|
|
|
It is requested, but not required, that due
|
|
credit is given to the original author and
|
|
anyone who has modified the code through
|
|
a header comment, such as this one.
|
|
|
|
Various changes by Graeme W. Gill.
|
|
See aatree.c
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
#include <cstddef>
|
|
|
|
using std::size_t;
|
|
|
|
extern "C" {
|
|
#else
|
|
#include <stddef.h>
|
|
#endif
|
|
|
|
/* Opaque types */
|
|
typedef struct aat_atree aat_atree_t;
|
|
typedef struct aat_atrav aat_atrav_t;
|
|
|
|
/* User-defined item handling */
|
|
/* Return -1, 0, +1 */
|
|
typedef int (*cmp_f) ( const void *p1, const void *p2 );
|
|
|
|
/* Andersson tree functions */
|
|
aat_atree_t *aat_anew ( cmp_f cmp );
|
|
void aat_adelete ( aat_atree_t *tree );
|
|
void *aat_afind ( aat_atree_t *tree, void *data );
|
|
int aat_ainsert ( aat_atree_t *tree, void *data );
|
|
int aat_aerase ( aat_atree_t *tree, void *data );
|
|
size_t aat_asize ( aat_atree_t *tree );
|
|
|
|
/* Traversal functions */
|
|
aat_atrav_t *aat_atnew ( void );
|
|
void aat_atdelete ( aat_atrav_t *trav );
|
|
void *aat_atfirst ( aat_atrav_t *trav, aat_atree_t *tree );
|
|
void *aat_atlast ( aat_atrav_t *trav, aat_atree_t *tree );
|
|
void *aat_atnext ( aat_atrav_t *trav );
|
|
void *aat_atprev ( aat_atrav_t *trav );
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* AATREE */
|