hiarray.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #ifndef __HIARRAY_H_
  2. #define __HIARRAY_H_
  3. #include <stdio.h>
  4. typedef int (*hiarray_compare_t)(const void *, const void *);
  5. typedef int (*hiarray_each_t)(void *, void *);
  6. struct hiarray {
  7. uint32_t nelem; /* # element */
  8. void *elem; /* element */
  9. size_t size; /* element size */
  10. uint32_t nalloc; /* # allocated element */
  11. };
  12. #define null_hiarray { 0, NULL, 0, 0 }
  13. static inline void
  14. hiarray_null(struct hiarray *a)
  15. {
  16. a->nelem = 0;
  17. a->elem = NULL;
  18. a->size = 0;
  19. a->nalloc = 0;
  20. }
  21. static inline void
  22. hiarray_set(struct hiarray *a, void *elem, size_t size, uint32_t nalloc)
  23. {
  24. a->nelem = 0;
  25. a->elem = elem;
  26. a->size = size;
  27. a->nalloc = nalloc;
  28. }
  29. static inline uint32_t
  30. hiarray_n(const struct hiarray *a)
  31. {
  32. return a->nelem;
  33. }
  34. struct hiarray *hiarray_create(uint32_t n, size_t size);
  35. void hiarray_destroy(struct hiarray *a);
  36. int hiarray_init(struct hiarray *a, uint32_t n, size_t size);
  37. void hiarray_deinit(struct hiarray *a);
  38. uint32_t hiarray_idx(struct hiarray *a, void *elem);
  39. void *hiarray_push(struct hiarray *a);
  40. void *hiarray_pop(struct hiarray *a);
  41. void *hiarray_get(struct hiarray *a, uint32_t idx);
  42. void *hiarray_top(struct hiarray *a);
  43. void hiarray_swap(struct hiarray *a, struct hiarray *b);
  44. void hiarray_sort(struct hiarray *a, hiarray_compare_t compare);
  45. int hiarray_each(struct hiarray *a, hiarray_each_t func, void *data);
  46. #endif