diff parray.h @ 51:82bbd3b869e3

Fix some problem with ()
author David Demelier <markand@malikania.fr>
date Fri, 07 Oct 2011 17:43:48 +0200
parents 2901c594eaef
children 8a8db17c02a4
line wrap: on
line diff
--- a/parray.h	Fri Oct 07 16:58:58 2011 +0200
+++ b/parray.h	Fri Oct 07 17:43:48 2011 +0200
@@ -54,25 +54,17 @@
 void		parray_free(struct parray *);
 
 #define PARRAY_HEAD(a)								\
-	a->datas[0]
+	(a->datas[0])
 #define PARRAY_TAIL(a)								\
-	a->datas[(a->length == 0) ? 0 : a->length - 1]
-
-#if 0
+	(a->datas[(a->length == 0) ? 0 : a->length - 1])
 #define PARRAY_INDEX(a, i)							\
-	a->datas[(i < 0 || a->length == 0) ? 0		/* < 0 head */		\
-	    : (i >= a->length) ? a->length - 1		/* > l tail */		\
-	    : i]					/* correct */
-#endif
-
-#define PARRAY_INDEX(a, i)							\
-	((i < 0 || a->length == 0) ? PARRAY_HEAD(a)	/* < 0 head */		\
-	    : (i >= a->length) ? PARRAY_TAIL(a)		/* > l tail */		\
-	    : a->datas[i])				/* correct */
+	(((i) < 0 || (a)->length == 0) ? (PARRAY_HEAD((a)))	/* < 0 head */	\
+	    : ((i) >= (a)->length) ? (PARRAY_TAIL((a)))		/* > l tail */	\
+	    : ((a)->datas[i]))					/* correct */
 
 #define PARRAY_FOREACH_R(a, var)						\
-	for ((a)->i = (a)->length - 1, var = PARRAY_INDEX((a), (a)->i);	\
-	    (a)->i >= 0; --(a)->i, var = PARRAY_INDEX((a), (a)->i))
+	for ((a)->i = 0, var = PARRAY_TAIL((a));				\
+	    (a)->i < (a)->length; ++(a)->i, var = PARRAY_INDEX((a), (a)->i))
 
 #define PARRAY_FOREACH(a, var)							\
 	for ((a)->i = 0, var = PARRAY_INDEX((a), (a)->i);			\