File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sudo / plugins / sudoers / redblack.h
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Jul 22 10:46:12 2013 UTC (10 years, 11 months ago) by misho
Branches: sudo, MAIN
CVS tags: v1_8_8p0, v1_8_8, v1_8_7p0, v1_8_7, v1_8_10p3_0, v1_8_10p3, HEAD
1.8.7

    1: /*
    2:  * Copyright (c) 2004, 2007, 2010, 2013
    3:  *	Todd C. Miller <Todd.Miller@courtesan.com>
    4:  *
    5:  * Permission to use, copy, modify, and distribute this software for any
    6:  * purpose with or without fee is hereby granted, provided that the above
    7:  * copyright notice and this permission notice appear in all copies.
    8:  *
    9:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
   10:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
   11:  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
   12:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
   13:  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   14:  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
   15:  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
   16:  */
   17: 
   18: #ifndef _SUDOERS_REDBLACK_H
   19: #define _SUDOERS_REDBLACK_H
   20: 
   21: enum rbcolor {
   22:     red,
   23:     black
   24: };
   25: 
   26: enum rbtraversal {
   27:     preorder,
   28:     inorder,
   29:     postorder
   30: };
   31: 
   32: struct rbnode {
   33:     struct rbnode *left, *right, *parent;
   34:     void *data;
   35:     enum rbcolor color;
   36: };
   37: 
   38: struct rbtree {
   39:     int (*compar)(const void *, const void *);
   40:     struct rbnode root;
   41:     struct rbnode nil;
   42: };
   43: 
   44: #define rbapply(t, f, c, o)	rbapply_node((t), (t)->root.left, (f), (c), (o))
   45: #define rbisempty(t)		((t)->root.left == &(t)->nil && (t)->root.right == &(t)->nil)
   46: #define rbfirst(t)		((t)->root.left)
   47: #define rbroot(t)		(&(t)->root)
   48: #define rbnil(t)		(&(t)->nil)
   49: 
   50: void *rbdelete(struct rbtree *, struct rbnode *);
   51: int rbapply_node(struct rbtree *, struct rbnode *,
   52: 	int (*)(void *, void *), void *, enum rbtraversal);
   53: struct rbnode *rbfind(struct rbtree *, void *);
   54: struct rbnode *rbinsert(struct rbtree *, void *);
   55: struct rbtree *rbcreate(int (*)(const void *, const void *));
   56: void rbdestroy(struct rbtree *, void (*)(void *));
   57: 
   58: #endif /* _SUDOERS_REDBLACK_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>