Commit 6a906358 authored by Rusty Russell's avatar Rusty Russell

tlist: implement tlist_for_each_rev

parent c414947a
......@@ -22,7 +22,7 @@ int main(int argc, char *argv[])
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));
......@@ -97,6 +97,25 @@ int main(int argc, char *argv[])
}
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) {
......
......@@ -221,6 +221,22 @@
#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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment