X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fhelper%2Flist.h;fp=src%2Fhelper%2Flist.h;h=552a3202a5535666175808d1cfef7b691cc089d2;hb=a11fe473eaee235a51dba7900c08cc7629ed2794;hp=a7cd4ad37f2f4a03747471987d4ffad619da7c9a;hpb=16cc853bcfbcc8dba6eadd91b434c05387034c0a;p=openocd.git diff --git a/src/helper/list.h b/src/helper/list.h index a7cd4ad37f..552a3202a5 100644 --- a/src/helper/list.h +++ b/src/helper/list.h @@ -656,6 +656,20 @@ static inline void list_splice_tail_init(struct list_head *list, !list_entry_is_head(pos, head, member); \ pos = list_prev_entry(pos, member)) +/** + * list_for_each_entry_direction - iterate forward/backward over list of given type + * @param forward the iterate direction, true for forward, false for backward. + * @param pos the type * to use as a loop cursor. + * @param head the head for your list. + * @param member the name of the list_head within the struct. + */ +#define list_for_each_entry_direction(forward, pos, head, member) \ + for (pos = forward ? list_first_entry(head, typeof(*pos), member) \ + : list_last_entry(head, typeof(*pos), member); \ + !list_entry_is_head(pos, head, member); \ + pos = forward ? list_next_entry(pos, member) \ + : list_prev_entry(pos, member)) + /** * list_prepare_entry - prepare a pos entry for use in list_for_each_entry_continue() * @param pos the type * to use as a start point