| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #ifndef DA_H
- #define DA_H
- #include <stdlib.h>
- #define DA_DEF_STRUCT(type, name) \
- struct name { \
- type *items; \
- size_t size; \
- size_t cap; \
- }
- #define DA_DEF_STRUCT_ITEM(type, name) \
- struct { \
- type *items; \
- size_t size; \
- size_t cap; \
- } name
- #define DA_CREATE(da, item_size) \
- do { \
- da.cap = 16; \
- da.size = 0; \
- da.items = calloc(da.cap, item_size); \
- } while(0)
- #define DA_DESTROY(da) \
- do { \
- free(da.items); \
- } while(0)
- #define DA_CLEAR(da) \
- do { \
- da.size = 0; \
- } while(0)
- #define DA_DELETE(da, index) \
- do { \
- if ( index > da.size ) { \
- break; \
- } \
- for ( size_t i = index; i < da.size - 1; ++i ) { \
- da.items[i] = da.items[i+1]; \
- } \
- --da.size; \
- } while(0)
- #define DA_APPEND(da, item) \
- do { \
- if ( da.size == da.cap ) { \
- da.cap *= 2; \
- da.items = realloc(da.items, da.cap * sizeof(*da.items)); \
- } \
- da.items[da.size++] = item; \
- } while(0)
- #endif
|