+++ /dev/null
-/*
- rbl.h -- header file for rbl.c
- Copyright (C) 2000 Ivo Timmermans <itimmermans@bigfoot.com>,
- 2000 Guus Sliepen <guus@sliepen.warande.net>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- $Id: rbl.h,v 1.2 2002/04/09 15:26:00 zarq Exp $
-*/
-
-#ifndef __RBL_H__
-#define __RBL_H__
-
-#define RBL_FOREACH(tree,rbl) for(rbl = tree->head; rbl; rbl = rbl->next)
-
-typedef struct rbl_t
-{
- /* 'red-black tree' part */
-
- struct rbltree_t *tree;
-
- int color;
-
- struct rbl_t *parent;
- struct rbl_t *left;
- struct rbl_t *right;
-
- /* 'linked list' part */
-
- struct rbl_t *prev;
- struct rbl_t *next;
-
- /* payload */
-
- void *data;
-
-} rbl_t;
-
-typedef int (*rbl_compare_t) (const void *, const void *);
-typedef void (*rbl_action_t) (const void *);
-typedef void (*rbl_action_rbl_t) (const struct rbl_t *);
-
-typedef struct rbltree_t
-{
- /* callback functions */
-
- rbl_compare_t compare;
- rbl_action_t delete;
-
- /* tree part */
-
- struct rbl_t *top;
-
- /* linked list */
-
- struct rbl_t *head;
- struct rbl_t *tail;
-
-} rbltree_t;
-
-enum color
-{
- RBL_RED,
- RBL_BLACK
-} color;
-
-extern rbltree_t *new_rbltree(rbl_compare_t, rbl_action_t);
-extern void free_rbltree(rbltree_t *);
-extern rbl_t *new_rbl(void);
-extern void free_rbl(rbl_t *);
-
-extern void *rbl_search(rbltree_t *, void *);
-extern void *rbl_search_closest(rbltree_t *, void *);
-extern void *rbl_search_closest_greater(rbltree_t *, void *);
-extern void *rbl_search_closest_smaller(rbltree_t *, void *);
-extern rbl_t *rbl_search_rbl(rbltree_t *, void *);
-extern rbl_t *rbl_search_closest_rbl(rbltree_t *, void *);
-extern rbl_t *rbl_search_closest_greater_rbl(rbltree_t *, void *);
-extern rbl_t *rbl_search_closest_smaller_rbl(rbltree_t *, void *);
-extern rbl_t *rbl_insert(rbltree_t *, void *);
-extern rbl_t *rbl_unlink(rbltree_t *, void *);
-extern void rbl_delete(rbltree_t *, void *);
-extern rbl_t *rbl_insert_rbl(rbltree_t *, rbl_t *);
-extern rbl_t *rbl_unlink_rbl(rbl_t *);
-extern void rbl_delete_rbl(rbl_t *);
-extern void rbl_unlink_rbltree(rbltree_t *);
-extern void rbl_delete_rbltree(rbltree_t *);
-
-extern void rbl_foreach(rbltree_t *, rbl_action_t);
-extern void rbl_foreach_rbl(rbltree_t *, rbl_action_rbl_t);
-
-#endif /* __RBL_H__ */