diff options
Diffstat (limited to 'prb_macros.h')
-rw-r--r-- | prb_macros.h | 92 |
1 files changed, 43 insertions, 49 deletions
diff --git a/prb_macros.h b/prb_macros.h index a9a465d..5a38ae4 100644 --- a/prb_macros.h +++ b/prb_macros.h @@ -1,61 +1,55 @@ #ifndef PRB_MACROS_H #define PRB_MACROS_H -#define Assert(e) if (!(e)) { *(int *)0 = 0; } +#define ASSERT(E) if (!(E)) { *(int *)0 = 0; } -#define ArrayCount(a) (sizeof(a)/sizeof(*(a))) +#define ARRCNT(A) (sizeof(A)/sizeof(*(A))) -#define IntFromPtr(p) (unsigned long long)((char *)(p)-(char *)0) -#define PtrFromInt(n) (void *)((char *)0+(n)) +#define OFFSETOF(T, E) ((size_t)(&(((T *)(0))->E))) -#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 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 CLAMPBOT(A, B) MAX(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; } +#define SWAP(T, A, B) { T tmp = A; A = B; B = tmp; } /* 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))) +#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 */ |