#pragma once #include #include #include #include #include #include #include #define ARRLEN(x) (sizeof(x) / sizeof(*(x))) #define ABS(a) ((a) > 0 ? (a) : -(a)) #define MAX(a, b) ((a) > (b) ? (a) : (b)) #define MIN(a, b) ((a) > (b) ? (b) : (a)) #define XORSWAP(a, b) ((a) ^= (b) ^= (a)) #define CEILDIV(a, b) ((a) / (b) + ((a) % (b) ? 1 : 0)) __attribute__((noreturn)) void die(const char *fmtstr, ...); bool readtok(char *buf, size_t buflen, char sep, const char **pos, const char *end); int64_t parsei64(const char *str); char *aprintf(const char *fmtstr, ...); char *strdup(const char *str); char *apprintf(char *alloc, const char *fmtstr, ...); void *memdup(const void *data, size_t size); void readall(FILE *f, void **data, size_t *read);