summaryrefslogtreecommitdiff
path: root/prb_macros.h
diff options
context:
space:
mode:
Diffstat (limited to 'prb_macros.h')
-rw-r--r--prb_macros.h95
1 files changed, 47 insertions, 48 deletions
diff --git a/prb_macros.h b/prb_macros.h
index 5a38ae4..8324919 100644
--- a/prb_macros.h
+++ b/prb_macros.h
@@ -1,55 +1,54 @@
-#ifndef PRB_MACROS_H
-#define PRB_MACROS_H
+/*
+#ifndef assert
+#define assert(expr) if (!(expr)) { *(int *)0 = 0; }
+#endif
+*/
+#include <assert.h>
-#define ASSERT(E) if (!(E)) { *(int *)0 = 0; }
+#define array_count(array) (sizeof(array)/sizeof(*(array)))
-#define ARRCNT(A) (sizeof(A)/sizeof(*(A)))
+#ifndef offsetof
+#define offsetof(type, element) ((size_t)(&(((type *)0)->element)))
+#endif
-#define OFFSETOF(T, E) ((size_t)(&(((T *)(0))->E)))
+#define min(a, b) (((a) < (b)) ? (a) : (b))
+#define max(a, b) (((a) > (b)) ? (a) : (b))
-#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 CLAMP(A, X, B) (((X) < (A)) ? (A) : \
- (((X) > (B)) ? (B) : (X)))
-#define CLAMPTOP(A, B) MIN(A, B)
-#define CLAMPBOT(A, B) MAX(A, B)
-
-#define SWAP(T, A, B) { T tmp = A; A = B; B = tmp; }
+#define swap(type, a, b) { type tmp = (a); (a) = (b); (b) = tmp; }
/* NOTE(pryazha): Memory */
-#define MEM0(P, N) memset((P), 0, (N))
-#define MEM0STRUCT(P) MEM0((P), sizeof(*(P)))
-
-#define MEMCPY(D, S, N) memmove((D), (S), (N))
-
-#define MEMMATCH(A, B, N) (memcmp((A), (B), (N)) == 0)
-
-#define KB(N) N*1024
-#define MB(N) KB(N)*1024
-#define GB(N) MB(N)*1024
-
-/* NOTE(pryazha): Singly-linked list */
-#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))
-
-/* NOTE(pryazha): Doubly-linked list */
-#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 */
+#define memzero(ptr, size) prb_memset((ptr), 0, (size))
+#define memzero_struct(ptr) memzero((ptr), sizeof(*(ptr)))
+
+#define kilobytes(n) n*1024
+#define megabytes(n) kilobytes(n)*1024
+#define gigabytes(n) megabytes(n)*1024
+
+/* NOTE(pryazha): Singly linked list */
+#define sllpush(first, last, node) \
+ ((first) == 0 ? \
+ ((first) = (last) = (node), (node)->next = 0) : \
+ ((last)->next = (node), (last) = (node), (node)->next = 0))
+#define sllpop(first, last) \
+ ((first) == (last) ? \
+ ((first) = (last) = 0) : \
+ ((first) = (first)->next))
+
+/* NOTE(pryazha): Doubly linked list */
+#define dllpushback_np(first, last, node, next, prev) \
+ ((first) == 0 ? \
+ ((first) = (last) = (node), (node)->next = (node)->prev = 0) : \
+ ((node)->prev = (last), (last)->next = (node), (last) = (node), (node)->next = 0))
+#define dllpushback(first, last, node) dllpushback_np(first, last, node, next, prev)
+#define dllpushfront(first, last, node) dllpushback_np(last, first, node, prev, next)
+
+#define dllremove(first, last, node) \
+ ((first) == (node) ? \
+ ((first) == (last) ? (first) = (last) = 0 : \
+ ((first) = (first)->next, (first)->prev = 0)) : \
+ ((last) == (node) ? ((last) = (last)->prev, (last)->next = 0) : \
+ ((node)->next->prev = (node)->prev, (node)->prev->next = (node)->next)))