1 /* 2 * This file is part of the zlog Library. 3 * 4 * Copyright (C) 2011 by Hardy Simpson <HardySimpson1984@gmail.com> 5 * 6 * Licensed under the LGPL v2.1, see the file COPYING in base directory. 7 */ 8 9 #ifndef __zc_arraylist_h 10 #define __zc_arraylist_h 11 12 #define ARRAY_LIST_DEFAULT_SIZE 32 13 14 typedef void (*zc_arraylist_del_fn) (void *data); 15 typedef int (*zc_arraylist_cmp_fn) (void *data1, void *data2); 16 17 /* make zc_arraylist_foreach speed up, so keep struct defination here */ 18 typedef struct { 19 void **array; 20 int len; 21 int size; 22 zc_arraylist_del_fn del; 23 } zc_arraylist_t; 24 25 zc_arraylist_t *zc_arraylist_new(zc_arraylist_del_fn del); 26 void zc_arraylist_del(zc_arraylist_t * a_list); 27 28 int zc_arraylist_set(zc_arraylist_t * a_list, int i, void *data); 29 int zc_arraylist_add(zc_arraylist_t * a_list, void *data); 30 int zc_arraylist_sortadd(zc_arraylist_t * a_list, zc_arraylist_cmp_fn cmp, 31 void *data); 32 33 #define zc_arraylist_len(a_list) (a_list->len) 34 35 #define zc_arraylist_get(a_list, i) \ 36 ((i >= a_list->len) ? NULL : a_list->array[i]) 37 38 #define zc_arraylist_foreach(a_list, i, a_unit) \ 39 for(i = 0, a_unit = a_list->array[0]; (i < a_list->len) && (a_unit = a_list->array[i], 1) ; i++) 40 41 #endif 42