X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Frbtree.h;h=c9321a68c35a2fd0f88d601fa19624292f80c7fa;hp=3fa0f16c3a9937454bbbb1f4c782621c3d29f74e;hb=22c0e369cb60b73a9ec209c878173001bfb43db8;hpb=d5b841b4d3243c7c6922d9254fb4e5b9f0b58d41 diff --git a/src/rbtree.h b/src/rbtree.h index 3fa0f16c..c9321a68 100644 --- a/src/rbtree.h +++ b/src/rbtree.h @@ -29,14 +29,14 @@ #ifndef _LINUX_RBTREE_H #define _LINUX_RBTREE_H -#include +#include "util.h" +#include struct rb_node { - unsigned long __rb_parent_color; + uintptr_t __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,37 +44,15 @@ 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) { - node->__rb_parent_color = (unsigned long)parent; + node->__rb_parent_color = (uintptr_t)parent; node->rb_left = node->rb_right = NULL; *rb_link = node;