Rev 4103 | Rev 6082 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4103 | Rev 5056 | ||
---|---|---|---|
Line 83... | Line 83... | ||
83 | node->rb_left = node->rb_right = NULL; |
83 | node->rb_left = node->rb_right = NULL; |
Line 84... | Line 84... | ||
84 | 84 | ||
85 | *rb_link = node; |
85 | *rb_link = node; |
Line -... | Line 86... | ||
- | 86 | } |
|
- | 87 | ||
- | 88 | #define rb_entry_safe(ptr, type, member) \ |
|
- | 89 | ({ typeof(ptr) ____ptr = (ptr); \ |
|
- | 90 | ____ptr ? rb_entry(____ptr, type, member) : NULL; \ |
|
86 | } |
91 | }) |
87 | 92 | ||
88 | /** |
93 | /** |
89 | * rbtree_postorder_for_each_entry_safe - iterate over rb_root in post order of |
94 | * rbtree_postorder_for_each_entry_safe - iterate over rb_root in post order of |
90 | * given type safe against removal of rb_node entry |
95 | * given type safe against removal of rb_node entry |
91 | * |
96 | * |
92 | * @pos: the 'type *' to use as a loop cursor. |
97 | * @pos: the 'type *' to use as a loop cursor. |
93 | * @n: another 'type *' to use as temporary storage |
98 | * @n: another 'type *' to use as temporary storage |
94 | * @root: 'rb_root *' of the rbtree. |
99 | * @root: 'rb_root *' of the rbtree. |
95 | * @field: the name of the rb_node field within 'type'. |
100 | * @field: the name of the rb_node field within 'type'. |
96 | */ |
101 | */ |
97 | #define rbtree_postorder_for_each_entry_safe(pos, n, root, field) \ |
102 | #define rbtree_postorder_for_each_entry_safe(pos, n, root, field) \ |
98 | for (pos = rb_entry(rb_first_postorder(root), typeof(*pos), field),\ |
103 | for (pos = rb_entry_safe(rb_first_postorder(root), typeof(*pos), field); \ |
99 | n = rb_entry(rb_next_postorder(&pos->field), \ |
- | |
100 | typeof(*pos), field); \ |
104 | pos && ({ n = rb_entry_safe(rb_next_postorder(&pos->field), \ |
101 | &pos->field; \ |
- | |
102 | pos = n, \ |
- | |
Line 103... | Line 105... | ||
103 | n = rb_entry(rb_next_postorder(&pos->field), \ |
105 | typeof(*pos), field); 1; }); \ |