zc_arraylist.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  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. #ifndef __zc_arraylist_h
  9. #define __zc_arraylist_h
  10. #define ARRAY_LIST_DEFAULT_SIZE 32
  11. typedef void (*zc_arraylist_del_fn) (void *data);
  12. typedef int (*zc_arraylist_cmp_fn) (void *data1, void *data2);
  13. /* make zc_arraylist_foreach speed up, so keep struct defination here */
  14. typedef struct {
  15. void **array;
  16. int len;
  17. int size;
  18. zc_arraylist_del_fn del;
  19. } zc_arraylist_t;
  20. zc_arraylist_t *zc_arraylist_new(zc_arraylist_del_fn del);
  21. void zc_arraylist_del(zc_arraylist_t * a_list);
  22. int zc_arraylist_set(zc_arraylist_t * a_list, int i, void *data);
  23. int zc_arraylist_add(zc_arraylist_t * a_list, void *data);
  24. int zc_arraylist_sortadd(zc_arraylist_t * a_list, zc_arraylist_cmp_fn cmp,
  25. void *data);
  26. #define zc_arraylist_len(a_list) (a_list->len)
  27. #define zc_arraylist_get(a_list, i) \
  28. ((i >= a_list->len) ? NULL : a_list->array[i])
  29. #define zc_arraylist_foreach(a_list, i, a_unit) \
  30. for(i = 0, a_unit = a_list->array[0]; (i < a_list->len) && (a_unit = a_list->array[i], 1) ; i++)
  31. #endif