X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Frbtree.h;h=583230e0e787bfa8688b6bf1fe2a44bc56612327;hb=5a11a0ba6142f5f528dd741372e2f8d775170993;hp=6aa184957752dce6fbe809ab9652c030e2d657a3;hpb=85cc44d618877b8dbedf56fd8f5454a948a636a3;p=wimlib diff --git a/src/rbtree.h b/src/rbtree.h index 6aa18495..583230e0 100644 --- a/src/rbtree.h +++ b/src/rbtree.h @@ -1,7 +1,7 @@ /* Red Black Trees (C) 1999 Andrea Arcangeli - + 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 @@ -29,14 +29,13 @@ #ifndef _LINUX_RBTREE_H #define _LINUX_RBTREE_H -#include +#include "util.h" struct rb_node { unsigned long __rb_parent_color; struct rb_node *rb_right; struct rb_node *rb_left; -} __attribute__((aligned(sizeof(long)))); - /* The alignment might seem pointless, but allegedly CRIS needs it */ +}; struct rb_root { struct rb_node *rb_node; @@ -44,33 +43,11 @@ struct rb_root { #define rb_parent(r) ((struct rb_node *)((r)->__rb_parent_color & ~3)) - -#define RB_ROOT (struct rb_root) { NULL, } #define rb_entry(ptr, type, member) container_of(ptr, type, member) -#define RB_EMPTY_ROOT(root) ((root)->rb_node == NULL) - -/* 'empty' nodes are nodes that are known not to be inserted in an rbree */ -#define RB_EMPTY_NODE(node) \ - ((node)->__rb_parent_color == (unsigned long)(node)) -#define RB_CLEAR_NODE(node) \ - ((node)->__rb_parent_color = (unsigned long)(node)) - - extern void rb_insert_color(struct rb_node *, struct rb_root *); extern void rb_erase(struct rb_node *, struct rb_root *); - -/* Find logical next and previous nodes in a tree */ -extern struct rb_node *rb_next(const struct rb_node *); -extern struct rb_node *rb_prev(const struct rb_node *); -extern struct rb_node *rb_first(const struct rb_root *); -extern struct rb_node *rb_last(const struct rb_root *); - -/* Fast replacement of a single node without remove/rebalance/add/rebalance */ -extern void rb_replace_node(struct rb_node *victim, struct rb_node *new, - struct rb_root *root); - static inline void rb_link_node(struct rb_node * node, struct rb_node * parent, struct rb_node ** rb_link) {