X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Ftlist%2Ftlist.h;h=a99191a2e0ebd75e9b13145550ac90d0a859f72e;hb=8f116a81b39b55031212abb0be2ad088cbf9fd87;hp=937a834c0184fb4d54928ca57db9668a929b1f8c;hpb=919b97d6e573eb794d7819f1af8da29023d6b193;p=ccan diff --git a/ccan/tlist/tlist.h b/ccan/tlist/tlist.h index 937a834c..a99191a2 100644 --- a/ccan/tlist/tlist.h +++ b/ccan/tlist/tlist.h @@ -11,15 +11,16 @@ * * This declares a structure "struct tlist_@suffix" to use for * lists containing this type. The actual list can be accessed using - * ".raw" or tlist_raw(). + * ".raw" or tlist_raw(). For maximum portability, place tlists + * embedded in structures as the last member. * * Example: * // Defines struct tlist_children * TLIST_TYPE(children, struct child); * struct parent { * const char *name; - * struct tlist_children children; * unsigned int num_children; + * struct tlist_children children; * }; * * struct child { @@ -213,6 +214,30 @@ (char *)(&(h)->_tcon[0].canary->member) - \ (char *)((h)->_tcon[0].canary))) +/** + * tlist_next - get the next entry in a list + * @h: the tlist + * @n: the list element + * @member: the list_node member of the type + * + * Returns the element of list @h immediately after @n, or NULL, if @n + * is the last element in the list. + */ +#define tlist_next(h, n, member) \ + list_next(tlist_raw((h), (n)), (n), member) + +/** + * tlist_prev - get the previous entry in a list + * @h: the tlist + * @n: the list element + * @member: the list_node member of the type + * + * Returns the element of list @h immediately before @n, or NULL, if + * @n is the first element in the list. + */ +#define tlist_prev(h, n, member) \ + list_prev(tlist_raw((h), (n)), (n), member) + /** * tlist_for_each - iterate through a list. * @h: the tlist