changeset 25:e09000fc013a

Switch to void * thus the user do not need to cast
author David Demelier <markand@malikania.fr>
date Thu, 15 Sep 2011 17:53:43 +0200
parents 726b181b8956
children 4fd9ecbbb143
files array.c array.h
diffstat 2 files changed, 25 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/array.c	Thu Sep 15 14:31:52 2011 +0200
+++ b/array.c	Thu Sep 15 17:53:43 2011 +0200
@@ -65,8 +65,8 @@
 	if (array_grow(arr) < 0)
 		return -1;
 
-	memmove(arr->data + arr->unit, arr->data, SIZE(arr->length++));
-	memcpy(arr->data, data, arr->unit);
+	memmove((char *) arr->data + arr->unit, arr->data, SIZE(arr->length++));
+	memcpy((char *) arr->data, data, arr->unit);
 
 	return 0;
 }
@@ -83,9 +83,9 @@
 	if (index > arr->length - 1 || index < 0 || array_grow(arr) < 0)
 		return -1;
 
-	memmove(arr->data + SIZE(index + 1), arr->data + SIZE(index),
+	memmove((char *) arr->data + SIZE(index + 1), (char *) arr->data + SIZE(index),
 	    SIZE(arr->length++ - index));
-	memcpy(arr->data + SIZE(index), data, arr->unit);
+	memcpy((char *) arr->data + SIZE(index), data, arr->unit);
 
 	return 0;
 }
@@ -100,7 +100,7 @@
 	if (array_grow(arr) < 0)
 		return -1;
 
-	memcpy(arr->data + SIZE(arr->length++), data, arr->unit);
+	memcpy((char *) arr->data + SIZE(arr->length++), data, arr->unit);
 
 	return 0;
 }
@@ -119,8 +119,9 @@
 		return NULL;
 
 	data = arr->data;
-	memmove(arr->data, arr->data + SIZE(1), SIZE(arr->length));
-	memset(arr->data + SIZE(--arr->length), 0, arr->unit);
+	memmove((char *) arr->data, (char *) arr->data + SIZE(1),
+	    SIZE(arr->length));
+	memset((char *) arr->data + SIZE(--arr->length), 0, arr->unit);
 
 	return data;
 }
@@ -138,8 +139,8 @@
 	if (arr->length == 0)
 		return NULL;
 
-	data = arr->data + SIZE(--arr->length);
-	memset(arr->data + SIZE(arr->length), 0, arr->unit);
+	data = (char *) arr->data + SIZE(--arr->length);
+	memset((char *) arr->data + SIZE(arr->length), 0, arr->unit);
 
 	return data;
 }
@@ -157,10 +158,10 @@
 	if (arr->length == 0 || index < 0 || index > arr->length - 1)
 		return NULL;
 
-	data = arr->data + SIZE(index);
-	memmove(arr->data + SIZE(index), arr->data + SIZE(index + 1),
+	data = (char *) arr->data + SIZE(index);
+	memmove((char *) arr->data + SIZE(index), (char *) arr->data + SIZE(index + 1),
 	    SIZE(arr->length - index));
-	memset(arr->data + SIZE(--arr->length), 0, arr->unit);
+	memset((char *) arr->data + SIZE(--arr->length), 0, arr->unit);
 
 	return data;
 }
@@ -186,9 +187,9 @@
 	if (!arr->tmp && !(arr->tmp = malloc(arr->unit)))
 		return -1;
 
-	memcpy(arr->tmp, arr->data + SIZE(i1), arr->unit);
-	memcpy(arr->data + SIZE(i1), arr->data + SIZE(i2), arr->unit);
-	memcpy(arr->data + SIZE(i2), arr->tmp, arr->unit);
+	memcpy((char *) arr->tmp, (char *) arr->data + SIZE(i1), arr->unit);
+	memcpy((char *) arr->data + SIZE(i1), (char *) arr->data + SIZE(i2), arr->unit);
+	memcpy((char *) arr->data + SIZE(i2), (char *) arr->tmp, arr->unit);
 
 	return 0;
 }
@@ -204,7 +205,7 @@
 	int i;
 
 	for (i = 0; i < arr->length; ++i)
-		fn(arr->data + i, udata);
+		fn((char *) arr->data + SIZE(i), udata);
 }
 
 /*
@@ -215,16 +216,16 @@
  */
 
 void *
-array_find(struct array *arr, int (*fn)(void *, void *), void *udata, int *idx)
+array_find(struct array *arr, int (*fn)(void *, void *), int *idx, void *udata)
 {
 	int st, i;
 	void *data;
 
 	for (i = st = 0; i < arr->length && !st; ++i)
-		st = fn(arr->data + i, udata);
+		st = fn((char *) arr->data + SIZE(i), udata);
 
 	if (st)	{
-		data = arr->data + --i;
+		data = (char *) arr->data + SIZE(--i);
 		if (idx)
 			*idx = i;
 	} else
--- a/array.h	Thu Sep 15 14:31:52 2011 +0200
+++ b/array.h	Thu Sep 15 17:53:43 2011 +0200
@@ -22,8 +22,8 @@
 #define ARRAY_DEFAULT_BSIZE	128
 
 struct array {
-	char	*data;	/* array of data */
-	char	*tmp;	/* only used for array_swap() */
+	void	*data;	/* array of data */
+	void	*tmp;	/* only used for array_swap() */
 	int	length;	/* number of element inside */
 
 #define ARRAY_FIXED	0x00000000
@@ -48,13 +48,11 @@
 void	*array_remove(struct array *, int);
 int	array_swap(struct array *, int, int);
 void	array_map(struct array *, void (*fn)(void *, void *), void *);
-void	*array_find(struct array *, int (*fn)(void *, void *), void *, int *);
+void	*array_find(struct array *, int (*fn)(void *, void *), int *, void *);
 void	array_clear(struct array *);
 void	array_free(struct array *);
 
-#define ARRAY_FOREACH(array, var, i, type)					\
-	for (i = 0, var = (type *) array->data;					\
-	    i < array->length;							\
-	    ++i, ++var)
+#define ARRAY_FOREACH(array, var, i)					\
+	for (i = 0, var = array->data; i < array->length; ++i, ++var)
 
 #endif /* _ARRAY_H_ */