da.h 826 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #ifndef DA_H
  2. #define DA_H
  3. #include <stdlib.h>
  4. #define DA_CREATE(da, item_size) \
  5. do { \
  6. da.cap = 16; \
  7. da.size = 0; \
  8. da.items = calloc(da.cap, item_size); \
  9. } while(0)
  10. #define DA_DESTROY(da) \
  11. do { \
  12. free(da.items); \
  13. } while(0)
  14. #define DA_CLEAR(da) \
  15. do { \
  16. da.size = 0; \
  17. } while(0)
  18. #define DA_DELETE(da, index) \
  19. do { \
  20. if ( index > da.size ) { \
  21. break; \
  22. } \
  23. for ( size_t i = index; i < da.size - 1; ++i ) { \
  24. da.items[i] = da.items[i+1]; \
  25. } \
  26. --da.size; \
  27. } while(0)
  28. #define DA_APPEND(da, item) \
  29. do { \
  30. if ( da.size == da.cap ) { \
  31. da.cap <<= 2; \
  32. da.items = realloc(da.items, da.cap * sizeof(*da.items)); \
  33. } \
  34. da.items[da.size++] = item; \
  35. } while(0)
  36. #endif