Subversion Repositories Kolibri OS

Rev

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; }); \