changeset 51:82bbd3b869e3

Fix some problem with ()
author David Demelier <markand@malikania.fr>
date Fri, 07 Oct 2011 17:43:48 +0200
parents 2901c594eaef
children 14c0b77f679b
files array.h parray.h
diffstat 2 files changed, 18 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/array.h	Fri Oct 07 16:58:58 2011 +0200
+++ b/array.h	Fri Oct 07 17:43:48 2011 +0200
@@ -55,20 +55,21 @@
 void		array_free(struct array *);
 
 #define ARRAY_HEAD(a)								\
-	a->data
+	(a->data)
 #define ARRAY_TAIL(a)								\
-	(void *) ((char *) a->data +						\
-	    (a->unit * ((a->length == 0) ? 0 : (a->length - 1))))
+	((void *) ((char *) (a)->data +						\
+	    ((a)->unit * (((a)->length == 0) ? 0 : ((a)->length - 1)))))
+#define ARRAY_INDEX(a, i)							\
+	(((i) < 0 || (a)->length == 0) ? (ARRAY_HEAD((a)))	/* < 0 head */	\
+	    : ((i) >= (a)->length) ? (ARRAY_TAIL((a)))		/* > l tail */	\
+	    : ((void *) ((char *) (a)->data + ((a)->unit * (i))))) /* correct */
 
-#define ARRAY_INDEX(a, i)							\
-	(void *) (i < 0 || a->length == 0) ? ARRAY_HEAD(a)	/* < 0 head */	\
-	    : (i >= a->length) ? ARRAY_TAIL(a)			/* > l tail */	\
-	    : ((char *) a->data + (a->unit * i))		/* correct */
+#define ARRAY_FOREACH_R(a, var)							\
+	for ((a)->i = 0, var = ARRAY_TAIL((a));					\
+	    (a)->i < (a)->length; ++(a)->i, --var)
 
 #define ARRAY_FOREACH(a, var)							\
-	for (a->i = 0, var = a->data; a->i < a->length; ++a->i, ++var)
+	for ((a)->i = 0, var = (a)->data; (a)->i < (a)->length; ++(a)->i, ++var)
 
-#define ARRAY_FOREACH_R(a, var)							\
-	for (a->i = 0, var = ARRAY_TAIL(a); a->i < a->length; ++a->i, --var)
 
 #endif /* _ARRAY_H_ */
--- 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);			\