Mercurial > code
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_ */