37 static inline struct array_list *array_list_create(
int initsize) {
43 list->
list = (
void **)
malloc(
sizeof(
void *)*initsize);
52 list->
list = (
void **)
malloc(
sizeof(
void *)*initsize);
67 if (oldlist && oldlist->
len) {
68 memcpy(newlist->
list,oldlist->
list,
sizeof(
void *)*(oldlist->
len));
69 newlist->
len = oldlist->
len;
74 static inline int32_t array_list_len(
struct array_list *list) {
81 static inline int32_t array_list_alloc_len(
struct array_list *list) {
88 static inline int32_t array_list_space(
struct array_list *list) {
92 static inline int array_list_resize(
struct array_list *list,
int newsize) {
98 if (!(lltmp = (
void **)
realloc(list->
list,newsize*
sizeof(
void *)))) {
104 if (newsize < list->
len)
110 static inline int array_list_compact(
struct array_list *list) {
111 return array_list_resize(list,list->
len);
114 static inline int array_list_expand(
struct array_list *list,
int plussize) {
118 (list->
alloc_len+plussize)*
sizeof(
void *)))) {
130 static inline int array_list_expand_to(
struct array_list *list,
int plussize) {
136 return array_list_expand(list,newsize);
141 array_list_expand_to(list,list->
len + newtail->
len);
142 memcpy(list->
list + list->
len *
sizeof(
void *),newtail->
list,newtail->
len);
143 list->
len += newtail->
len;
148 static inline int array_list_add(
struct array_list *list,
void *element) {
154 (list->
len+1)*
sizeof(
void *)))) {
161 list->
list[list->
len] = element;
172 static inline int array_list_add_item_at(
struct array_list *list,
173 void *element,
int i) {
178 return array_list_add(list,element);
179 else if (list->
len < i)
185 (list->
len+1)*
sizeof(
void *)))) {
193 for (j = i; j < list->
len; ++j)
196 list->
list[i] = element;
202 static inline int array_list_append(
struct array_list *list,
void *element) {
203 return array_list_add(list,element);
206 static inline int array_list_prepend(
struct array_list *list,
void *element) {
213 (list->
len+1)*
sizeof(
void *)))) {
221 for (i = list->
len - 1; i > -1; --i) {
225 list->
list[0] = element;
232 static inline int array_list_prepend_sublist(
struct array_list *list,
239 howmany = prelist->
len + howmany;
240 else if (howmany == 0)
242 else if (howmany > prelist->
len)
248 (list->
alloc_len + howmany)*
sizeof(
void *)))) {
256 for (i = list->
len - 1; i > -1; --i) {
260 memcpy(list->
list,prelist->
list,howmany * (
sizeof(
void *)));
262 list->
len += howmany;
267 static inline void *array_list_remove(
struct array_list *list) {
269 return list->
list[--list->
len];
274 static inline void array_list_remove_all(
struct array_list *list,
int maxsize) {
278 array_list_resize(list,maxsize);
281 static inline void *array_list_remove_item_at(
struct array_list *list,
int i) {
284 if (!list->
list || list->
len < 1)
287 if (i == (list->
len - 1)) {
288 item = list->
list[
i];
292 else if (i < list->
len) {
293 item = list->
list[
i];
295 for ( ; i < list->
len - 1; ++
i) {
305 static inline void *array_list_remove_item(
struct array_list *list,
void *item) {
308 if (!list->
list || list->
len < 1)
311 for (i = 0; i < list->
len; ++
i) {
312 if (list->
list[i] == item)
317 return array_list_remove_item_at(list,i);
322 static inline int array_list_find(
struct array_list *list,
void *item) {
325 if (!list->
list || list->
len < 1)
328 for (i = 0; i < list->
len; ++
i) {
329 if (list->
list[i] == item)
336 static inline void *array_list_item(
struct array_list *list,
int i) {
337 if (!list->
list || i < 0 || i >= list->
len) {
341 return list->
list[
i];
344 static inline int array_list_item_set(
struct array_list *list,
int i,
void *item) {
345 if (!list->
list || i < 0 || i >= list->
len) {
349 list->
list[
i] = item;
353 static inline void array_list_free(
struct array_list *list) {
359 static inline void array_list_internal_free(
struct array_list *list) {
362 for (i = 0; i < list->
len; ++
i)
366 static inline void array_list_deep_free(
struct array_list *list) {
367 array_list_internal_free(list);
368 array_list_free(list);
371 #define array_list_foreach(alist,lpc,placeholder) \
372 for (lpc = 0, (placeholder) = alist->len ? (typeof(placeholder))alist->list[lpc] : (typeof(placeholder))NULL; \
373 alist->len - lpc > 0; \
374 ++lpc, (placeholder) = lpc < alist->len ? (typeof(placeholder))alist->list[lpc] : (typeof(placeholder))NULL)
376 #define array_list_foreach_continue(alist,lpc,placeholder) \
377 for ((placeholder) = (alist->len - lpc > 0) ? (typeof(placeholder))alist->list[lpc] : (typeof(placeholder))NULL; \
378 alist->len - lpc > 0; \
379 ++lpc, (placeholder) = lpc < alist->len ? (typeof(placeholder))alist->list[lpc] : (typeof(placeholder))NULL)
381 #define array_list_foreach_fakeptr_t(alist,lpc,placeholder,intertype) \
382 for (lpc = 0, (placeholder) = alist->len ? (typeof(placeholder))(intertype)alist->list[lpc] : (typeof(placeholder))(intertype)NULL; \
383 alist->len - lpc > 0; \
384 ++lpc, (placeholder) = lpc < alist->len ? (typeof(placeholder))(intertype)alist->list[lpc] : (typeof(placeholder))(intertype)NULL)
386 #define array_list_foreach_is_last(alist,lpc) \
387 (array_list_len(alist) == (lpc + 1))
389 #define array_list_foreach_delete(alist,lpc) \
390 array_list_remove_item_at(alist,lpc); lpc = lpc - 1;
392 static inline struct array_list *array_list_create_from_g_hash_table(GHashTable *ht) {
398 len = g_hash_table_size(ht);
405 g_hash_table_iter_init(&iter,ht);
406 while (g_hash_table_iter_next(&iter,NULL,&value))
407 array_list_append(list,value);
412 static inline struct array_list *array_list_create_from_g_hash_table_keys(GHashTable *ht) {
418 len = g_hash_table_size(ht);
425 g_hash_table_iter_init(&iter,ht);
426 while (g_hash_table_iter_next(&iter,&key,NULL))
427 array_list_append(list,key);
static uint64_t unsigned int i
void * realloc(void *ptr, size_t size)
void * malloc(size_t size)