diff options
| author | David Moc <personal@cdatgoose.org> | 2026-05-30 21:53:05 +0200 |
|---|---|---|
| committer | David Moc <personal@cdatgoose.org> | 2026-05-30 21:53:05 +0200 |
| commit | e930cc6bdc7f62befac063d7d9d016ffb0a64f1a (patch) | |
| tree | 52118a1e990ae88f5f0410c8caea129609e22e19 /include/common.h | |
Added the old repo, refactored it, added the C jit.
Diffstat (limited to 'include/common.h')
| -rw-r--r-- | include/common.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/include/common.h b/include/common.h new file mode 100644 index 0000000..6fd9820 --- /dev/null +++ b/include/common.h @@ -0,0 +1,55 @@ +#ifndef ECEX_COMMON_H +#define ECEX_COMMON_H + +#include <stddef.h> +#include <stdlib.h> +#include <string.h> + +#define ECEX_OK 0 +#define ECEX_ERR (-1) + +#define ECEX_ARRAY_LEN(a) (sizeof(a) / sizeof((a)[0])) +#define ECEX_MIN(a, b) ((a) < (b) ? (a) : (b)) +#define ECEX_MAX(a, b) ((a) > (b) ? (a) : (b)) +#define ECEX_CLAMP(v, lo, hi) (ECEX_MAX((lo), ECEX_MIN((v), (hi)))) + +#define ECEX_RETURN_ERR_IF_NULL(p) \ + do { \ + if (!(p)) return ECEX_ERR; \ + } while (0) + +#define ECEX_RETURN_NULL_IF_NULL(p) \ + do { \ + if (!(p)) return NULL; \ + } while (0) + +#define ECEX_FREE_AND_NULL(p) \ + do { \ + free(p); \ + (p) = NULL; \ + } while (0) + +#define ECEX_GROW_ARRAY(ptr, count, cap, initial_cap) \ + ecex_grow_array((void **)&(ptr), sizeof(*(ptr)), (count), &(cap), (initial_cap)) + +static inline int ecex_grow_array(void **ptr, + size_t item_size, + size_t count, + size_t *cap, + size_t initial_cap) { + if (count < *cap) return ECEX_OK; + + size_t new_cap = *cap ? *cap * 2 : initial_cap; + while (new_cap <= count) { + new_cap *= 2; + } + + void *new_ptr = realloc(*ptr, new_cap * item_size); + if (!new_ptr) return ECEX_ERR; + + *ptr = new_ptr; + *cap = new_cap; + return ECEX_OK; +} + +#endif |
