unsigned int i;
struct tlist_children tlist = TLIST_INIT(tlist);
- plan_tests(44);
+ plan_tests(48);
/* Test TLIST_INIT, and tlist_empty */
ok1(tlist_empty(&tlist));
ok1(tlist_check(&tlist, NULL));
}
ok1(i == 3);
+ /* Test tlist_for_each_rev. */
+ i = 0;
+ tlist_for_each_rev(&parent.children, c, list) {
+ switch (i++) {
+ case 0:
+ ok1(c == &c3);
+ break;
+ case 1:
+ ok1(c == &c2);
+ break;
+ case 2:
+ ok1(c == &c1);
+ break;
+ }
+ if (i > 2)
+ break;
+ }
+ ok1(i == 3);
+
/* Test tlist_for_each_safe, tlist_del and tlist_del_from. */
i = 0;
tlist_for_each_safe(&parent.children, c, n, list) {
#define tlist_for_each(h, i, member) \
list_for_each(tlist_raw((h), (i)), (i), member)
+/**
+ * tlist_for_each - iterate through a list backwards.
+ * @h: the tlist
+ * @i: an iterator of suitable type for this list.
+ * @member: the list_node member of @i
+ *
+ * This is a convenient wrapper to iterate @i over the entire list. It's
+ * a for loop, so you can break and continue as normal.
+ *
+ * Example:
+ * tlist_for_each_rev(&parent->children, child, list)
+ * printf("Name: %s\n", child->name);
+ */
+#define tlist_for_each_rev(h, i, member) \
+ list_for_each_rev(tlist_raw((h), (i)), (i), member)
+
/**
* tlist_for_each_safe - iterate through a list, maybe during deletion
* @h: the tlist