/* ---------------------------------------------------------------------- * avl_tree.h * * Declarations for AVL style balanced tree support. * * Copyright (c) 2003-2009, PostgreSQL Global Development Group * Author: Jan Wieck, Afilias USA INC. * * * ---------------------------------------------------------------------- */ #ifndef _AVL_TREE_H_INCLUDED_ #define _AVL_TREE_H_INCLUDED_ /* ---- * Callback function type declarations * ---- */ typedef int (AVLcompfunc) (void *, void *); typedef void (AVLfreefunc) (void *); /* ---- * Data structures * ---- */ typedef struct AVLnode_s { struct AVLnode_s *lnode, *rnode; int ldepth, rdepth; void *cdata; int deleted; } AVLnode; typedef struct AVLtree_s { AVLnode *root; AVLcompfunc *compfunc; AVLfreefunc *freefunc; } AVLtree; /* ---- * Macros * ---- */ #define AVL_DATA(n) (n)->cdata #define AVL_SETDATA(n,p) ((n)->cdata = (p)) #define AVL_MAXDEPTH(n) (((n)->ldepth > (n)->rdepth) ? (n)->ldepth : (n)->rdepth) #define AVL_BALANCE(n) ((n)->rdepth - (n)->ldepth) #define AVL_INITIALIZER(cmp,free) {NULL, (cmp), (free)} /* ---- * Public functions * ---- */ void avl_init(AVLtree *tree, AVLcompfunc *compfunc, AVLfreefunc *freefunc); void avl_reset(AVLtree *tree); AVLnode *avl_insert(AVLtree *tree, void *cdata); AVLnode *avl_lookup(AVLtree *tree, void *cdata); int avl_delete(AVLtree *tree, void *cdata); #endif /* _AVL_TREE_H_INCLUDED_ */