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[]) ...@@ -22,7 +22,7 @@ int main(int argc, char *argv[])
unsigned int i; unsigned int i;
struct tlist_children tlist = TLIST_INIT(tlist); struct tlist_children tlist = TLIST_INIT(tlist);
plan_tests(44); plan_tests(48);
/* Test TLIST_INIT, and tlist_empty */ /* Test TLIST_INIT, and tlist_empty */
ok1(tlist_empty(&tlist)); ok1(tlist_empty(&tlist));
ok1(tlist_check(&tlist, NULL)); ok1(tlist_check(&tlist, NULL));
...@@ -97,6 +97,25 @@ int main(int argc, char *argv[]) ...@@ -97,6 +97,25 @@ int main(int argc, char *argv[])
} }
ok1(i == 3); 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. */ /* Test tlist_for_each_safe, tlist_del and tlist_del_from. */
i = 0; i = 0;
tlist_for_each_safe(&parent.children, c, n, list) { tlist_for_each_safe(&parent.children, c, n, list) {
......
...@@ -221,6 +221,22 @@ ...@@ -221,6 +221,22 @@
#define tlist_for_each(h, i, member) \ #define tlist_for_each(h, i, member) \
list_for_each(tlist_raw((h), (i)), (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 * tlist_for_each_safe - iterate through a list, maybe during deletion
* @h: the tlist * @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