diff options
Diffstat (limited to 'prb_macros.h')
-rw-r--r-- | prb_macros.h | 95 |
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))) |