summaryrefslogtreecommitdiff
path: root/libs/pwyazh/macros.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/pwyazh/macros.h')
-rw-r--r--libs/pwyazh/macros.h66
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 */