StupidOS/include/stupidc.h
2025-10-08 15:01:16 +02:00

62 lines
1.5 KiB
C

#ifndef STUPIDC_H
# define STUPIDC_H 1
# include <stddef.h>
# define ARR_BASE_CAP 8
# define ARR(type) \
struct { size_t cap; size_t cnt; type *elems; }
# define ARR_INIT { 0, 0, NULL }
# define ARR_GROW(arr) \
do { \
if ((arr)->cap < ((arr)->cnt + 1)) \
{ \
(arr)->cap = ((arr)->cap > ARR_BASE_CAP \
? (arr)->cap * 2 : ARR_BASE_CAP); \
(arr)->elems = realloc((arr)->elems, \
(arr)->cap * sizeof(*(arr)->elems)); \
} \
} while(0)
# define ARR_APPEND(arr, elem) \
do { \
ARR_GROW((arr)); \
(arr)->elems[(arr)->cnt++] = (elem); \
} while (0)
# define ARR_RESET(arr) \
do { \
(arr)->cnt = 0; \
} while (0)
# define ARR_FREE(arr) \
do { \
(arr)->cap = 0; \
(arr)->cnt = 0; \
free((arr)->elems); \
(arr)->elems = NULL; \
} while(0)
# define ARR_COUNT(arr) ((arr)->cnt)
# define ARR_EMPTY(arr) ((arr)->cnt == 0)
# define ARR_INDEX(arr, elem) ((elem) - (arr)->elems)
# define ARR_FIRST(arr) ((arr)->elems[0])
# define ARR_LAST(arr) ((arr)->elems[(arr)->cnt])
# define ARR_FOREACH(var, arr) \
for ((var) = (arr)->elems; \
(var) < ((arr)->elems + (arr)->cnt); \
(var)++)
# define LIST(type) \
struct { struct type *next; struct type **prev }
void set_progname(const char *name);
const char *get_progname(void);
void print_version(void);
#endif /* !STUPIDC_H */