Logo Search packages:      
Sourcecode: jpegpixi version File versions  Download package

rbtree.h

/* This file is part of a red-black tree implementation.
   Copyright (C) 2003, 2004 Martin Dickopp

   This file 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 file 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 file; if not, write to the Free Software
   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
   USA.  */

#ifndef HDR_RBTREE
#define HDR_RBTREE 1


/* Red-black tree.  The member should not be accessed directly.  */
struct rbtree {
    struct rbtree_node *root;
};


/* Create a tree.  */
#define rbtree_create(tree) ((void)((tree)->root = 0))

/* Destroy a tree.  Free all associated memory.  */
#define rbtree_destroy(tree) ((void)((tree)->root != 0 ? (rbtree_destroy1 ((tree)->root), 0) : 0))


/* Internal function; should not be called directly.  */
extern void rbtree_destroy1 (struct rbtree_node *node) gcc_attr_nonnull (());

/* Insert a new node into a tree.  The data is copied; the location of the copied data is returned,
   and if `exists_ptr' is not a null pointer, the integer at the location pointed to is set to zero.
   If the node already exists, the location of the existing node data is returned, and if `exists_ptr'
   is not a null pointer, the integer at the location pointed to is set to one.  If memory allocation
   fails, a null pointer is returned.  */
extern void *rbtree_insert (struct rbtree *tree, const void *data, size_t data_len,
                            int (*compare) (const void *a, const void *b),
                            int *exists_ptr) gcc_attr_nonnull ((1, 2, 4));

/* Delete a node.  The `data' parameter must point to the data associated with an existing node.  */
extern void rbtree_delete (struct rbtree *tree, void *data) gcc_attr_nonnull (());

/* Find a node.  Return the data associated with the node, or a null pointer if the node does not exist.  */
extern void *rbtree_find (const struct rbtree *tree, const void *data,
                          int (*compare) (const void *a, const void *b)) gcc_attr_pure gcc_attr_nonnull (());

/* Return the data associated with the first node, or a null pointer if the tree is empty.  */
extern void *rbtree_first (const struct rbtree *tree) gcc_attr_pure gcc_attr_nonnull (());

/* Return the data associated with the next node, or a null pointer if no more nodes exist.  */
extern void *rbtree_next (const void *data) gcc_attr_pure gcc_attr_nonnull (());


#endif

Generated by  Doxygen 1.6.0   Back to index