[BACK]Return to redblack.h CVS log [TXT][DIR] Up to [local] / src / usr.bin / sudo

Annotation of src/usr.bin/sudo/redblack.h, Revision 1.1

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