#include <linux/container_of.h>
#include <linux/rbtree_types.h>
#include <linux/stddef.h>
#include <linux/rcupdate.h>
Go to the source code of this file.
|
| #define | rb_parent(r) ((struct rb_node *)((r)->__rb_parent_color & ~3)) |
| |
| #define | rb_entry(ptr, type, member) container_of(ptr, type, member) |
| |
| #define | RB_EMPTY_ROOT(root) (READ_ONCE((root)->rb_node) == NULL) |
| |
| #define | RB_EMPTY_NODE(node) ((node)->__rb_parent_color == (uintptr_t)(node)) |
| |
| #define | RB_CLEAR_NODE(node) ((node)->__rb_parent_color = (uintptr_t)(node)) |
| |
| #define | RB_EMPTY_LINKED_NODE(lnode) RB_EMPTY_NODE(&(lnode)->node) |
| |
| #define | RB_CLEAR_LINKED_NODE(lnode) |
| |
| #define | rb_entry_safe(ptr, type, member) |
| |
| #define | rbtree_postorder_for_each_entry_safe(pos, n, root, field) |
| |
| #define | rb_first_cached(root) (root)->rb_leftmost |
| |
| #define | __node_2_linked_node(_n) rb_entry((_n), struct rb_node_linked, node) |
| |
| #define | rb_for_each(node, key, tree, cmp) |
| |
◆ __node_2_linked_node
◆ RB_CLEAR_LINKED_NODE
| #define RB_CLEAR_LINKED_NODE |
( |
|
lnode | ) |
|
Value: ({ \
RB_CLEAR_NODE(&(lnode)->
node); \
(lnode)->prev = (lnode)->next =
NULL; \
})
#define NULL
Definition actypes.h:561
void int node
Definition kthread.h:31
◆ RB_CLEAR_NODE
◆ RB_EMPTY_LINKED_NODE
◆ RB_EMPTY_NODE
◆ RB_EMPTY_ROOT
◆ rb_entry
| #define rb_entry |
( |
|
ptr, |
|
|
|
type, |
|
|
|
member |
|
) |
| container_of(ptr, type, member) |
◆ rb_entry_safe
| #define rb_entry_safe |
( |
|
ptr, |
|
|
|
type, |
|
|
|
member |
|
) |
| |
Value: ({ typeof(ptr) ____ptr = (ptr); \
})
#define rb_entry(ptr, type, member)
Definition rbtree.h:28
◆ rb_first_cached
| #define rb_first_cached |
( |
|
root | ) |
(root)->rb_leftmost |
◆ rb_for_each
| #define rb_for_each |
( |
|
node, |
|
|
|
key, |
|
|
|
tree, |
|
|
|
cmp |
|
) |
| |
Value: for ((
node) = rb_find_first((key), (tree), (
cmp)); \
int const struct list_head const struct list_head struct list_head list_cmp_func_t cmp
Definition list_sort.h:13
rb_for_each() - iterates a subtree matching @key @node: iterator @key: key to match @tree: tree to search @cmp: operator defining node order
◆ rb_parent
◆ rbtree_postorder_for_each_entry_safe
| #define rbtree_postorder_for_each_entry_safe |
( |
|
pos, |
|
|
|
n, |
|
|
|
root, |
|
|
|
field |
|
) |
| |
Value:
typeof(*pos), field); 1; }); \
pos = n)
struct rb_node * rb_next_postorder(const struct rb_node *)
#define rb_entry_safe(ptr, type, member)
Definition rbtree.h:116
struct rb_node * rb_first_postorder(const struct rb_root *)
TTY * root
Definition tty.cpp:47
rbtree_postorder_for_each_entry_safe - iterate in post-order over rb_root of given type allowing the backing memory of @pos to be invalidated
@pos: the 'type *' to use as a loop cursor.
: another 'type *' to use as temporary storage @root: 'rb_root *' of the rbtree. @field: the name of the rb_node field within 'type'.
rbtree_postorder_for_each_entry_safe() provides a similar guarantee as list_for_each_entry_safe() and allows the iteration to continue independent of changes to @pos by the body of the loop.
Note, however, that it cannot handle other modifications that re-order the rbtree it is iterating over. This includes calling rb_erase() on @pos, as rb_erase() may rebalance the tree, causing us to miss some nodes.
◆ rb_erase()
◆ rb_erase_linked()
◆ rb_first_postorder()
◆ rb_insert_color()
◆ rb_next()
◆ rb_next_postorder()
◆ rb_prev()
◆ rb_replace_node()
◆ rb_replace_node_rcu()