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