This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 1/8] Add new FOREACH_FROM variants of the queue(3) FOREACH macros which can optionally start the traversal from a previously found element by passing the element in as "var". Passing a NULL "var" retains the same semantics as the regular FOREACH macros.


Hi Sebastian,

would you mind to resend the patches 1, 2, 4, 5, with subject length
restricted to +/- 72 chars?  There was only one such patch in your
previous patchset, so I fixed that myself.


Thanks,
Corinna


On Apr  4 10:34, Sebastian Huber wrote:
> From: lstewart <lstewart@FreeBSD.org>
> 
> Kudos to phk for suggesting the "FROM" suffix instead of my original proposal.
> 
> Reviewed by:	jhb (previous version), rpaulo
> MFC after:	1 week
> ---
>  newlib/libc/include/sys/queue.h | 53 +++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 53 insertions(+)
> 
> diff --git a/newlib/libc/include/sys/queue.h b/newlib/libc/include/sys/queue.h
> index 4bc7dac..7a5bc79 100644
> --- a/newlib/libc/include/sys/queue.h
> +++ b/newlib/libc/include/sys/queue.h
> @@ -88,9 +88,13 @@
>   * _PREV			-	+	-	+
>   * _LAST			-	-	+	+
>   * _FOREACH			+	+	+	+
> + * _FOREACH_FROM		+	+	+	+
>   * _FOREACH_SAFE		+	+	+	+
> + * _FOREACH_FROM_SAFE		+	+	+	+
>   * _FOREACH_REVERSE		-	-	-	+
> + * _FOREACH_REVERSE_FROM	-	-	-	+
>   * _FOREACH_REVERSE_SAFE	-	-	-	+
> + * _FOREACH_REVERSE_FROM_SAFE	-	-	-	+
>   * _INSERT_HEAD			+	+	+	+
>   * _INSERT_BEFORE		-	+	-	+
>   * _INSERT_AFTER		+	+	+	+
> @@ -167,11 +171,21 @@ struct {								\
>  	    (var);							\
>  	    (var) = SLIST_NEXT((var), field))
>  
> +#define	SLIST_FOREACH_FROM(var, head, field)				\
> +	for ((var) = ((var) ? (var) : SLIST_FIRST((head)));		\
> +	    (var);							\
> +	    (var) = SLIST_NEXT((var), field))
> +
>  #define	SLIST_FOREACH_SAFE(var, head, field, tvar)			\
>  	for ((var) = SLIST_FIRST((head));				\
>  	    (var) && ((tvar) = SLIST_NEXT((var), field), 1);		\
>  	    (var) = (tvar))
>  
> +#define	SLIST_FOREACH_FROM_SAFE(var, head, field, tvar)			\
> +	for ((var) = ((var) ? (var) : SLIST_FIRST((head)));		\
> +	    (var) && ((tvar) = SLIST_NEXT((var), field), 1);		\
> +	    (var) = (tvar))
> +
>  #define	SLIST_FOREACH_PREVPTR(var, varp, head, field)			\
>  	for ((varp) = &SLIST_FIRST((head));				\
>  	    ((var) = *(varp)) != NULL;					\
> @@ -259,12 +273,21 @@ struct {								\
>  	   (var);							\
>  	   (var) = STAILQ_NEXT((var), field))
>  
> +#define	STAILQ_FOREACH_FROM(var, head, field)				\
> +	for ((var) = ((var) ? (var) : STAILQ_FIRST((head)));		\
> +	   (var);							\
> +	   (var) = STAILQ_NEXT((var), field))
>  
>  #define	STAILQ_FOREACH_SAFE(var, head, field, tvar)			\
>  	for ((var) = STAILQ_FIRST((head));				\
>  	    (var) && ((tvar) = STAILQ_NEXT((var), field), 1);		\
>  	    (var) = (tvar))
>  
> +#define	STAILQ_FOREACH_FROM_SAFE(var, head, field, tvar)		\
> +	for ((var) = ((var) ? (var) : STAILQ_FIRST((head)));		\
> +	    (var) && ((tvar) = STAILQ_NEXT((var), field), 1);		\
> +	    (var) = (tvar))
> +
>  #define	STAILQ_INIT(head) do {						\
>  	STAILQ_FIRST((head)) = NULL;					\
>  	(head)->stqh_last = &STAILQ_FIRST((head));			\
> @@ -394,11 +417,21 @@ struct {								\
>  	    (var);							\
>  	    (var) = LIST_NEXT((var), field))
>  
> +#define	LIST_FOREACH_FROM(var, head, field)				\
> +	for ((var) = ((var) ? (var) : LIST_FIRST((head)));		\
> +	    (var);							\
> +	    (var) = LIST_NEXT((var), field))
> +
>  #define	LIST_FOREACH_SAFE(var, head, field, tvar)			\
>  	for ((var) = LIST_FIRST((head));				\
>  	    (var) && ((tvar) = LIST_NEXT((var), field), 1);		\
>  	    (var) = (tvar))
>  
> +#define	LIST_FOREACH_FROM_SAFE(var, head, field, tvar)			\
> +	for ((var) = ((var) ? (var) : LIST_FIRST((head)));		\
> +	    (var) && ((tvar) = LIST_NEXT((var), field), 1);		\
> +	    (var) = (tvar))
> +
>  #define	LIST_INIT(head) do {						\
>  	LIST_FIRST((head)) = NULL;					\
>  } while (0)
> @@ -531,21 +564,41 @@ struct {								\
>  	    (var);							\
>  	    (var) = TAILQ_NEXT((var), field))
>  
> +#define	TAILQ_FOREACH_FROM(var, head, field)				\
> +	for ((var) = ((var) ? (var) : TAILQ_FIRST((head)));		\
> +	    (var);							\
> +	    (var) = TAILQ_NEXT((var), field))
> +
>  #define	TAILQ_FOREACH_SAFE(var, head, field, tvar)			\
>  	for ((var) = TAILQ_FIRST((head));				\
>  	    (var) && ((tvar) = TAILQ_NEXT((var), field), 1);		\
>  	    (var) = (tvar))
>  
> +#define	TAILQ_FOREACH_FROM_SAFE(var, head, field, tvar)			\
> +	for ((var) = ((var) ? (var) : TAILQ_FIRST((head)));		\
> +	    (var) && ((tvar) = TAILQ_NEXT((var), field), 1);		\
> +	    (var) = (tvar))
> +
>  #define	TAILQ_FOREACH_REVERSE(var, head, headname, field)		\
>  	for ((var) = TAILQ_LAST((head), headname);			\
>  	    (var);							\
>  	    (var) = TAILQ_PREV((var), headname, field))
>  
> +#define	TAILQ_FOREACH_REVERSE_FROM(var, head, headname, field)		\
> +	for ((var) = ((var) ? (var) : TAILQ_LAST((head), headname));	\
> +	    (var);							\
> +	    (var) = TAILQ_PREV((var), headname, field))
> +
>  #define	TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar)	\
>  	for ((var) = TAILQ_LAST((head), headname);			\
>  	    (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1);	\
>  	    (var) = (tvar))
>  
> +#define	TAILQ_FOREACH_REVERSE_FROM_SAFE(var, head, headname, field, tvar) \
> +	for ((var) = ((var) ? (var) : TAILQ_LAST((head), headname));	\
> +	    (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1);	\
> +	    (var) = (tvar))
> +
>  #define	TAILQ_INIT(head) do {						\
>  	TAILQ_FIRST((head)) = NULL;					\
>  	(head)->tqh_last = &TAILQ_FIRST((head));			\
> -- 
> 1.8.4.5

-- 
Corinna Vinschen
Cygwin Maintainer
Red Hat

Attachment: signature.asc
Description: PGP signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]