Mercurial > code
diff array.h @ 8:127254037b30
Switch to a void * array instead of void **
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 07 Sep 2011 20:12:40 +0200 |
parents | 25cc379de564 |
children | 596f33ecc087 |
line wrap: on
line diff
--- a/array.h Wed Sep 07 07:33:25 2011 +0200 +++ b/array.h Wed Sep 07 20:12:40 2011 +0200 @@ -22,8 +22,8 @@ #define ARRAY_DEFAULT_BSIZE 128 struct array { - void **data; /* array of data */ - size_t length; /* number of element in array */ + void *data; /* array of data */ + int length; /* number of element inside */ #define ARRAY_FIXED 0x00000000 #define ARRAY_AUTO 0x00000001 @@ -31,12 +31,13 @@ /* Private should not be modified by user */ size_t size; /* current buffer size */ - size_t bsize; /* block size */ + size_t bsize; /* block size (used when growing array) */ + size_t unit; /* unit size (sizeof the object) */ }; -struct array *array_new(const void *, size_t, int); -#define array_new_auto(size) array_new(NULL, size, ARRAY_AUTO) -#define array_new_fixed(max) array_new(NULL, max, ARRAY_FIXED) +struct array *array_new(const void *, size_t, size_t, int); +#define array_new_auto(size) array_new(NULL, size, 0, ARRAY_AUTO) +#define array_new_fixed(size, max) array_new(NULL, size, max, ARRAY_FIXED) int array_push(struct array *, const void *); int array_insert(struct array *, const void *, int); @@ -46,12 +47,12 @@ void *array_remove(struct array *, int); void array_map(struct array *, void (*fn)(void *, void *), void *); void *array_find(struct array *, int (*fn)(void *, void *), void *, int *); -void array_clear(struct array *, int); -void array_free(struct array *, int); +void array_clear(struct array *); +void array_free(struct array *); #define ARRAY_FOREACH(array, entry, tmp, type) \ for ((tmp) = (type **) (array)->data, entry = *tmp; \ (entry) != NULL; \ ++(tmp), (entry) = (*tmp)) -#endif /* _ARRAY_H */ +#endif /* _ARRAY_H_ */