comparison array.h @ 93:9ebea85c7765

Use pointer instead of copying variable in ARRAY_FOREACH, then you can modify it
author David Demelier <markand@malikania.fr>
date Wed, 04 Jan 2012 13:21:15 +0100
parents 4d723e81b685
children f5339bdc5cb1
comparison
equal deleted inserted replaced
92:4d723e81b685 93:9ebea85c7765
49 }; 49 };
50 50
51 typedef void (*array_map_fn)(void *, void *); 51 typedef void (*array_map_fn)(void *, void *);
52 typedef int (*array_cmp_fn)(void *, void *); 52 typedef int (*array_cmp_fn)(void *, void *);
53 53
54 int array_new(struct array *, size_t); 54 int array_init(struct array *, size_t);
55 void array_set(struct array *, const char *, ...); 55 void array_set(struct array *, const char *, ...);
56 int array_push(struct array *, const void *); 56 int array_push(struct array *, const void *);
57 int array_insert(struct array *, const void *, int); 57 int array_insert(struct array *, const void *, int);
58 int array_append(struct array *, const void *); 58 int array_append(struct array *, const void *);
59 void array_pop(struct array *); 59 void array_pop(struct array *);
74 #define ARRAY_INDEX(a, i, type) \ 74 #define ARRAY_INDEX(a, i, type) \
75 ((type *)(a)->data)[((i) < 0) \ 75 ((type *)(a)->data)[((i) < 0) \
76 ? 0 : ((i) >= (a)->length) ? (a)->length - 1 : (i)] 76 ? 0 : ((i) >= (a)->length) ? (a)->length - 1 : (i)]
77 77
78 #define ARRAY_FOREACH(a, var, type) \ 78 #define ARRAY_FOREACH(a, var, type) \
79 for ((a)->i = 0, var = ARRAY_HEAD((a), type); \ 79 for ((a)->i = 0, var = &ARRAY_HEAD((a), type); \
80 (a)->i < (a)->length; \ 80 (a)->i < (a)->length; \
81 ++(a)->i, var = ARRAY_INDEX((a), (a)->i, type)) 81 ++(a)->i, var = &ARRAY_INDEX((a), (a)->i, type))
82 82
83 /* Only for ARRAY_FIXED */ 83 /* Only for ARRAY_FIXED */
84 #define ARRAY_FULL(a) \ 84 #define ARRAY_FULL(a) \
85 ((a)->length == (a)->bsize) 85 ((a)->length == (a)->bsize)
86 86