array.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #include "array.h"
  2. #include <stdarg.h>
  3. int array_alias_helper(const void *a, const void *b) {
  4. (void)a, (void)b;
  5. return 0;
  6. }
  7. //grows the allocated size to accomodate the size
  8. void array_resize_helper(array_char *a, size_t itemSize) {
  9. a->alloc = (a->size+63)&~63;
  10. #ifndef ARRAY_USE_TALLOC
  11. a->item = realloc(a->item, a->alloc*itemSize);
  12. #else
  13. a->item = talloc_realloc_size(NULL, a->item, a->alloc*itemSize +1);
  14. #endif
  15. }
  16. void array_resize0_helper(array_char *a, size_t itemSize, size_t newSize) {
  17. size_t oldSize = a->size;
  18. a->size = newSize;
  19. if (newSize > oldSize) {
  20. if (newSize > a->alloc)
  21. array_resize_helper(a, itemSize);
  22. memset(a->item + oldSize*itemSize, 0, (newSize-oldSize)*itemSize);
  23. }
  24. }
  25. void array_insert_items_helper(array_char *a, size_t itemSize, size_t pos, const void *items, size_t count, size_t tailSize) {
  26. size_t oldSize = a->size;
  27. size_t newSize = (a->size += count+tailSize);
  28. if (newSize > a->alloc)
  29. array_resize_helper(a, itemSize);
  30. {
  31. char *target = a->item + pos*itemSize;
  32. count *= itemSize;
  33. memmove(target+count, target, (oldSize-pos)*itemSize);
  34. memcpy(target, items, count);
  35. }
  36. }