The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/lib/libkern/rb.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /* $NetBSD: rb.h,v 1.2 2002/10/08 11:58:54 simonb Exp $ */
    2 
    3 /*-
    4  * Copyright (c) 2001 The NetBSD Foundation, Inc.
    5  * All rights reserved.
    6  *
    7  * This code is derived from software contributed to The NetBSD Foundation
    8  * by Matt Thomas <matt@3am-software.com>.
    9  *
   10  * Redistribution and use in source and binary forms, with or without
   11  * modification, are permitted provided that the following conditions
   12  * are met:
   13  * 1. Redistributions of source code must retain the above copyright
   14  *    notice, this list of conditions and the following disclaimer.
   15  * 2. Redistributions in binary form must reproduce the above copyright
   16  *    notice, this list of conditions and the following disclaimer in the
   17  *    documentation and/or other materials provided with the distribution.
   18  * 3. All advertising materials mentioning features or use of this software
   19  *    must display the following acknowledgement:
   20  *        This product includes software developed by the NetBSD
   21  *        Foundation, Inc. and its contributors.
   22  * 4. Neither the name of The NetBSD Foundation nor the names of its
   23  *    contributors may be used to endorse or promote products derived
   24  *    from this software without specific prior written permission.
   25  *
   26  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   27  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   28  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   29  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   30  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   31  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   32  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   33  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   34  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   35  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   36  * POSSIBILITY OF SUCH DAMAGE.
   37  */
   38 #ifndef _LIBKERN_RB_H_
   39 #define _LIBKERN_RB_H_
   40 
   41 #include <sys/types.h>
   42 #include <sys/queue.h>
   43 
   44 struct rb_node {
   45         struct rb_node *rb_nodes[3];
   46 #define RB_LEFT         0
   47 #define RB_RIGHT        1
   48 #define RB_OTHER        1
   49 #define RB_PARENT       2
   50 #define rb_left         rb_nodes[RB_LEFT]
   51 #define rb_right        rb_nodes[RB_RIGHT]
   52 #define rb_parent       rb_nodes[RB_PARENT]
   53         TAILQ_ENTRY(rb_node) rb_link;
   54         int rb_balance : 16;
   55         unsigned int rb_red : 1;
   56         unsigned int rb_sentinel : 1;
   57         unsigned int rb_position : 2;
   58 };
   59 
   60 TAILQ_HEAD(rb_node_qh, rb_node);
   61 
   62 typedef int (*rb_compare_nodes_fn)(const struct rb_node *,
   63     const struct rb_node *);
   64 typedef int (*rb_compare_key_fn)(const struct rb_node *, const void *);
   65 typedef void (*rb_print_node_fn)(const struct rb_node *, const char *);
   66 
   67 struct rb_tree {
   68         struct rb_node *rbt_root;
   69         struct rb_node_qh rbt_nodes;
   70         rb_compare_nodes_fn rbt_compare_nodes;
   71         rb_compare_key_fn rbt_compare_key;
   72         rb_print_node_fn rbt_print_node;
   73         u_int rbt_count;
   74 };
   75 
   76 void    rb_tree_init(struct rb_tree *, rb_compare_nodes_fn, rb_compare_key_fn,
   77             rb_print_node_fn);
   78 void    rb_tree_insert_node(struct rb_tree *, struct rb_node *);
   79 struct rb_node  *rb_tree_find(struct rb_tree *, void *);
   80 void    rb_tree_remove_node(struct rb_tree *, struct rb_node *);
   81 
   82 #endif  /* _LIBKERN_RB_H_*/

Cache object: 61bbff96ccb4a30589e7e3d646b1b71b


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.