summaryrefslogtreecommitdiff
path: root/prb_macros.h
diff options
context:
space:
mode:
authorpryazha <pryadeiniv@mail.ru>2025-02-20 15:08:47 +0500
committerpryazha <pryadeiniv@mail.ru>2025-02-20 15:08:47 +0500
commit0bd7c5dc0725a4882cb33c5d8f1a3b101d4025cd (patch)
treeecb3e42bf4855ba9e4836a20b94cb4857943eda6 /prb_macros.h
initial
Diffstat (limited to 'prb_macros.h')
-rw-r--r--prb_macros.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/prb_macros.h b/prb_macros.h
new file mode 100644
index 0000000..a9a465d
--- /dev/null
+++ b/prb_macros.h
@@ -0,0 +1,61 @@
+#ifndef PRB_MACROS_H
+#define PRB_MACROS_H
+
+#define Assert(e) if (!(e)) { *(int *)0 = 0; }
+
+#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 Clamp(a, x, b) (((x) < (a)) ? (a) : \
+ (((x) > (b)) ? (b) : (x)))
+#define ClampTop(a, b) Min(a, b)
+#define ClampBottom(a, b) Max(a, b)
+
+#define Swap(t, a, b) { t temp = a; a = b; b = temp; }
+
+/* NOTE(pryazha): Memory */
+#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 Kilobytes(n) n*1024
+#define Megabytes(n) Kilobytes(n)*1024
+#define Gigabytes(n) Megabytes(n)*1024
+
+/* 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(l, f, 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)))
+
+#endif /* PRB_MACROS_H */