diff options
author | pryazha <pryadeiniv@mail.ru> | 2025-01-19 17:33:44 +0500 |
---|---|---|
committer | pryazha <pryadeiniv@mail.ru> | 2025-01-19 17:33:44 +0500 |
commit | bd49bd525f4c6c6c15c4142bf42d1dd38be6fc16 (patch) | |
tree | 9e69f473c34b53e9e57d8af1873c39698bf5c80e /libs/pwyazh/macros.h |
initial commit
Diffstat (limited to 'libs/pwyazh/macros.h')
-rw-r--r-- | libs/pwyazh/macros.h | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/libs/pwyazh/macros.h b/libs/pwyazh/macros.h new file mode 100644 index 0000000..55927c1 --- /dev/null +++ b/libs/pwyazh/macros.h @@ -0,0 +1,66 @@ +#ifndef MACROS_H +#define MACROS_H + +#if ENABLE_ASSERT +#define Assert(s) if (!(s)) { __builtin_trap(); } /* *(int *)0 = 0; } */ +#else +#define Assert(s) +#endif + +#define ArrayCount(a) (sizeof(a)/sizeof(*(a))) + +#define IntFromPtr(p) (unsigned long long)((char *)(p)/* -(char *)0 */) +#define PtrFromInt(n) (void *)(/* (char *)0+ */(n)) + +#define Member(T, m) (((T *)0)->m) +#define OffsetOfMember(T, m) (IntFromPtr(&Member(T, m))) + +#define Min(a, b) (((a) < (b)) ? (a) : (b)) +#define Max(a, b) (((a) > (b)) ? (a) : (b)) + +#define ClampTop(a, b) Min(a, b) +#define ClampBottom(a, b) Max(a, b) + +#include <string.h> + +#define MemoryZero(p, n) memset((p), 0, (n)) +#define MemoryZeroStruct(p) MemoryZero((p), sizeof(*(p))) +#define MemoryZeroArray(p) MemoryZero((p), sizeof(p)) + +#define MemoryCopy(d, s, n) memmove((d), (s), (n)) +#define MemoryCopyStruct(d, s) MemoryCopy((d), (s), Min(sizeof(*(d)), sizeof(*(s)))) +#define MemoryCopyArray(d, s) MemoryCopy((d), (s), Min(sizeof(d), sizeof(s))) + +#define MemoryMatch(a, b, n) (memcmp((a), (b), (n)) == 0) + +#define DEG2RAD pi_F32/180.0f +#define RAD2DEG 182.0f/pi_F32 + +/* NOTE(pryazha): Linked lists: */ + +#define SLLPush(f, l, n) \ +((f) == 0 ? \ +((f) = (l) = (n), (n)->next = 0) : \ +((l)->next = (n), (l) = (n), (n)->next = 0)) +#define SLLPop(f, l) \ +((f) == (l) ? \ +((f) = (l) = 0) : \ +((f) = (f)->next)) + +#define DLLPushBack_NP(f, l, n, next, prev) \ +((f) == 0 ? \ +((f) = (l) = (n), (n)->next = (n)->prev = 0) : \ +((n)->prev = (l), (l)->next = (n), (l) = (n), (n)->next = 0)) +#define DLLPushBack(f, l, n) DLLPushBack_NP(f, l, n, next, prev) +#define DLLPushFront(f, l, n) DLLPushBack_NP(f, l, n, prev, next) +#define DLLRemove(f, l, n) \ +((f) == (n) ? \ +((f) == (l) ? (f) = (l) = 0 : ((f) = (f)->next, (f)->prev = 0)) : \ +((l) == (n) ? ((l) = (l)->prev, (l)->next = 0) : \ +((n)->next->prev = (n)->prev, (n)->prev->next = (n)->next))) + +#define Kilobytes(n) n*1024 +#define Megabytes(n) Kilobytes(n)*1024 +#define Gigabytes(n) Megabytes(n)*1024 + +#endif /* MACROS_H */ |