progress on base

This commit is contained in:
2025-02-01 19:08:54 -05:00
parent 102f5af2c7
commit e65974a9b2
12 changed files with 156 additions and 50 deletions
+83
View File
@@ -0,0 +1,83 @@
#ifdef MD_INTELLISENSE_DIRECTIVES
#pragma once
#include "macros.h"
#endif
////////////////////////////////
//~ rjf: Units
#define KB(n) (((U64)(n)) << 10)
#define MB(n) (((U64)(n)) << 20)
#define GB(n) (((U64)(n)) << 30)
#define TB(n) (((U64)(n)) << 40)
#define thousand(n) ((n) * 1000)
#define million(n) ((n) * 1000000)
#define billion(n) ((n) * 1000000000)
////////////////////////////////
//~ rjf: Clamps, Mins, Maxes
#define min(A,B) (((A) < (B)) ? (A) : (B))
#define max(A,B) (((A) > (B)) ? (A) : (B))
#define clamp_top(A,X) Min(A, X)
#define clamp_bot(X,B) Max(X, B)
#define clamp(A,X,B) (((X) < (A)) ? (A) : ((X) > (B)) ? (B) : (X))
////////////////////////////////
//~ rjf: Type -> Alignment
#if MD_COMPILER_MSVC
# define align_of(T) __alignof(T)
#elif MD_COMPILER_CLANG
# define align_of(T) __alignof(T)
#elif MD_COMPILER_GCC
# define align_of(T) __alignof__(T)
#else
# error AlignOf not defined for this compiler.
#endif
////////////////////////////////
//~ rjf: Member Offsets
#define member(T, m) ( ((T*) 0)->m )
#define offset_of(T, m) int_from_ptr(& member(T, m))
#define member_from_offset(T, ptr, off) (T) ((((U8 *) ptr) + (off)))
#define cast_from_member(T, m, ptr) (T*) (((U8*)ptr) - offset_of(T, m))
////////////////////////////////
//~ rjf: For-Loop Construct Macros
#define defer_loop(begin, end) for(int _i_ = ((begin), 0); ! _i_; _i_ += 1, (end))
#define defer_loop_checked(begin, end) for(int _i_ = 2 * ! (begin); (_i_ == 2 ? ((end), 0) : !_i_); _i_ += 1, (end))
#define each_enum_val(type, it) type it = (type) 0; it < type ## _COUNT; it = (type)( it + 1 )
#define each_non_zero_enum_val(type, it) type it = (type) 1; it < type ## _COUNT; it = (type)( it + 1 )
////////////////////////////////
//~ rjf: Memory Operation Macros
#define memory_copy(dst, src, size) memmove((dst), (src), (size))
#define memory_set(dst, byte, size) memset((dst), (byte), (size))
#define memory_compare(a, b, size) memcmp((a), (b), (size))
#define memory_str_len(ptr) cstr_len(ptr)
#define memory_copy_struct(d,s) memory_copy((d),(s),sizeof(*(d)))
#define memory_copy_array(d,s) memory_copy((d),(s),sizeof(d))
#define memory_copy_type(d,s,c) memory_copy((d),(s),sizeof(*(d))*(c))
#define memory_zero(s,z) mem_set((s),0,(z))
#define memory_zero_struct(s) memory_zero((s),sizeof(*(s)))
#define memory_zero_array(a) memroy_zero((a),sizeof(a))
#define memory_zero_type(m,c) memroy_zero((m),sizeof(*(m))*(c))
#define memory_match(a,b,z) (memory_compare((a),(b),(z)) == 0)
#define memory_match_struct(a,b) memory_match((a),(b),sizeof(*(a)))
#define memory_match_array(a,b) memory_match((a),(b),sizeof(a))
#define memory_read(T,p,e) ( ((p)+sizeof(T)<=(e))?(*(T*)(p)):(0) )
#define memory_consume(T,p,e) ( ((p)+sizeof(T)<=(e))?((p)+=sizeof(T),*(T*)((p)-sizeof(T))):((p)=(e),0) )