mirror of
https://github.com/DreamMaoMao/maomaowm.git
synced 2025-10-28 05:40:19 -04:00
30 lines
1.3 KiB
C
30 lines
1.3 KiB
C
#ifndef DYNARR_H__
|
|
#define DYNARR_H__
|
|
|
|
#define DYNARR_DEF(t) \
|
|
struct { \
|
|
t *arr; \
|
|
size_t len, cap, size; \
|
|
}
|
|
|
|
#define DYNARR_INIT(p) \
|
|
((p)->arr = reallocarray((p)->arr, ((p)->cap = 1), \
|
|
((p)->size = sizeof(((p)->arr[0])))))
|
|
|
|
#define DYNARR_FINI(p) free((p)->arr)
|
|
|
|
#define DYNARR_PUSH(p, v) \
|
|
do { \
|
|
if ((p)->len >= (p)->cap) { \
|
|
while ((p)->len >= ((p)->cap *= 2)) \
|
|
; \
|
|
(p)->arr = reallocarray((p)->arr, (p)->cap, (p)->size); \
|
|
} \
|
|
(p)->arr[(p)->len++] = (v); \
|
|
} while (0)
|
|
|
|
#define DYNARR_POP(p) ((p)->arr[(p)->len--])
|
|
|
|
#define DYNARR_CLR(p) ((p)->len = 0)
|
|
|
|
#endif
|