From 3f8261fa0d2110d014b8af143f1a87bcad4912af Mon Sep 17 00:00:00 2001 From: doylet Date: Sun, 19 Jul 2026 16:12:49 +1000 Subject: [PATCH] Misc fixes --- Single-Header/dn_single_header.cpp | 838 +++++++++++++++-------------- Single-Header/dn_single_header.h | 239 ++++---- Source/Extra/dn_seshc.cpp | 304 ++--------- Source/Extra/dn_seshc.h | 58 +- Source/OS/dn_os_posix.cpp | 68 +-- Source/OS/dn_os_w32.cpp | 160 +++--- Source/Standalone/dn_sha3.h | 10 +- Source/dn.cpp | 608 ++++++++++----------- Source/dn.h | 237 ++++---- Source/dn_tests.cpp | 4 +- single_header_generator.cpp | 18 +- 11 files changed, 1164 insertions(+), 1380 deletions(-) diff --git a/Single-Header/dn_single_header.cpp b/Single-Header/dn_single_header.cpp index 05cdb10..3575df0 100644 --- a/Single-Header/dn_single_header.cpp +++ b/Single-Header/dn_single_header.cpp @@ -1,4 +1,4 @@ -// Generated by the DN single header generator 2026-07-17 17:54:43 +// Generated by the DN single header generator 2026-07-19 16:12:36 // DN: Single header generator commented out => #if defined(_CLANGD) // #define DN_WITH_TESTS 1 @@ -21,7 +21,7 @@ enum DN_ArenaUAFCheckReportType_ DN_Core *g_dn_; -DN_API void DN_Init(DN_Core *dn, DN_InitFlags flags, DN_TCInitArgs args) +DN_API void DN_Init(DN_Core *dn, DN_InitFlags flags, DN_TcInitArgs args) { DN_Set(dn); dn->init_flags = flags; @@ -93,8 +93,8 @@ DN_API void DN_Init(DN_Core *dn, DN_InitFlags flags, DN_TCInitArgs args) #endif // NOTE: Initialise thread context - DN_TCInitFromHeap(&dn->main_tc, DN_OS_ThreadID(), args, DN_OS_HeapInitDefault()); - DN_TCEquip(&dn->main_tc); + DN_TcInitFromHeap(&dn->main_tc, DN_OS_ThreadID(), args, DN_OS_HeapInitDefault()); + DN_TcEquip(&dn->main_tc); } if (DN_BitIsSet(flags, DN_InitFlags_LeakTracker)) { @@ -226,7 +226,7 @@ DN_API bool DN_VerifyArgsF(DN_VerifyType type, bool expr, DN_CallSite call_site, if (result) return result; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); { DN_Str8Builder builder = DN_Str8BuilderFromArena(&scratch.arena); @@ -253,7 +253,7 @@ DN_API bool DN_VerifyArgsF(DN_VerifyType type, bool expr, DN_CallSite call_site, DN_LogTypeParam log_type_param = DN_LogTypeParamFromType(log_type); DN_LogPrintF(log_type_param, call_site, DN_LogFlags_Nil, "%.*s", DN_Str8PrintFmt(log)); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); if (type == DN_VerifyType_Nil && DN_PARANOIA_LEVEL) { DN_DebugBreak; @@ -537,7 +537,7 @@ DN_API DN_CPUReport DN_CPUGetReport() case DN_CPUFeature_POPCNT: available = (fn_0000_[0x0001].reg.ecx & (1 << 23)); break; case DN_CPUFeature_RDRAND: available = (fn_0000_[0x0001].reg.ecx & (1 << 30)); break; case DN_CPUFeature_RDSEED: available = (fn_0000_[0x0007].reg.ebx & (1 << 18)); break; - case DN_CPUFeature_RDTSCP: available = (fn_8000_[0x0001].reg.edx & (1 << 27)); break; + case DN_CPUFeature_RDTscP: available = (fn_8000_[0x0001].reg.edx & (1 << 27)); break; case DN_CPUFeature_SHA: available = (fn_0000_[0x0007].reg.ebx & (1 << 29)); break; case DN_CPUFeature_SSE: available = (fn_0000_[0x0001].reg.edx & (1 << 25)); break; case DN_CPUFeature_SSE2: available = (fn_0000_[0x0001].reg.edx & (1 << 26)); break; @@ -546,7 +546,7 @@ DN_API DN_CPUReport DN_CPUGetReport() case DN_CPUFeature_SSE42: available = (fn_0000_[0x0001].reg.ecx & (1 << 20)); break; case DN_CPUFeature_SSE4A: available = (fn_8000_[0x0001].reg.ecx & (1 << 6)); break; case DN_CPUFeature_SSSE3: available = (fn_0000_[0x0001].reg.ecx & (1 << 9)); break; - case DN_CPUFeature_TSC: available = (fn_0000_[0x0001].reg.edx & (1 << 4)); break; + case DN_CPUFeature_Tsc: available = (fn_0000_[0x0001].reg.edx & (1 << 4)); break; case DN_CPUFeature_TscInvariant: available = (fn_8000_[0x0007].reg.edx & (1 << 8)); break; case DN_CPUFeature_VAES: available = (fn_0000_[0x0007].reg.ecx & (1 << 9)); break; case DN_CPUFeature_VPCMULQDQ: available = (fn_0000_[0x0007].reg.ecx & (1 << 10)); break; @@ -1624,12 +1624,12 @@ static void DN_ArenaUAFCheck_(DN_Arena *arena, DN_ArenaUAFCheckReportType_ type) // NOTE: MSVC does not recognise %'u which is a STB extension which causes a lot of incorrect // format arguments warnings that we mute here. DN_MSVC_WARNING_PUSH - DN_MSVC_WARNING_DISABLE(6271) // Extra argument passed to 'DN_Str8FromFmtArena' + DN_MSVC_WARNING_DISABLE(6271) // Extra argument passed to 'DN_Str8FmtArena' DN_MSVC_WARNING_DISABLE(6067) // _Param_(10) in call to 'DN_LogPrint' must be the address of a string. Actual type: 'int'. DN_MSVC_WARNING_DISABLE(6273) // Non-integer passed as _Param_(11) when an integer is required in call to 'DN_LogPrint' Actual type: 'char *'. DN_Str8 error_msg = {}; if (type == DN_ArenaUAFCheckReportType_AllocViolation) { - error_msg = DN_Str8FromFmtAllocator(allocator, + error_msg = DN_Str8FmtAllocator(allocator, "\n\nArena use-after-free (UAF) detected in temporary memory usage! This allocation (trace " "shown above) is attempting to allocate memory inside the active temporary region (id: %'u) " "but belongs to a different region (id: %'u). This means when the active temporary region is " @@ -2089,7 +2089,7 @@ DN_API bool DN_ErrSinkEndLogError_(DN_ErrSink *err, DN_CallSite call_site, DN_St DN_API bool DN_ErrSinkEndLogErrorFV_(DN_ErrSink *err, DN_CallSite call_site, DN_FMT_ATTRIB char const *fmt, va_list args) { - DN_Str8 log = DN_Str8FromFmtVArena(err->arena, fmt, args); + DN_Str8 log = DN_Str8FmtVArena(err->arena, fmt, args); bool result = DN_ErrSinkEndLogError_(err, call_site, log); return result; } @@ -2098,7 +2098,7 @@ DN_API bool DN_ErrSinkEndLogErrorF_(DN_ErrSink *err, DN_CallSite call_site, DN_F { va_list args; va_start(args, fmt); - DN_Str8 log = DN_Str8FromFmtVArena(err->arena, fmt, args); + DN_Str8 log = DN_Str8FmtVArena(err->arena, fmt, args); bool result = DN_ErrSinkEndLogError_(err, call_site, log); va_end(args); return result; @@ -2131,7 +2131,7 @@ DN_API void DN_ErrSinkAppendFV_(DN_ErrSink *err, DN_U32 error_code, DN_CallSite DN_ErrSinkMsg *msg = DN_ArenaNew(err->arena, DN_ErrSinkMsg, DN_ZMem_Yes); DN_Assert(msg); - msg->msg = DN_Str8FromFmtVArena(err->arena, fmt, args); + msg->msg = DN_Str8FmtVArena(err->arena, fmt, args); msg->error_code = error_code; msg->call_site = call_site; DN_SentinelDoublyLLPrepend(node->msg_sentinel, msg); @@ -2147,9 +2147,9 @@ DN_API void DN_ErrSinkAppendF_(DN_ErrSink *err, DN_U32 error_code, DN_CallSite c va_end(args); } -DN_THREAD_LOCAL DN_TCCore *g_dn_thread_context; +DN_THREAD_LOCAL DN_TcCore *g_dn_thread_context; -DN_API void DN_TCInit(DN_TCCore *tc, DN_U64 thread_id, DN_Arena *main_arena, DN_Arena *temp_arenas, DN_USize temp_arenas_count, DN_Arena *err_sink_arena) +DN_API void DN_TcInit(DN_TcCore *tc, DN_U64 thread_id, DN_Arena *main_arena, DN_Arena *temp_arenas, DN_USize temp_arenas_count, DN_Arena *err_sink_arena) { tc->thread_id = thread_id; tc->main_arena = main_arena; @@ -2160,9 +2160,9 @@ DN_API void DN_TCInit(DN_TCCore *tc, DN_U64 thread_id, DN_Arena *main_arena, DN_ tc->temp_arenas[tc->temp_arenas_count++] = temp_arenas + index; } -DN_API DN_TCInitArgs DN_TCInitArgsDefault() +DN_API DN_TcInitArgs DN_TcInitArgsDefault() { - DN_TCInitArgs result = {}; + DN_TcInitArgs result = {}; result.main_reserve = DN_Kilobytes(64); result.main_commit = DN_Kilobytes(4); result.temp_reserve = DN_Kilobytes(64); @@ -2173,7 +2173,7 @@ DN_API DN_TCInitArgs DN_TCInitArgsDefault() return result; } -DN_API void DN_TCInitFromHeap(DN_TCCore *tc, DN_U64 thread_id, DN_TCInitArgs args, DN_Heap heap) +DN_API void DN_TcInitFromHeap(DN_TcCore *tc, DN_U64 thread_id, DN_TcInitArgs args, DN_Heap heap) { DN_Assert(args.temp_count <= DN_ArrayCountU(tc->temp_arenas)); DN_MemList main_mem_stack = DN_MemListFromHeap(args.main_reserve, args.main_commit, DN_MemFlags_AllocCanLeak | DN_MemFlags_NoAllocTrack, heap); @@ -2193,13 +2193,13 @@ DN_API void DN_TCInitFromHeap(DN_TCCore *tc, DN_U64 thread_id, DN_TCInitArgs arg DN_Arena *err_sink_arena = DN_MemListNewZ(main_mem, DN_Arena); *err_sink_arena = DN_ArenaFromMemList(err_sink_mem); - DN_TCInit(tc, thread_id, main_arena, temp_arenas, args.temp_count, err_sink_arena); + DN_TcInit(tc, thread_id, main_arena, temp_arenas, args.temp_count, err_sink_arena); } -DN_API void DN_TCDeinit(DN_TCCore *tc, DN_TCDeinitArenas deinit_arenas) +DN_API void DN_TcDeinit(DN_TcCore *tc, DN_TcDeinitArenas deinit_arenas) { // NOTE: That we deallocate the main memory last as TC might be allocated in that arena. - if (deinit_arenas == DN_TCDeinitArenas_Yes) { + if (deinit_arenas == DN_TcDeinitArenas_Yes) { for (DN_ForIndexU(index, tc->temp_arenas_count)) DN_MemListDeinit(tc->temp_arenas[index]->mem); DN_MemListDeinit(tc->err_sink.arena->mem); @@ -2207,35 +2207,35 @@ DN_API void DN_TCDeinit(DN_TCCore *tc, DN_TCDeinitArenas deinit_arenas) } } -DN_API void DN_TCEquip(DN_TCCore *tc) +DN_API void DN_TcEquip(DN_TcCore *tc) { g_dn_thread_context = tc; } -DN_API DN_TCCore *DN_TCGet() +DN_API DN_TcCore *DN_TcGet() { DN_AssertRaw(g_dn_thread_context && - "This thread's thread context has not been equipped yet. Ensure that DN_TCInit(...) " - "has been called to create a thread context and call DN_TCEquip(...) in the current " + "This thread's thread context has not been equipped yet. Ensure that DN_TcInit(...) " + "has been called to create a thread context and call DN_TcEquip(...) in the current " "thread to make it retrievable via this function"); return g_dn_thread_context; } -DN_API DN_Arena *DN_TCMainArena() +DN_API DN_Arena *DN_TcMainArena() { - DN_TCCore *tc = DN_TCGet(); + DN_TcCore *tc = DN_TcGet(); DN_Arena *result = tc->main_arena; return result; } -DN_API DN_Pool *DN_TCMainPool() +DN_API DN_Pool *DN_TcMainPool() { - DN_TCCore *tc = DN_TCGet(); + DN_TcCore *tc = DN_TcGet(); DN_Pool *result = &tc->main_pool; return result; } -DN_API DN_Arena DN_TCTempArenaAllocator(DN_Allocator *conflicts, DN_USize count) +DN_API DN_Arena DN_TcTempArenaAllocator(DN_Allocator *conflicts, DN_USize count) { DN_MemList *conflict_mem_lists[8]; DN_USize conflict_mem_lists_count = 0; @@ -2266,7 +2266,7 @@ DN_API DN_Arena DN_TCTempArenaAllocator(DN_Allocator *conflicts, DN_USize count) DN_Assert(added); } - DN_TCCore *tc = DN_TCGet(); + DN_TcCore *tc = DN_TcGet(); DN_Arena result = {}; for (DN_ForItSize(it, DN_Arena *, tc->temp_arenas, tc->temp_arenas_count)) { bool is_usable = true; @@ -2290,9 +2290,9 @@ DN_API DN_Arena DN_TCTempArenaAllocator(DN_Allocator *conflicts, DN_USize count) return result; } -DN_API DN_Arena DN_TCTempArenaFromArena(DN_Arena **conflicts, DN_USize count) +DN_API DN_Arena DN_TcTempArenaFromArena(DN_Arena **conflicts, DN_USize count) { - DN_TCCore *tc = DN_TCGet(); + DN_TcCore *tc = DN_TcGet(); DN_Arena result = {}; for (DN_ForItSize(it, DN_Arena *, tc->temp_arenas, tc->temp_arenas_count)) { bool is_usable = true; @@ -2318,32 +2318,32 @@ DN_API DN_Arena DN_TCTempArenaFromArena(DN_Arena **conflicts, DN_USize count) } #if defined(__cplusplus) -DN_TCScratchCpp::DN_TCScratchCpp(DN_Arena **conflicts, DN_USize count) +DN_TcScratchCpp::DN_TcScratchCpp(DN_Arena **conflicts, DN_USize count) { - this->data = DN_TCScratchBeginArena(conflicts, count); + this->data = DN_TcScratchBeginArena(conflicts, count); } -DN_TCScratchCpp::~DN_TCScratchCpp() +DN_TcScratchCpp::~DN_TcScratchCpp() { - DN_TCScratchEnd(&this->data); + DN_TcScratchEnd(&this->data); } #endif -DN_API DN_TCScratch DN_TCScratchBeginAllocator(DN_Allocator *conflicts, DN_USize count) +DN_API DN_TcScratch DN_TcScratchBeginAllocator(DN_Allocator *conflicts, DN_USize count) { - DN_TCScratch result = {}; - result.arena = DN_TCTempArenaAllocator(conflicts, count); + DN_TcScratch result = {}; + result.arena = DN_TcTempArenaAllocator(conflicts, count); return result; } -DN_API DN_TCScratch DN_TCScratchBeginArena(DN_Arena **conflicts, DN_USize count) +DN_API DN_TcScratch DN_TcScratchBeginArena(DN_Arena **conflicts, DN_USize count) { - DN_TCScratch result = {}; - result.arena = DN_TCTempArenaFromArena(conflicts, count); + DN_TcScratch result = {}; + result.arena = DN_TcTempArenaFromArena(conflicts, count); return result; } -DN_API void DN_TCScratchEnd(DN_TCScratch *scratch) +DN_API void DN_TcScratchEnd(DN_TcScratch *scratch) { DN_Assert(scratch->destructed == false); DN_ArenaTempEnd(&scratch->arena, DN_ArenaReset_Yes); @@ -2351,22 +2351,22 @@ DN_API void DN_TCScratchEnd(DN_TCScratch *scratch) scratch->destructed = true; } -DN_API void DN_TCSetFrameArena(DN_Arena *arena) +DN_API void DN_TcSetFrameArena(DN_Arena *arena) { - DN_TCCore *tc = DN_TCGet(); + DN_TcCore *tc = DN_TcGet(); tc->frame_arena = arena; } -DN_API DN_Arena *DN_TCFrameArena() +DN_API DN_Arena *DN_TcFrameArena() { - DN_TCCore *tc = DN_TCGet(); + DN_TcCore *tc = DN_TcGet(); DN_Arena *result = tc->frame_arena; return result; } -DN_API DN_ErrSink *DN_TCErrSink() +DN_API DN_ErrSink *DN_TcErrSink() { - DN_TCCore *tc = DN_TCGet(); + DN_TcCore *tc = DN_TcGet(); DN_ErrSink *result = &tc->err_sink; return result; } @@ -2857,7 +2857,7 @@ DN_API DN_FmtAppendResult DN_FmtVAppend(char *buf, DN_USize *buf_size, DN_USize { DN_FmtAppendResult result = {}; DN_USize starting_size = *buf_size; - result.size_req = DN_VSNPrintF(buf + *buf_size, DN_Cast(int)(buf_max - *buf_size), fmt, args); + result.size_req = DN_Vsnprintf(buf + *buf_size, DN_Cast(int)(buf_max - *buf_size), fmt, args); *buf_size += result.size_req; if (*buf_size >= (buf_max - 1)) *buf_size = buf_max - 1; @@ -2891,7 +2891,7 @@ DN_API DN_USize DN_FmtCount(DN_FMT_ATTRIB char const *fmt, ...) { va_list args; va_start(args, fmt); - DN_USize result = DN_VSNPrintF(nullptr, 0, fmt, args); + DN_USize result = DN_Vsnprintf(nullptr, 0, fmt, args); va_end(args); return result; } @@ -2900,7 +2900,7 @@ DN_API DN_USize DN_FmtVCount(DN_FMT_ATTRIB char const *fmt, va_list args) { va_list args_copy; va_copy(args_copy, args); - DN_USize result = DN_VSNPrintF(nullptr, 0, fmt, args_copy); + DN_USize result = DN_Vsnprintf(nullptr, 0, fmt, args_copy); va_end(args_copy); return result; } @@ -2998,7 +2998,7 @@ DN_API DN_Str8 DN_Str8FromStr8Pool(DN_Str8 string, DN_Pool *pool) return result; } -DN_API DN_Str8 DN_Str8FromFmtVAllocator(DN_Allocator allocator, DN_FMT_ATTRIB char const *fmt, va_list args) +DN_API DN_Str8 DN_Str8FmtVAllocator(DN_Allocator allocator, DN_FMT_ATTRIB char const *fmt, va_list args) { DN_USize count = DN_FmtVCount(fmt, args); DN_Str8 result = DN_Str8AllocAllocator(count, DN_ZMem_No, allocator); @@ -3010,41 +3010,41 @@ DN_API DN_Str8 DN_Str8FromFmtVAllocator(DN_Allocator allocator, DN_FMT_ATTRIB ch return result; } -DN_API DN_Str8 DN_Str8FromFmtVArena(DN_Arena *arena, DN_FMT_ATTRIB char const *fmt, va_list args) +DN_API DN_Str8 DN_Str8FmtVArena(DN_Arena *arena, DN_FMT_ATTRIB char const *fmt, va_list args) { - DN_Str8 result = DN_Str8FromFmtVAllocator(DN_AllocatorFromArena(arena), fmt, args); + DN_Str8 result = DN_Str8FmtVAllocator(DN_AllocatorFromArena(arena), fmt, args); return result; } -DN_API DN_Str8 DN_Str8FromFmtAllocator(DN_Allocator allocator, DN_FMT_ATTRIB char const *fmt, ...) +DN_API DN_Str8 DN_Str8FmtAllocator(DN_Allocator allocator, DN_FMT_ATTRIB char const *fmt, ...) { va_list va; va_start(va, fmt); - DN_Str8 result = DN_Str8FromFmtVAllocator(allocator, fmt, va); + DN_Str8 result = DN_Str8FmtVAllocator(allocator, fmt, va); va_end(va); return result; } -DN_API DN_Str8 DN_Str8FromFmtArena(DN_Arena *arena, DN_FMT_ATTRIB char const *fmt, ...) +DN_API DN_Str8 DN_Str8FmtArena(DN_Arena *arena, DN_FMT_ATTRIB char const *fmt, ...) { va_list va; va_start(va, fmt); - DN_Str8 result = DN_Str8FromFmtVArena(arena, fmt, va); + DN_Str8 result = DN_Str8FmtVArena(arena, fmt, va); va_end(va); return result; } -DN_API DN_Str8 DN_Str8FromFmtVPool(DN_Pool *pool, DN_FMT_ATTRIB char const *fmt, va_list args) +DN_API DN_Str8 DN_Str8FmtVPool(DN_Pool *pool, DN_FMT_ATTRIB char const *fmt, va_list args) { - DN_Str8 result = DN_Str8FromFmtVAllocator(DN_AllocatorFromPool(pool), fmt, args); + DN_Str8 result = DN_Str8FmtVAllocator(DN_AllocatorFromPool(pool), fmt, args); return result; } -DN_API DN_Str8 DN_Str8FromFmtPool(DN_Pool *pool, DN_FMT_ATTRIB char const *fmt, ...) +DN_API DN_Str8 DN_Str8FmtPool(DN_Pool *pool, DN_FMT_ATTRIB char const *fmt, ...) { va_list args; va_start(args, fmt); - DN_Str8 result = DN_Str8FromFmtVPool(pool, fmt, args); + DN_Str8 result = DN_Str8FmtVPool(pool, fmt, args); va_end(args); return result; } @@ -3805,7 +3805,7 @@ DN_API DN_Str8 DN_Str8AppendF(DN_Arena *arena, DN_Str8 string, char const *fmt, DN_API DN_Str8 DN_Str8AppendFV(DN_Arena *arena, DN_Str8 string, char const *fmt, va_list args) { // TODO: Calculate size and write into one buffer instead of 2 appends - DN_Str8 append = DN_Str8FromFmtVArena(arena, fmt, args); + DN_Str8 append = DN_Str8FmtVArena(arena, fmt, args); DN_Str8 result = DN_Str8AllocArena(string.count + append.count, DN_ZMem_No, arena); DN_Memcpy(result.data, string.data, string.count); DN_Memcpy(result.data + string.count, append.data, append.count); @@ -3823,7 +3823,7 @@ DN_API DN_Str8 DN_Str8FillF(DN_Arena *arena, DN_USize count, char const *fmt, .. DN_API DN_Str8 DN_Str8FillFV(DN_Arena *arena, DN_USize count, char const *fmt, va_list args) { - DN_Str8 fill = DN_Str8FromFmtVArena(arena, fmt, args); + DN_Str8 fill = DN_Str8FmtVArena(arena, fmt, args); DN_Str8 result = DN_Str8AllocArena(count * fill.count, DN_ZMem_No, arena); for (DN_USize index = 0; index < count; index++) { void *dest = result.data + (index * fill.count); @@ -3850,7 +3850,7 @@ DN_API DN_Str8 DN_Str8TruncateArena(DN_Str8 string, DN_USize max_count, DN_Str8 DN_Str8 result = {}; if (string.count > max_count) { DN_Str8 string_trunc = DN_Str8Subset(string, 0, max_count); - result = DN_Str8FromFmtArena(arena, "%.*s%.*s", DN_Str8PrintFmt(string_trunc), DN_Str8PrintFmt(truncator)); + result = DN_Str8FmtArena(arena, "%.*s%.*s", DN_Str8PrintFmt(string_trunc), DN_Str8PrintFmt(truncator)); } else { result = DN_Str8FromStr8Arena(string, arena); } @@ -3933,7 +3933,7 @@ DN_API DN_Str8 DN_Str8Replace(DN_Str8 string, return result; } - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_Str8Builder string_builder = DN_Str8BuilderFromArena(&scratch.arena); DN_USize max = string.count - find.count; DN_USize head = start_index; @@ -3967,7 +3967,7 @@ DN_API DN_Str8 DN_Str8Replace(DN_Str8 string, DN_Str8BuilderAppendRef(&string_builder, remainder); result = DN_Str8FromStr8BuilderArena(&string_builder, arena); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -3985,7 +3985,7 @@ DN_API DN_Str8 DN_Str8ReplaceInsensitive(DN_Str8 string, DN_Str8 find, DN_Str8 r DN_API DN_Str8 DN_Str8PadNewLinesAllocator(DN_Str8 string, DN_Str8 pad_string, DN_Allocator allocator) { - DN_TCScratch scratch = DN_TCScratchBeginAllocator(&allocator, 1); + DN_TcScratch scratch = DN_TcScratchBeginAllocator(&allocator, 1); DN_Str8Builder builder = DN_Str8BuilderFromArena(&scratch.arena); DN_Str8 it = string; while (it.count) { @@ -3995,7 +3995,7 @@ DN_API DN_Str8 DN_Str8PadNewLinesAllocator(DN_Str8 string, DN_Str8 pad_string, D } DN_Str8 result = DN_Str8FromStr8BuilderDelimitAllocator(&builder, pad_string, allocator); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -4009,13 +4009,13 @@ DN_API DN_USize DN_USizeCodepointCountFromUTF8(DN_Str8 str, DN_CodepointCountFla { DN_USize result = 0; - if (DN_BitIsNotSet(flags, DN_CodepointCountFlags_SkipANSICode)) { + if (DN_BitIsNotSet(flags, DN_CodepointCountFlags_SkipAnsiCode)) { DN_UTF8DecodeIterator it = {}; while (DN_UTF8DecodeIterate(&it, str)) ; result = it.codepoint_index; } else { - // NOTE: ANSI SGR (Select Graphic Rendition) sequence handling + // NOTE: Ansi SGR (Select Graphic Rendition) sequence handling // Format: ESC [ parameter_bytes intermediate_bytes final_byte // Common examples: \x1b[31m (red), \x1b[1;31m (bold red), \x1b[0m (reset) // Parameter bytes: 0x30-0x3F (digits and :;<=>?) @@ -4048,7 +4048,7 @@ DN_API DN_USize DN_USizeCodepointCountFromUTF8(DN_Str8 str, DN_CodepointCountFla DN_API DN_Str8 DN_Str8LineBreakAllocator(DN_Str8 src, DN_USize desired_width, DN_Str8 delimiter, DN_Str8LineBreakMode mode, DN_Allocator allocator) { - DN_TCScratch scratch = DN_TCScratchBeginAllocator(&allocator, 1); + DN_TcScratch scratch = DN_TcScratchBeginAllocator(&allocator, 1); DN_Str8Builder builder = DN_Str8BuilderFromArena(&scratch.arena); if (mode == DN_Str8LineBreakMode_AtWord) { @@ -4115,7 +4115,7 @@ DN_API DN_Str8 DN_Str8LineBreakAllocator(DN_Str8 src, DN_USize desired_width, DN } DN_Str8 result = DN_Str8FromStr8BuilderDelimitAllocator(&builder, delimiter, allocator); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -4127,12 +4127,12 @@ DN_API DN_Str8 DN_Str8LineBreakArena(DN_Str8 src, DN_USize desired_width, DN_Str DN_API DN_Str8 DN_Str8Table(DN_Str8 const *rows, DN_USize num_rows, DN_USize num_cols, DN_Str8TableFlags flags, DN_Arena *arena) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_U16 col_widths[128] = {}; for (DN_USize i = 0; i < num_cols; i++) { for (DN_USize j = 0; j < num_rows; j++) { DN_USize index = j * num_cols + i; - col_widths[i] = DN_Max(col_widths[i], (DN_U16)DN_USizeCodepointCountFromUTF8(rows[index], DN_CodepointCountFlags_SkipANSICode)); + col_widths[i] = DN_Max(col_widths[i], (DN_U16)DN_USizeCodepointCountFromUTF8(rows[index], DN_CodepointCountFlags_SkipAnsiCode)); } } @@ -4151,7 +4151,7 @@ DN_API DN_Str8 DN_Str8Table(DN_Str8 const *rows, DN_USize num_rows, DN_USize num DN_USize index = (i * num_cols) + j; DN_Str8 item = rows[index]; DN_Str8BuilderAppendF(&builder, " %.*s", DN_Str8PrintFmt(item)); - DN_USize item_width = DN_USizeCodepointCountFromUTF8(item, DN_CodepointCountFlags_SkipANSICode); + DN_USize item_width = DN_USizeCodepointCountFromUTF8(item, DN_CodepointCountFlags_SkipAnsiCode); for (DN_USize k = 0; k < col_widths[j] - item_width; k++) DN_Str8BuilderAppendF(&builder, " "); DN_Str8BuilderAppendF(&builder, " |"); @@ -4181,7 +4181,7 @@ DN_API DN_Str8 DN_Str8Table(DN_Str8 const *rows, DN_USize num_rows, DN_USize num } DN_Str8 result = DN_Str8FromStr8BuilderArena(&builder, arena); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -4268,7 +4268,7 @@ DN_API DN_Str8FindResult DN_Str8FindStr8AVX512F(DN_Str8 string, DN_Str8 find) return result; } - zero_byte_mask = DN_BitClearNextLSB(zero_byte_mask); + zero_byte_mask = DN_BitClearNextLsb(zero_byte_mask); } ptr += sizeof(__m512i); @@ -4372,7 +4372,7 @@ DN_API DN_Str8FindResult DN_Str8FindLastStr8AVX512F(DN_Str8 string, DN_Str8 find return result; } - zero_byte_mask = DN_BitClearNextLSB(zero_byte_mask); + zero_byte_mask = DN_BitClearNextLsb(zero_byte_mask); } } @@ -4735,7 +4735,7 @@ DN_API bool DN_Str8BuilderAddArrayCopy(DN_Str8Builder *builder, DN_Str8 const *s DN_API bool DN_Str8BuilderAddFV(DN_Str8Builder *builder, DN_Str8BuilderAdd add, DN_FMT_ATTRIB char const *fmt, va_list args) { - DN_Str8 string = DN_Str8FromFmtVArena(builder->arena, fmt, args); + DN_Str8 string = DN_Str8FmtVArena(builder->arena, fmt, args); DN_U64 arena_p = DN_MemListPos(builder->arena->mem); bool result = DN_Str8BuilderAddArrayRef(builder, &string, 1, add); if (!result) @@ -5517,7 +5517,7 @@ DN_API DN_Str8x32 DN_Str8x32FromByteCountU64(DN_U64 bytes, DN_ByteType type) return result; } -DN_API DN_Profiler DN_ProfilerInit(DN_ProfilerAnchor *anchors, DN_USize count, DN_USize anchors_per_frame, DN_ProfilerTSCNowFunc *tsc_now, DN_U64 tsc_frequency) +DN_API DN_Profiler DN_ProfilerInit(DN_ProfilerAnchor *anchors, DN_USize count, DN_USize anchors_per_frame, DN_ProfilerTscNowFunc *tsc_now, DN_U64 tsc_frequency) { DN_Profiler result = {}; result.anchors = anchors; @@ -5527,22 +5527,22 @@ DN_API DN_Profiler DN_ProfilerInit(DN_ProfilerAnchor *anchors, DN_USize count, D result.tsc_frequency = tsc_frequency; DN_AssertF(result.tsc_frequency != 0, - "You must set this to the frequency of the timestamp counter function (TSC) (e.g. how " + "You must set this to the frequency of the timestamp counter function (Tsc) (e.g. how " "many ticks occur between timestamps). We use this to determine the duration between " - "each zone's recorded TSC. For example if the 'tsc_now' was set to Window's " + "each zone's recorded Tsc. For example if the 'tsc_now' was set to Window's " "QueryPerformanceCounter then 'tsc_frequency' would be set to the value of " "QueryPerformanceFrequency which is typically 10mhz (e.g. The duration between two " - "consecutive TSC's is 10mhz)." + "consecutive Tsc's is 10mhz)." "" - "Hence frequency can't be zero otherwise it's a divide by 0. If you don't have a TSC " + "Hence frequency can't be zero otherwise it's a divide by 0. If you don't have a Tsc " "function and pass in null, the profiler defaults to rdtsc() and you must measure the " "frequency of rdtsc yourself. The reason for this is that measuring rdtsc requires " - "having some alternate timing mechanism to measure the duration between the TSCs " + "having some alternate timing mechanism to measure the duration between the Tscs " "provided by rdtsc and this profiler makes no assumption about what timing primitives " "are available other than rdtsc which is a CPU builtin available on basically all " "platforms or have an equivalent (e.g. __builtin_readcyclecounter)" "" - "This codebase provides DN_OS_EstimateTSCPerSecond() as an example of how to that for " + "This codebase provides DN_OS_EstimateTscPerSecond() as an example of how to that for " "convenience and is available if compiling with the OS layer. Some platforms like " "Emscripten don't support rdtsc() so you should use an alternative method like " "emscripten_get_now() or clock_gettime with CLOCK_MONOTONIC."); @@ -5591,7 +5591,7 @@ DN_API DN_ProfilerZone DN_ProfilerBeginZone(DN_Profiler *profiler, DN_Str8 name, #endif result.profiler = profiler; - result.begin_tsc = profiler->tsc_now ? profiler->tsc_now() : DN_CPUGetTSC(); + result.begin_tsc = profiler->tsc_now ? profiler->tsc_now() : DN_CPUGetTsc(); result.anchor_index = anchor_index; result.parent_zone = profiler->parent_zone; result.elapsed_tsc_at_zone_start = anchor->tsc_inclusive; @@ -5610,13 +5610,13 @@ DN_API void DN_ProfilerEndZone(DN_ProfilerZone zone) DN_ProfilerAnchorArray array = DN_ProfilerFrameAnchors(profiler); DN_ProfilerAnchor *anchor = array.data + zone.anchor_index; - DN_U64 tsc_now = profiler->tsc_now ? profiler->tsc_now() : DN_CPUGetTSC(); + DN_U64 tsc_now = profiler->tsc_now ? profiler->tsc_now() : DN_CPUGetTsc(); DN_U64 elapsed_tsc = tsc_now - zone.begin_tsc; - // NOTE: We snap the elapsed TSC at the zone start and overwrite every time we end zones. If we + // NOTE: We snap the elapsed Tsc at the zone start and overwrite every time we end zones. If we // nest zones, the nested zones will clobber the inclusive timestamp with their values. // This is fine, as long as all the zones and begun and ended correctly, when the top-most zone - // in the stack ends, it will overwrite the TSC with the elapsed time overall for just that top + // in the stack ends, it will overwrite the Tsc with the elapsed time overall for just that top // most function, unclobbering the elapsed time sitting in the anchor. anchor->tsc_inclusive = zone.elapsed_tsc_at_zone_start + elapsed_tsc; anchor->tsc_exclusive += elapsed_tsc; @@ -5697,13 +5697,13 @@ DN_API void DN_ProfilerFmtToStdout(DN_Profiler *profiler) } } -DN_API DN_F64 DN_ProfilerSecFromTSC(DN_Profiler *profiler, DN_U64 duration_tsc) +DN_API DN_F64 DN_ProfilerSecFromTsc(DN_Profiler *profiler, DN_U64 duration_tsc) { DN_F64 result = DN_Cast(DN_F64)duration_tsc / profiler->tsc_frequency; return result; } -DN_API DN_F64 DN_ProfilerMsFromTSC(DN_Profiler *profiler, DN_U64 duration_tsc) +DN_API DN_F64 DN_ProfilerMsFromTsc(DN_Profiler *profiler, DN_U64 duration_tsc) { DN_F64 result = DN_Cast(DN_F64)duration_tsc / profiler->tsc_frequency * 1000.0; return result; @@ -5723,12 +5723,12 @@ static void DN_QSortSwapElems_(void *array, DN_USize elem_size, DN_USize lhs_ind char temp_buffer[512]; bool use_buffer = elem_size <= DN_ArrayCountU(temp_buffer); - DN_TCScratch scratch = {}; + DN_TcScratch scratch = {}; char *temp = {}; if (use_buffer) { temp = temp_buffer; } else { - scratch = DN_TCScratchBeginArena(nullptr, 0); + scratch = DN_TcScratchBeginArena(nullptr, 0); temp = DN_ArenaNewArray(&scratch.arena, char, elem_size, DN_ZMem_No); } @@ -5739,19 +5739,19 @@ static void DN_QSortSwapElems_(void *array, DN_USize elem_size, DN_USize lhs_ind DN_Memcpy(rhs, temp, elem_size); if (!use_buffer) - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } static void DN_QSortInsertion_(void *array, DN_USize array_size, DN_USize elem_size, void *user_context, DN_QSortCompareFunc *compare) { char temp_buffer[512]; bool use_buffer = elem_size <= DN_ArrayCountU(temp_buffer); - DN_TCScratch scratch = {}; + DN_TcScratch scratch = {}; char *temp = {}; if (use_buffer) { temp = temp_buffer; } else { - scratch = DN_TCScratchBeginArena(nullptr, 0); + scratch = DN_TcScratchBeginArena(nullptr, 0); temp = DN_ArenaNewArray(&scratch.arena, char, elem_size, DN_ZMem_No); } @@ -5772,7 +5772,7 @@ static void DN_QSortInsertion_(void *array, DN_USize array_size, DN_USize elem_s } if (!use_buffer) - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } DN_API void DN_QSort(void *array, DN_USize array_size, DN_USize elem_size, void *user_context, DN_QSortCompareFunc *compare) @@ -5978,16 +5978,16 @@ DN_API DN_BSearchResult DN_BSearchU32(DN_U32 const *array, DN_USize count, DN_U3 #define DN_PCG_DEFAULT_MULTIPLIER_64 6364136223846793005ULL #define DN_PCG_DEFAULT_INCREMENT_64 1442695040888963407ULL -DN_API DN_PCG32 DN_PCG32Init(DN_U64 seed) +DN_API DN_Pcg32 DN_Pcg32Init(DN_U64 seed) { - DN_PCG32 result = {}; - DN_PCG32Next(&result); + DN_Pcg32 result = {}; + DN_Pcg32Next(&result); result.state += seed; - DN_PCG32Next(&result); + DN_Pcg32Next(&result); return result; } -DN_API DN_U32 DN_PCG32Next(DN_PCG32 *rng) +DN_API DN_U32 DN_Pcg32Next(DN_Pcg32 *rng) { DN_U64 state = rng->state; rng->state = state * DN_PCG_DEFAULT_MULTIPLIER_64 + DN_PCG_DEFAULT_INCREMENT_64; @@ -5998,39 +5998,39 @@ DN_API DN_U32 DN_PCG32Next(DN_PCG32 *rng) return rot ? (value >> rot) | (value << (32 - rot)) : value; } -DN_API DN_U64 DN_PCG32Next64(DN_PCG32 *rng) +DN_API DN_U64 DN_Pcg32Next64(DN_Pcg32 *rng) { - DN_U64 value = DN_PCG32Next(rng); + DN_U64 value = DN_Pcg32Next(rng); value <<= 32; - value |= DN_PCG32Next(rng); + value |= DN_Pcg32Next(rng); return value; } -DN_API DN_U32 DN_PCG32Range(DN_PCG32 *rng, DN_U32 low, DN_U32 high) +DN_API DN_U32 DN_Pcg32Range(DN_Pcg32 *rng, DN_U32 low, DN_U32 high) { DN_U32 bound = high - low; DN_U32 threshold = -(DN_I32)bound % bound; for (;;) { - DN_U32 r = DN_PCG32Next(rng); + DN_U32 r = DN_Pcg32Next(rng); if (r >= threshold) return low + (r % bound); } } -DN_API DN_F32 DN_PCG32NextF32(DN_PCG32 *rng) +DN_API DN_F32 DN_Pcg32NextF32(DN_Pcg32 *rng) { - DN_U32 x = DN_PCG32Next(rng); + DN_U32 x = DN_Pcg32Next(rng); return (DN_F32)(DN_I32)(x >> 8) * 0x1.0p-24f; } -DN_API DN_F64 DN_PCG32NextF64(DN_PCG32 *rng) +DN_API DN_F64 DN_Pcg32NextF64(DN_Pcg32 *rng) { - DN_U64 x = DN_PCG32Next64(rng); + DN_U64 x = DN_Pcg32Next64(rng); return (DN_F64)(DN_I64)(x >> 11) * 0x1.0p-53; } -DN_API void DN_PCG32Advance(DN_PCG32 *rng, DN_U64 delta) +DN_API void DN_Pcg32Advance(DN_Pcg32 *rng, DN_U64 delta) { DN_U64 cur_mult = DN_PCG_DEFAULT_MULTIPLIER_64; DN_U64 cur_plus = DN_PCG_DEFAULT_INCREMENT_64; @@ -6052,7 +6052,7 @@ DN_API void DN_PCG32Advance(DN_PCG32 *rng, DN_U64 delta) } // Default values recommended by: http://isthe.com/chongo/tech/comp/fnv/ -DN_API DN_U32 DN_FNV1AHashU32FromBytes(void const *bytes, DN_USize count, DN_U32 hash) +DN_API DN_U32 DN_Fnv1aHashU32FromBytes(void const *bytes, DN_USize count, DN_U32 hash) { auto buffer = DN_Cast(DN_U8 const *)bytes; for (DN_USize i = 0; i < count; i++) @@ -6060,7 +6060,7 @@ DN_API DN_U32 DN_FNV1AHashU32FromBytes(void const *bytes, DN_USize count, DN_U32 return hash; } -DN_API DN_U64 DN_FNV1AHashU64FromBytes(void const *bytes, DN_USize count, DN_U64 hash) +DN_API DN_U64 DN_Fnv1aHashU64FromBytes(void const *bytes, DN_USize count, DN_U64 hash) { auto buffer = DN_Cast(DN_U8 const *)bytes; for (DN_USize i = 0; i < count; i++) @@ -6297,67 +6297,67 @@ DN_API DN_U32 DN_Murmur3HashU32FromBytesX64(void const *bytes, int len, DN_U32 s return result; } -DN_API DN_Str8x32 DN_Str8x32FromANSIColourCodeU8RGB(DN_ANSIColourMode mode, DN_U8 r, DN_U8 g, DN_U8 b) +DN_API DN_Str8x32 DN_Str8x32FromAnsiColourCodeU8Rgb(DN_AnsiColourMode mode, DN_U8 r, DN_U8 g, DN_U8 b) { DN_Str8x32 result = DN_Str8x32FromFmt("\x1b[%d;2;%u;%u;%um", - mode == DN_ANSIColourMode_Fg ? 38 : 48, + mode == DN_AnsiColourMode_Fg ? 38 : 48, r, g, b); return result; } -DN_API DN_Str8x32 DN_Str8x32FromANSIColourCodeV3F32RGB255(DN_ANSIColourMode mode, DN_V3F32 rgb_255) +DN_API DN_Str8x32 DN_Str8x32FromAnsiColourCodeV3F32Rgb255(DN_AnsiColourMode mode, DN_V3F32 rgb_255) { - DN_Str8x32 result = DN_Str8x32FromANSIColourCodeU8RGB(mode, DN_Cast(DN_U8)rgb_255.r, DN_Cast(DN_U8)rgb_255.g, DN_Cast(DN_U8)rgb_255.b); + DN_Str8x32 result = DN_Str8x32FromAnsiColourCodeU8Rgb(mode, DN_Cast(DN_U8)rgb_255.r, DN_Cast(DN_U8)rgb_255.g, DN_Cast(DN_U8)rgb_255.b); return result; } -DN_API DN_Str8x32 DN_Str8x32FromANSIColourCodeU32RGB(DN_ANSIColourMode mode, DN_U32 value) +DN_API DN_Str8x32 DN_Str8x32FromAnsiColourCodeU32Rgb(DN_AnsiColourMode mode, DN_U32 value) { DN_U8 r = DN_Cast(DN_U8)(value >> 24); DN_U8 g = DN_Cast(DN_U8)(value >> 16); DN_U8 b = DN_Cast(DN_U8)(value >> 8); - DN_Str8x32 result = DN_Str8x32FromANSIColourCodeU8RGB(mode, r, g, b); + DN_Str8x32 result = DN_Str8x32FromAnsiColourCodeU8Rgb(mode, r, g, b); return result; } -DN_API DN_Str8 DN_Str8FromStr8ANSIColourU8RGBArena(DN_ANSIColourMode mode, DN_Str8 str8, DN_U8 r, DN_U8 g, DN_U8 b, DN_Arena *arena) +DN_API DN_Str8 DN_Str8FromStr8AnsiColourU8RgbArena(DN_AnsiColourMode mode, DN_Str8 str8, DN_U8 r, DN_U8 g, DN_U8 b, DN_Arena *arena) { - DN_Str8x32 ansi = DN_Str8x32FromANSIColourCodeU8RGB(mode, r, g, b); - DN_Str8 result = DN_Str8FromFmtArena(arena, "%.*s%.*s%s", DN_Str8PrintFmt(ansi), DN_Str8PrintFmt(str8), DN_ANSICodeResetLit); + DN_Str8x32 ansi = DN_Str8x32FromAnsiColourCodeU8Rgb(mode, r, g, b); + DN_Str8 result = DN_Str8FmtArena(arena, "%.*s%.*s%s", DN_Str8PrintFmt(ansi), DN_Str8PrintFmt(str8), DN_AnsiCodeResetLit); return result; } -DN_API DN_Str8 DN_Str8FromStr8ANSIColourV3F32RGB255Arena(DN_ANSIColourMode mode, DN_Str8 str8, DN_V3F32 rgb_255, DN_Arena *arena) +DN_API DN_Str8 DN_Str8FromStr8AnsiColourV3F32Rgb255Arena(DN_AnsiColourMode mode, DN_Str8 str8, DN_V3F32 rgb_255, DN_Arena *arena) { - DN_Str8 result = DN_Str8FromStr8ANSIColourU8RGBArena(mode, str8, DN_Cast(DN_U8)rgb_255.r, DN_Cast(DN_U8)rgb_255.g, DN_Cast(DN_U8)rgb_255.b, arena); + DN_Str8 result = DN_Str8FromStr8AnsiColourU8RgbArena(mode, str8, DN_Cast(DN_U8)rgb_255.r, DN_Cast(DN_U8)rgb_255.g, DN_Cast(DN_U8)rgb_255.b, arena); return result; } -DN_API DN_Str8 DN_Str8ANSIColourU8RGBFromFmtVArena(DN_ANSIColourMode mode, DN_U8 r, DN_U8 g, DN_U8 b, DN_Arena *arena, char const *fmt, va_list args) +DN_API DN_Str8 DN_Str8AnsiColourU8RgbFromFmtVArena(DN_AnsiColourMode mode, DN_U8 r, DN_U8 g, DN_U8 b, DN_Arena *arena, char const *fmt, va_list args) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); - DN_Str8 string = DN_Str8FromFmtVArena(&scratch.arena, fmt, args); - DN_Str8 result = DN_Str8FromStr8ANSIColourU8RGBArena(mode, string, r, g, b, arena); - DN_TCScratchEnd(&scratch); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); + DN_Str8 string = DN_Str8FmtVArena(&scratch.arena, fmt, args); + DN_Str8 result = DN_Str8FromStr8AnsiColourU8RgbArena(mode, string, r, g, b, arena); + DN_TcScratchEnd(&scratch); return result; } -DN_API DN_Str8 DN_Str8FromFmtANSIColourU8RGBArena(DN_ANSIColourMode mode, DN_U8 r, DN_U8 g, DN_U8 b, DN_Arena *arena, char const *fmt, ...) +DN_API DN_Str8 DN_Str8FmtAnsiColourU8RgbArena(DN_AnsiColourMode mode, DN_U8 r, DN_U8 g, DN_U8 b, DN_Arena *arena, char const *fmt, ...) { va_list args; va_start(args, fmt); - DN_Str8 result = DN_Str8ANSIColourU8RGBFromFmtVArena(mode, r, g, b, arena, fmt, args); + DN_Str8 result = DN_Str8AnsiColourU8RgbFromFmtVArena(mode, r, g, b, arena, fmt, args); va_end(args); return result; } -DN_API DN_Str8 DN_Str8FromFmtANSIColourV3F32RGB255Arena(DN_ANSIColourMode mode, DN_V3F32 rgb_255, DN_Arena *arena, char const *fmt, ...) +DN_API DN_Str8 DN_Str8FmtAnsiColourV3F32Rgb255Arena(DN_AnsiColourMode mode, DN_V3F32 rgb_255, DN_Arena *arena, char const *fmt, ...) { va_list args; va_start(args, fmt); - DN_Str8 result = DN_Str8ANSIColourU8RGBFromFmtVArena(mode, DN_Cast(DN_U8)rgb_255.r, DN_Cast(DN_U8)rgb_255.g, DN_Cast(DN_U8)rgb_255.b, arena, fmt, args); + DN_Str8 result = DN_Str8AnsiColourU8RgbFromFmtVArena(mode, DN_Cast(DN_U8)rgb_255.r, DN_Cast(DN_U8)rgb_255.g, DN_Cast(DN_U8)rgb_255.b, arena, fmt, args); va_end(args); return result; } @@ -6383,13 +6383,13 @@ DN_API DN_LogPrefixSize DN_LogMakePrefix(DN_LogStyle style, DN_LogTypeParam type DN_Str8 bold_esc = {}; DN_Str8 reset_esc = {}; if (style.colour) { - bold_esc = DN_Str8Lit(DN_ANSICodeBoldLit); - reset_esc = DN_Str8Lit(DN_ANSICodeResetLit); - colour_esc = DN_Str8x32FromANSIColourCodeU8RGB(DN_ANSIColourMode_Fg, style.r, style.g, style.b); + bold_esc = DN_Str8Lit(DN_AnsiCodeBoldLit); + reset_esc = DN_Str8Lit(DN_AnsiCodeResetLit); + colour_esc = DN_Str8x32FromAnsiColourCodeU8Rgb(DN_AnsiColourMode_Fg, style.r, style.g, style.b); } DN_Str8 file_name = DN_Str8FileNameFromPath(call_site.file); - int size = DN_SNPrintF(dest, + int size = DN_Snprintf(dest, DN_Cast(int)dest_size, "%04u-%02u-%02uT%02u:%02u:%02u" // date "%.*s" // colour @@ -7347,7 +7347,7 @@ DN_API DN_V4F32 DN_V4F32Lerp(DN_V4F32 lhs, DN_F32 t01, DN_V4F32 rhs) return result; } -DN_API bool DN_V4F32RGBA01IsValid(DN_V4F32 rgba01) +DN_API bool DN_V4F32Rgba01IsValid(DN_V4F32 rgba01) { bool result = rgba01.r >= 0 && rgba01.r <= 1.f && rgba01.g >= 0 && rgba01.g <= 1.f && @@ -7356,58 +7356,58 @@ DN_API bool DN_V4F32RGBA01IsValid(DN_V4F32 rgba01) return result; } -DN_API DN_V4F32 DN_V4F32RGBA01FromRGBU32(DN_U32 u32) +DN_API DN_V4F32 DN_V4F32Rgba01FromRgbU32(DN_U32 u32) { DN_U8 r = (DN_U8)((u32 & 0x00FF0000) >> 16); DN_U8 g = (DN_U8)((u32 & 0x0000FF00) >> 8); DN_U8 b = (DN_U8)((u32 & 0x000000FF) >> 0); - DN_V4F32 result = DN_V4F32RGBA01FromRGBU8(r, g, b); + DN_V4F32 result = DN_V4F32Rgba01FromRgbU8(r, g, b); return result; } -DN_API DN_V4F32 DN_V4F32RGBA01FromRGBAU32(DN_U32 u32) +DN_API DN_V4F32 DN_V4F32Rgba01FromRgbaU32(DN_U32 u32) { DN_U8 r = (DN_U8)((u32 & 0xFF000000) >> 24); DN_U8 g = (DN_U8)((u32 & 0x00FF0000) >> 16); DN_U8 b = (DN_U8)((u32 & 0x0000FF00) >> 8); DN_U8 a = (DN_U8)((u32 & 0x000000FF) >> 0); - DN_V4F32 result = DN_V4F32RGBA01FromRGBAU8(r, g, b, a); + DN_V4F32 result = DN_V4F32Rgba01FromRgbaU8(r, g, b, a); return result; } -#define DN_SRGB_COEFFICIENT_F32 2.2f -DN_API DN_V4F32 DN_V4F32Linear01FromSRGB01(DN_V4F32 srgb01) +#define DN_Srgb_COEFFICIENT_F32 2.2f +DN_API DN_V4F32 DN_V4F32Linear01FromSrgb01(DN_V4F32 srgb01) { DN_Assert(srgb01.x >= 0.f && srgb01.x <= 1.f); DN_Assert(srgb01.y >= 0.f && srgb01.y <= 1.f); DN_Assert(srgb01.z >= 0.f && srgb01.z <= 1.f); DN_Assert(srgb01.a >= 0.f && srgb01.a <= 1.f); DN_V4F32 result = {}; - result.r = DN_PowF32(srgb01.r, DN_SRGB_COEFFICIENT_F32); - result.g = DN_PowF32(srgb01.g, DN_SRGB_COEFFICIENT_F32); - result.b = DN_PowF32(srgb01.b, DN_SRGB_COEFFICIENT_F32); + result.r = DN_PowF32(srgb01.r, DN_Srgb_COEFFICIENT_F32); + result.g = DN_PowF32(srgb01.g, DN_Srgb_COEFFICIENT_F32); + result.b = DN_PowF32(srgb01.b, DN_Srgb_COEFFICIENT_F32); result.a = srgb01.a; return result; } DN_API DN_V4F32 DN_V4F32Linear01Desaturate(DN_V4F32 linear01, DN_F32 t01) { - DN_F32 luminance = (linear01.r * DN_V3F32_RGB_LUMINANCE.r) + (linear01.g * DN_V3F32_RGB_LUMINANCE.g) + (linear01.b * DN_V3F32_RGB_LUMINANCE.b); + DN_F32 luminance = (linear01.r * DN_V3F32_Rgb_LUMINANCE.r) + (linear01.g * DN_V3F32_Rgb_LUMINANCE.g) + (linear01.b * DN_V3F32_Rgb_LUMINANCE.b); DN_V4F32 result = linear01; result.rgb = DN_V3F32Lerp(result.rgb, t01, DN_V3F32From1N(luminance)); return result; } -DN_API DN_V4F32 DN_V4F32SRGB01FromLinear01(DN_V4F32 linear01) +DN_API DN_V4F32 DN_V4F32Srgb01FromLinear01(DN_V4F32 linear01) { DN_Assert(linear01.x >= 0.f && linear01.x <= 1.f); DN_Assert(linear01.y >= 0.f && linear01.y <= 1.f); DN_Assert(linear01.z >= 0.f && linear01.z <= 1.f); DN_Assert(linear01.a >= 0.f && linear01.a <= 1.f); DN_V4F32 result = {}; - result.r = DN_PowF32(linear01.r, 1.f / DN_SRGB_COEFFICIENT_F32); - result.g = DN_PowF32(linear01.g, 1.f / DN_SRGB_COEFFICIENT_F32); - result.b = DN_PowF32(linear01.b, 1.f / DN_SRGB_COEFFICIENT_F32); + result.r = DN_PowF32(linear01.r, 1.f / DN_Srgb_COEFFICIENT_F32); + result.g = DN_PowF32(linear01.g, 1.f / DN_Srgb_COEFFICIENT_F32); + result.b = DN_PowF32(linear01.b, 1.f / DN_Srgb_COEFFICIENT_F32); result.a = linear01.a; return result; } @@ -9451,7 +9451,7 @@ DN_API void DN_TestGroupBeginF(DN_TestCore *test, char const *fmt, ...) // NOTE: Set up the group va_list args; va_start(args, fmt); - group->name = DN_Str8FromFmtVArena(test->arena, fmt, args); + group->name = DN_Str8FmtVArena(test->arena, fmt, args); va_end(args); // NOTE: Mark as active @@ -9480,7 +9480,7 @@ DN_API void DN_TestBeginF(DN_TestCore *test, char const *fmt, ...) // NOTE: Fill in test entry va_list args; va_start(args, fmt); - entry->name = DN_Str8FromFmtVArena(test->arena, fmt, args); + entry->name = DN_Str8FmtVArena(test->arena, fmt, args); va_end(args); // NOTE: Mark as active @@ -9506,11 +9506,11 @@ DN_API void DN_TestEnd(DN_TestCore *test) DN_API DN_Str8 DN_Str8FromTestCore(DN_TestCore const *test, DN_Arena *arena, DN_Str8FromTestCoreFlags flags) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_USize padding_count = 100; DN_Str8 padding_line = DN_Str8FillF(&scratch.arena, padding_count, "."); if (flags & DN_Str8FromTestCoreFlags_Colour) - padding_line = DN_Str8FromFmtANSIColourU8RGBArena(DN_ANSIColourMode_Fg, 64, 64, 64, &scratch.arena, "%.*s", DN_Str8PrintFmt(padding_line)); + padding_line = DN_Str8FmtAnsiColourU8RgbArena(DN_AnsiColourMode_Fg, 64, 64, 64, &scratch.arena, "%.*s", DN_Str8PrintFmt(padding_line)); DN_V3F32 const good_colour = DN_V3F32From3N(0, 255, 0); DN_V3F32 const bad_colour = DN_V3F32From3N(255, 0, 0); @@ -9532,7 +9532,7 @@ DN_API DN_Str8 DN_Str8FromTestCore(DN_TestCore const *test, DN_Arena *arena, DN_ group_successes++; // NOTE: Extract the test name and pad the line with dots (.) - DN_Str8 test_prefix = DN_Str8FromFmtArena(&scratch.arena, " [%zu/%zu] %.*s ", entry_it.index + 1, group->entries_count, DN_Str8PrintFmt(entry->name)); + DN_Str8 test_prefix = DN_Str8FmtArena(&scratch.arena, " [%zu/%zu] %.*s ", entry_it.index + 1, group->entries_count, DN_Str8PrintFmt(entry->name)); if (test_prefix.count < padding_line.count) { DN_USize remaining = padding_line.count - test_prefix.count; DN_Str8 padder = DN_Str8Subset(padding_line, 0, remaining); @@ -9543,9 +9543,9 @@ DN_API DN_Str8 DN_Str8FromTestCore(DN_TestCore const *test, DN_Arena *arena, DN_ DN_Str8 outcome_str8 = entry->failed ? DN_Str8Lit("FAILED") : DN_Str8Lit("OK"); if (flags & DN_Str8FromTestCoreFlags_Colour) { if (entry->failed) - outcome_str8 = DN_Str8FromFmtANSIColourV3F32RGB255Arena(DN_ANSIColourMode_Fg, bad_colour, &scratch.arena, "%.*s", DN_Str8PrintFmt(outcome_str8)); + outcome_str8 = DN_Str8FmtAnsiColourV3F32Rgb255Arena(DN_AnsiColourMode_Fg, bad_colour, &scratch.arena, "%.*s", DN_Str8PrintFmt(outcome_str8)); else - outcome_str8 = DN_Str8FromFmtANSIColourV3F32RGB255Arena(DN_ANSIColourMode_Fg, good_colour, &scratch.arena, "%.*s", DN_Str8PrintFmt(outcome_str8)); + outcome_str8 = DN_Str8FmtAnsiColourV3F32Rgb255Arena(DN_AnsiColourMode_Fg, good_colour, &scratch.arena, "%.*s", DN_Str8PrintFmt(outcome_str8)); } DN_F64 elapsed_ms = DN_OS_PerfCounterMs(entry->ts_begin, entry->ts_end); @@ -9574,7 +9574,7 @@ DN_API DN_Str8 DN_Str8FromTestCore(DN_TestCore const *test, DN_Arena *arena, DN_ DN_Str8 file_name = DN_Str8FileNameFromPath(row->call_site.file); rows_str8[row_index++] = row->expr; rows_str8[row_index++] = row->invariant; - rows_str8[row_index++] = DN_Str8FromFmtArena(&scratch.arena, "%.*s:%u", DN_Str8PrintFmt(file_name), row->call_site.line); + rows_str8[row_index++] = DN_Str8FmtArena(&scratch.arena, "%.*s:%u", DN_Str8PrintFmt(file_name), row->call_site.line); DN_Str8 table = DN_Str8Table(rows_str8, row_count, col_count, table_flags, &scratch.arena); table = DN_Str8PadNewLinesArena(table, DN_Str8Lit(" "), &scratch.arena); @@ -9592,13 +9592,13 @@ DN_API DN_Str8 DN_Str8FromTestCore(DN_TestCore const *test, DN_Arena *arena, DN_ DN_MSVC_WARNING_PUSH DN_MSVC_WARNING_DISABLE(6067) // _Param_(3) in call to 'DN_Str8BuilderAppendF' must be the address of a string. Actual type: 'const unsigned __int64'. DN_MSVC_WARNING_DISABLE(6271) // Extra argument passed to 'DN_Str8BuilderAppendF'. - DN_Str8 group_prefix = DN_Str8FromFmtArena(&scratch.arena, "%'zu/%'zu test%s", group_successes, group->entries_count, group_successes > 1 ? "s" :""); + DN_Str8 group_prefix = DN_Str8FmtArena(&scratch.arena, "%'zu/%'zu test%s", group_successes, group->entries_count, group_successes > 1 ? "s" :""); DN_MSVC_WARNING_POP if (flags & DN_Str8FromTestCoreFlags_Colour) { if (group_failures == 0) - group_prefix = DN_Str8FromFmtANSIColourV3F32RGB255Arena(DN_ANSIColourMode_Fg, good_colour, &scratch.arena, "%.*s", DN_Str8PrintFmt(group_prefix)); + group_prefix = DN_Str8FmtAnsiColourV3F32Rgb255Arena(DN_AnsiColourMode_Fg, good_colour, &scratch.arena, "%.*s", DN_Str8PrintFmt(group_prefix)); else - group_prefix = DN_Str8FromFmtANSIColourV3F32RGB255Arena(DN_ANSIColourMode_Fg, bad_colour, &scratch.arena, "%.*s", DN_Str8PrintFmt(group_prefix)); + group_prefix = DN_Str8FmtAnsiColourV3F32Rgb255Arena(DN_AnsiColourMode_Fg, bad_colour, &scratch.arena, "%.*s", DN_Str8PrintFmt(group_prefix)); } DN_Str8BuilderAppendF(&builder, "\n %.*s passed in [%.*s] %.3fms (%zu failed)\n", DN_Str8PrintFmt(group_prefix), DN_Str8PrintFmt(group->name), elapsed_ms, group_failures); } @@ -9621,7 +9621,7 @@ DN_API DN_TestDiagnosticRow *DN_TestVerifySetupFmtV(DN_TestCore *test, DN_CallSi result = DN_PArrayMakeZ(entry->diagnostics, &entry->diagnostics_count, entry->diagnostics_max); result->expr = expr; result->call_site = call_site; - result->message = DN_Str8FromFmtVArena(test->arena, fmt, args); + result->message = DN_Str8FmtVArena(test->arena, fmt, args); } return result; } @@ -9633,7 +9633,7 @@ DN_API void DN_TestVerifyExprF_(DN_TestCore *test, DN_CallSite call_site, DN_Str DN_TestDiagnosticRow *row = DN_TestVerifySetupFmtV(test, call_site, expr, /*verify_failed=*/ !expr_result, fmt, args); va_end(args); if (row) - row->invariant = DN_Str8FromFmtArena(test->arena, "%s (expected %s)", expr_result ? "true" : "false", expr_result ? "false" : "true"); + row->invariant = DN_Str8FmtArena(test->arena, "%s (expected %s)", expr_result ? "true" : "false", expr_result ? "false" : "true"); } DN_API void DN_TestVerifyF64Fmt(DN_TestCore *test, DN_CallSite call_site, DN_Str8 val_str8, DN_Str8 expect_str8, DN_F64 val, DN_F64 expect, DN_TestLogic logic, char const *fmt, ...) @@ -9654,8 +9654,8 @@ DN_API void DN_TestVerifyF64Fmt(DN_TestCore *test, DN_CallSite call_site, DN_Str DN_TestDiagnosticRow *row = DN_TestVerifySetupFmtV(test, call_site, /*expr=*/ DN_Str8Lit(""), verify_failed, fmt, args); va_end(args); if (row) { - row->expr = DN_Str8FromFmtArena(test->arena, "%.*s %.*s %.*s", DN_Str8PrintFmt(val_str8), DN_Str8PrintFmt(logic_str8), DN_Str8PrintFmt(expect_str8)); - row->invariant = DN_Str8FromFmtArena(test->arena, "%f %.*s %f (expected)", val, DN_Str8PrintFmt(logic_inv_str8), expect); + row->expr = DN_Str8FmtArena(test->arena, "%.*s %.*s %.*s", DN_Str8PrintFmt(val_str8), DN_Str8PrintFmt(logic_str8), DN_Str8PrintFmt(expect_str8)); + row->invariant = DN_Str8FmtArena(test->arena, "%f %.*s %f (expected)", val, DN_Str8PrintFmt(logic_inv_str8), expect); } } @@ -9677,12 +9677,12 @@ DN_API void DN_TestVerifyISizeF(DN_TestCore *test, DN_CallSite call_site, DN_Str DN_TestDiagnosticRow *row = DN_TestVerifySetupFmtV(test, call_site, /*expr=*/ DN_Str8Lit(""), verify_failed, fmt, args); va_end(args); if (row) { - row->expr = DN_Str8FromFmtArena(test->arena, "%.*s %.*s %.*s", DN_Str8PrintFmt(val_str8), DN_Str8PrintFmt(logic_str8), DN_Str8PrintFmt(expect_str8)); + row->expr = DN_Str8FmtArena(test->arena, "%.*s %.*s %.*s", DN_Str8PrintFmt(val_str8), DN_Str8PrintFmt(logic_str8), DN_Str8PrintFmt(expect_str8)); DN_MSVC_WARNING_PUSH - DN_MSVC_WARNING_DISABLE(6067) // _Param_(4) in call to 'DN_Str8FromFmtArena' must be the address of a string. Actual type: 'int'. - DN_MSVC_WARNING_DISABLE(6328) // Size mismatch: '__int64' passed as _Param_(3) when 'unsigned int' is required in call to 'DN_Str8FromFmtArena' - DN_MSVC_WARNING_DISABLE(6271) // Extra argument passed to 'DN_Str8FromFmtArena'. - row->invariant = DN_Str8FromFmtArena(test->arena, "%'zd %.*s %'zd (expected)", val, DN_Str8PrintFmt(logic_inv_str8), expect); + DN_MSVC_WARNING_DISABLE(6067) // _Param_(4) in call to 'DN_Str8FmtArena' must be the address of a string. Actual type: 'int'. + DN_MSVC_WARNING_DISABLE(6328) // Size mismatch: '__int64' passed as _Param_(3) when 'unsigned int' is required in call to 'DN_Str8FmtArena' + DN_MSVC_WARNING_DISABLE(6271) // Extra argument passed to 'DN_Str8FmtArena'. + row->invariant = DN_Str8FmtArena(test->arena, "%'zd %.*s %'zd (expected)", val, DN_Str8PrintFmt(logic_inv_str8), expect); DN_MSVC_WARNING_POP } } @@ -9705,12 +9705,12 @@ DN_API void DN_TestVerifyUSizeF(DN_TestCore *test, DN_CallSite call_site, DN_Str DN_TestDiagnosticRow *row = DN_TestVerifySetupFmtV(test, call_site, /*expr=*/ DN_Str8Lit(""), verify_failed, fmt, args); va_end(args); if (row) { - row->expr = DN_Str8FromFmtArena(test->arena, "%.*s %.*s %.*s", DN_Str8PrintFmt(val_str8), DN_Str8PrintFmt(logic_str8), DN_Str8PrintFmt(expect_str8)); + row->expr = DN_Str8FmtArena(test->arena, "%.*s %.*s %.*s", DN_Str8PrintFmt(val_str8), DN_Str8PrintFmt(logic_str8), DN_Str8PrintFmt(expect_str8)); DN_MSVC_WARNING_PUSH - DN_MSVC_WARNING_DISABLE(6067) // _Param_(4) in call to 'DN_Str8FromFmtArena' must be the address of a string. Actual type: 'int'. - DN_MSVC_WARNING_DISABLE(6328) // Size mismatch: '__int64' passed as _Param_(3) when 'unsigned int' is required in call to 'DN_Str8FromFmtArena' - DN_MSVC_WARNING_DISABLE(6271) // Extra argument passed to 'DN_Str8FromFmtArena'. - row->invariant = DN_Str8FromFmtArena(test->arena, "%'zu %.*s %'zu (expected)", val, DN_Str8PrintFmt(logic_inv_str8), expect); + DN_MSVC_WARNING_DISABLE(6067) // _Param_(4) in call to 'DN_Str8FmtArena' must be the address of a string. Actual type: 'int'. + DN_MSVC_WARNING_DISABLE(6328) // Size mismatch: '__int64' passed as _Param_(3) when 'unsigned int' is required in call to 'DN_Str8FmtArena' + DN_MSVC_WARNING_DISABLE(6271) // Extra argument passed to 'DN_Str8FmtArena'. + row->invariant = DN_Str8FmtArena(test->arena, "%'zu %.*s %'zu (expected)", val, DN_Str8PrintFmt(logic_inv_str8), expect); DN_MSVC_WARNING_POP } } @@ -9729,9 +9729,9 @@ DN_API void DN_TestVerifyStr8F(DN_TestCore *test, DN_CallSite call_site, DN_Str8 va_end(args); if (row) { if (expect_eq) - row->invariant = DN_Str8FromFmtArena(test->arena, "\"%.*s\" != \"%.*s\"", DN_Str8PrintFmt(str8), DN_Str8PrintFmt(expect)); + row->invariant = DN_Str8FmtArena(test->arena, "\"%.*s\" != \"%.*s\"", DN_Str8PrintFmt(str8), DN_Str8PrintFmt(expect)); else - row->invariant = DN_Str8FromFmtArena(test->arena, "\"%.*s\" == \"%.*s\"", DN_Str8PrintFmt(str8), DN_Str8PrintFmt(expect)); + row->invariant = DN_Str8FmtArena(test->arena, "\"%.*s\" == \"%.*s\"", DN_Str8PrintFmt(str8), DN_Str8PrintFmt(expect)); } } @@ -9751,9 +9751,9 @@ DN_API void DN_TestVerifyBytesF(DN_TestCore *test, DN_CallSite call_site, DN_Str DN_Str8 bytes_hex = DN_Str8HexFromStr8BytesArena(bytes, test->arena, DN_TrimLeadingZero_No); DN_Str8 expect_hex = DN_Str8HexFromStr8BytesArena(expect, test->arena, DN_TrimLeadingZero_No); if (expect_eq) - row->invariant = DN_Str8FromFmtArena(test->arena, "\"%.*s\" != \"%.*s\"", DN_Str8PrintFmt(bytes_hex), DN_Str8PrintFmt(expect_hex)); + row->invariant = DN_Str8FmtArena(test->arena, "\"%.*s\" != \"%.*s\"", DN_Str8PrintFmt(bytes_hex), DN_Str8PrintFmt(expect_hex)); else - row->invariant = DN_Str8FromFmtArena(test->arena, "\"%.*s\" == \"%.*s\"", DN_Str8PrintFmt(bytes_hex), DN_Str8PrintFmt(expect_hex)); + row->invariant = DN_Str8FmtArena(test->arena, "\"%.*s\" == \"%.*s\"", DN_Str8PrintFmt(bytes_hex), DN_Str8PrintFmt(expect_hex)); } } @@ -9836,7 +9836,7 @@ struct DN_RefImplCPUReport { bool SYSCALL(void) const { return isIntel_ && f_81_EDX_ & (1 << 11); } bool MMXEXT(void) const { return isAMD_ && f_81_EDX_ & (1 << 22); } - bool RDTSCP(void) const { return f_81_EDX_ & (1 << 27); } + bool RDTscP(void) const { return f_81_EDX_ & (1 << 27); } bool _3DNOWEXT(void) const { return isAMD_ && f_81_EDX_ & (1 << 30); } bool _3DNOW(void) const { return isAMD_ && f_81_EDX_ & (1 << 31); } }; @@ -10037,7 +10037,7 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) DN_TestVerifyExpr(&result, DN_CPUHasFeature(&cpu_report, DN_CPUFeature_POPCNT) == ref_cpu_report.POPCNT()); DN_TestVerifyExpr(&result, DN_CPUHasFeature(&cpu_report, DN_CPUFeature_RDRAND) == ref_cpu_report.RDRAND()); DN_TestVerifyExpr(&result, DN_CPUHasFeature(&cpu_report, DN_CPUFeature_RDSEED) == ref_cpu_report.RDSEED()); - DN_TestVerifyExpr(&result, DN_CPUHasFeature(&cpu_report, DN_CPUFeature_RDTSCP) == ref_cpu_report.RDTSCP()); + DN_TestVerifyExpr(&result, DN_CPUHasFeature(&cpu_report, DN_CPUFeature_RDTscP) == ref_cpu_report.RDTscP()); DN_TestVerifyExpr(&result, DN_CPUHasFeature(&cpu_report, DN_CPUFeature_SHA) == ref_cpu_report.SHA()); DN_TestVerifyExpr(&result, DN_CPUHasFeature(&cpu_report, DN_CPUFeature_SSE) == ref_cpu_report.SSE()); DN_TestVerifyExpr(&result, DN_CPUHasFeature(&cpu_report, DN_CPUFeature_SSE2) == ref_cpu_report.SSE2()); @@ -10106,8 +10106,8 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) DN_TestVerifyExprF(&result, a == b, "a: %" PRId64 ", b: %" PRId64, a, b); } - for (DN_TestScopeF(&result, "[Intrinsics] CPUGetTSC compile check")) { - DN_CPUGetTSC(); + for (DN_TestScopeF(&result, "[Intrinsics] CPUGetTsc compile check")) { + DN_CPUGetTsc(); } for (DN_TestScopeF(&result, "[Intrinsics] CompilerReadBarrierAndCPUReadFence compile check")) { @@ -10205,8 +10205,8 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) // NOTE: Hex/Bytes { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena_, 1); - DN_DEFER { DN_TCScratchEnd(&scratch); }; + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena_, 1); + DN_DEFER { DN_TcScratchEnd(&scratch); }; for (DN_TestScopeF(&result, "[Hex/Bytes] Convert 0x123")) { uint64_t val = DN_U64FromHexStr8Unsafe(DN_Str8Lit("0x123")); @@ -10644,11 +10644,11 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) } for (DN_TestScopeF(&result, "[OS] Query executable directory")) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena_, 1); - DN_Str8 os_result = DN_OS_EXEDir(&scratch.arena); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena_, 1); + DN_Str8 os_result = DN_OS_ExeDir(&scratch.arena); DN_TestVerifyExpr(&result, os_result.count > 0); DN_TestVerifyExprF(&result, DN_OS_PathIsDir(os_result), "result(%zu): %.*s", os_result.count, DN_Str8PrintFmt(os_result)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } for (DN_TestScopeF(&result, "[OS] DN_OS_PerfCounterNow")) { @@ -10690,7 +10690,7 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) DN_TestVerifyExpr(&result, write_result); DN_TestVerifyExpr(&result, DN_OS_PathIsFile(SRC_FILE)); - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena_, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena_, 1); DN_Str8 read_file = DN_OS_FileReadAllArena(&scratch.arena, SRC_FILE, nullptr); DN_TestVerifyExprF(&result, read_file.count > 0, "Failed to load file"); DN_TestVerifyExprF(&result, read_file.count == 4, "File read wrong amount of bytes (%zu)", read_file.count); @@ -10716,7 +10716,7 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) DN_B32 delete_non_existent_moved_file = DN_OS_PathDelete(MOVE_FILE); DN_TestVerifyExpr(&result, delete_non_existent_moved_file == false); DN_TestVerifyExpr(&result, delete_non_existent_src_file == false); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } for (DN_TestScopeF(&result, "[OS] Wait timeout")) { @@ -10882,7 +10882,7 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) for (DN_TestScopeF(&result, "[Strings] Format from arena")) { DN_MemList mem = DN_MemListFromBuffer(arena_base, sizeof(arena_base), DN_MemFlags_Nil); DN_Arena arena = DN_ArenaFromMemList(&mem); - DN_Str8 str8 = DN_Str8FromFmtArena(&arena, "Foo Bar %d", 5); + DN_Str8 str8 = DN_Str8FmtArena(&arena, "Foo Bar %d", 5); DN_Str8 expect = DN_Str8Lit("Foo Bar 5"); DN_TestVerifyStr8EqF(&result, str8, expect, "str8=%.*s", DN_Str8PrintFmt(str8), DN_Str8PrintFmt(expect)); } @@ -10891,7 +10891,7 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) DN_MemList mem = DN_MemListFromBuffer(arena_base, sizeof(arena_base), DN_MemFlags_Nil); DN_Arena arena = DN_ArenaFromMemList(&mem); DN_Pool pool = DN_PoolFromArena(&arena, 0); - DN_Str8 str8 = DN_Str8FromFmtPool(&pool, "Foo Bar %d", 5); + DN_Str8 str8 = DN_Str8FmtPool(&pool, "Foo Bar %d", 5); DN_Str8 expect = DN_Str8Lit("Foo Bar 5"); DN_TestVerifyStr8EqF(&result, str8, expect, "str8=%.*s", DN_Str8PrintFmt(str8), DN_Str8PrintFmt(expect)); } @@ -10903,24 +10903,24 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) } for (DN_TestScopeF(&result, "[Strings] Initialise with format string")) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena_, 1); - DN_Str8 string = DN_Str8FromFmtArena(&scratch.arena, "%s", "AB"); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena_, 1); + DN_Str8 string = DN_Str8FmtArena(&scratch.arena, "%s", "AB"); DN_TestVerifyUSizeEqF(&result, string.count, 2, "size: %zu", string.count); DN_TestVerifyExprF(&result, string.data[0] == 'A', "string[0]: %c", string.data[0]); DN_TestVerifyExprF(&result, string.data[1] == 'B', "string[1]: %c", string.data[1]); DN_TestVerifyExprF(&result, string.data[2] == 0, "string[2]: %c", string.data[2]); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } for (DN_TestScopeF(&result, "[Strings] Copy string")) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena_, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena_, 1); DN_Str8 string = DN_Str8Lit("AB"); DN_Str8 copy = DN_Str8FromStr8Arena(string, &scratch.arena); DN_TestVerifyUSizeEqF(&result, copy.count, 2, "size: %zu", copy.count); DN_TestVerifyExprF(&result, copy.data[0] == 'A', "copy[0]: %c", copy.data[0]); DN_TestVerifyExprF(&result, copy.data[1] == 'B', "copy[1]: %c", copy.data[1]); DN_TestVerifyExprF(&result, copy.data[2] == 0, "copy[2]: %c", copy.data[2]); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } for (DN_TestScopeF(&result, "[Strings] Trim whitespace around string")) { @@ -10929,10 +10929,10 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) } for (DN_TestScopeF(&result, "[Strings] Allocate string from arena")) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena_, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena_, 1); DN_Str8 string = DN_Str8AllocArena(2, DN_ZMem_No, &scratch.arena); DN_TestVerifyUSizeEqF(&result, string.count, 2, "size: %zu", string.count); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } for (DN_TestScopeF(&result, "[Strings] Trim prefix with matching prefix")) { @@ -11257,7 +11257,7 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) } for (DN_TestScopeF(&result, "[Strings] TruncMiddle: Arena wrapper allocates and truncates correctly")) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena_, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena_, 1); DN_Str8 str = DN_Str8Lit("HelloBeautifulWorld"); DN_Str8 trunc = DN_Str8Lit("..."); DN_Str8TruncResult res = DN_Str8TruncMiddle(str, 5, trunc, &scratch.arena); @@ -11265,14 +11265,14 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) DN_TestVerifyUSizeEq(&result, res.count_req, 13); DN_TestVerifyStr8EqF(&result, res.str8, DN_Str8Lit("Hello...World"), "%.*s", DN_Str8PrintFmt(res.str8)); DN_TestVerifyExpr(&result, res.str8.data[res.str8.count] == '\0'); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } } // NOTE: Win #if defined(DN_PLATFORM_WIN32) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena_, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena_, 1); DN_Str8 input8 = DN_Str8Lit("String"); DN_Str16 input16 = DN_Str16{(wchar_t *)(L"String"), sizeof(L"String") / sizeof(L"String"[0]) - 1}; @@ -11310,7 +11310,7 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) DN_TestVerifyExpr(&result, DN_Memcmp(EXPECTED, string8.data, sizeof(EXPECTED)) == 0); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } #endif // DN_PLATFORM_WIN32 @@ -11618,16 +11618,16 @@ DN_API void DN_OS_LoggerSetFilePath(DN_OSLogger *logger, DN_Pool *pool, DN_Str8 static void DN_OS_DoLogFileSetupAndRotation_(DN_OSLogger *logger) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str8 error = {}; DN_TicketMutexBegin(&logger->file_mutex); if (logger->flags & DN_OSLoggerFlags_File) { // NOTE: Set a default file path to log to if it's not been set yet if (logger->file_path.count == 0) { - DN_Str8 exe_dir = DN_OS_EXEDir(&scratch.arena); + DN_Str8 exe_dir = DN_OS_ExeDir(&scratch.arena); DN_Str8 default_file_path = DN_OS_PathFmtArena(&scratch.arena, "%.*s/dn.log", DN_Str8PrintFmt(exe_dir)); - DN_OS_LoggerSetFilePathNoMutex_(logger, DN_TCMainPool(), default_file_path); + DN_OS_LoggerSetFilePathNoMutex_(logger, DN_TcMainPool(), default_file_path); } // NOTE Rotate the log file if the criteria is met @@ -11650,7 +11650,7 @@ static void DN_OS_DoLogFileSetupAndRotation_(DN_OSLogger *logger) DN_OSPathInfo recheck_file_info = DN_OS_PathInfo(logger->file_path); if (recheck_file_info.size >= logger->rotate_every_n_bytes) { logger->flags |= DN_OSLoggerFlags_FileError; - error = DN_Str8FromFmtArena(&scratch.arena, "Rotating of log files failed at (%.*s). Logging to disk is disabled", DN_Str8PrintFmt(logger->file_path)); + error = DN_Str8FmtArena(&scratch.arena, "Rotating of log files failed at (%.*s). Logging to disk is disabled", DN_Str8PrintFmt(logger->file_path)); } } } @@ -11661,7 +11661,7 @@ static void DN_OS_DoLogFileSetupAndRotation_(DN_OSLogger *logger) DN_OSPathInfo file_path_info = DN_OS_PathInfo(logger->file_path); if (file_path_info.exists && file_path_info.type != DN_OSPathInfoType_File) { logger->flags |= DN_OSLoggerFlags_FileError; - error = DN_Str8FromFmtArena(&scratch.arena, "File path to log to (%.*s) exists but is not a writable file. Logging to disk is disabled.", DN_Str8PrintFmt(logger->file_path)); + error = DN_Str8FmtArena(&scratch.arena, "File path to log to (%.*s) exists but is not a writable file. Logging to disk is disabled.", DN_Str8PrintFmt(logger->file_path)); } if (DN_BitIsNotSet(logger->flags, DN_OSLoggerFlags_FileError)) @@ -11674,7 +11674,7 @@ static void DN_OS_DoLogFileSetupAndRotation_(DN_OSLogger *logger) if (DN_BitIsNotSet(logger->flags, DN_OSLoggerFlags_FileError)) { if (logger->file.error) { logger->flags |= DN_OSLoggerFlags_FileError; - error = DN_Str8FromFmtArena(&scratch.arena, "Failed to open file (%.*s) for logging. Logging to disk is disabled", DN_Str8PrintFmt(logger->file_path)); + error = DN_Str8FmtArena(&scratch.arena, "Failed to open file (%.*s) for logging. Logging to disk is disabled", DN_Str8PrintFmt(logger->file_path)); } } } @@ -11683,7 +11683,7 @@ static void DN_OS_DoLogFileSetupAndRotation_(DN_OSLogger *logger) // NOTE: Error is logged outside of the mutex since logging will recurse back into the OS logger if (error.count) DN_LogWarningF("%.*s", DN_Str8PrintFmt(error)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } DN_API void DN_OS_LoggerFV(DN_OSLogger *logger, DN_LogTypeParam type, DN_CallSite call_site, DN_LogFlags flags, DN_FMT_ATTRIB char const *fmt, va_list args) @@ -11848,18 +11848,17 @@ DN_API DN_Str8x32 DN_OS_DateLocalTimeStr8Now(char date_separator, char hms_separ return result; } -// NOTE: Other -DN_API DN_Str8 DN_OS_EXEDir(DN_Arena *arena) +DN_API DN_Str8 DN_OS_ExeDir(DN_Arena *arena) { DN_Str8 result = {}; if (!arena) return result; - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); - DN_Str8 exe_path = DN_OS_EXEPath(&scratch.arena); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); + DN_Str8 exe_path = DN_OS_ExePath(&scratch.arena); DN_Str8 separators[] = {DN_Str8Lit("/"), DN_Str8Lit("\\")}; DN_Str8BSplitResult split = DN_Str8BSplitLastArray(exe_path, separators, DN_ArrayCountU(separators)); result = DN_Str8FromStr8Arena(split.lhs, arena); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -11932,17 +11931,17 @@ DN_API DN_F64 DN_OS_TimerNs(DN_OSTimer timer) return result; } -DN_API uint64_t DN_OS_EstimateTSCPerSecond(uint64_t duration_ms_to_gauge_tsc_frequency) +DN_API uint64_t DN_OS_EstimateTscPerSecond(uint64_t duration_ms_to_gauge_tsc_frequency) { uint64_t os_frequency = DN_OS_PerfCounterFrequency(); uint64_t os_target_elapsed = duration_ms_to_gauge_tsc_frequency * os_frequency / 1000ULL; - uint64_t tsc_begin = DN_CPUGetTSC(); + uint64_t tsc_begin = DN_CPUGetTsc(); uint64_t result = 0; if (tsc_begin) { uint64_t os_elapsed = 0; for (uint64_t os_begin = DN_OS_PerfCounterNow(); os_elapsed < os_target_elapsed;) os_elapsed = DN_OS_PerfCounterNow() - os_begin; - uint64_t tsc_end = DN_CPUGetTSC(); + uint64_t tsc_end = DN_CPUGetTsc(); uint64_t tsc_elapsed = tsc_end - tsc_begin; result = tsc_elapsed / os_elapsed * os_frequency; } @@ -11962,14 +11961,14 @@ DN_API bool DN_OS_FileRotate(DN_Str8 base_file_path, DN_USize rotate_count, DN_S if (DN_BitIsNotSet(flags, DN_OSFileRotateFlags_KeepBaseFile)) DN_OS_PathDelete(base_file_path); } else { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); for (DN_USize offset = 0; offset < (rotate_count - 1); offset++) { DN_USize const file_index = rotate_count - (offset + 1); bool last_file_index = file_index - 1 == 0; DN_AssertF(file_index != 0, "This index should never hits zero, we iterate in reverse and stop 1 before the last one"); - DN_Str8 file_path = DN_Str8FromFmtArena(&scratch.arena, "%.*s%.*s%zu", DN_Str8PrintFmt(base_file_path), DN_Str8PrintFmt(suffix), file_index); - DN_Str8 prev_file_path = last_file_index ? base_file_path : DN_Str8FromFmtArena(&scratch.arena, "%.*s%.*s%zu", DN_Str8PrintFmt(base_file_path), DN_Str8PrintFmt(suffix), file_index - 1); + DN_Str8 file_path = DN_Str8FmtArena(&scratch.arena, "%.*s%.*s%zu", DN_Str8PrintFmt(base_file_path), DN_Str8PrintFmt(suffix), file_index); + DN_Str8 prev_file_path = last_file_index ? base_file_path : DN_Str8FmtArena(&scratch.arena, "%.*s%.*s%zu", DN_Str8PrintFmt(base_file_path), DN_Str8PrintFmt(suffix), file_index - 1); DN_OSPathInfo file_path_info = DN_OS_PathInfo(file_path); DN_OSPathInfo prev_file_path_info = DN_OS_PathInfo(prev_file_path); @@ -11985,7 +11984,7 @@ DN_API bool DN_OS_FileRotate(DN_Str8 base_file_path, DN_USize rotate_count, DN_S result &= DN_OS_FileMove(prev_file_path, file_path, /*overwrite=*/true, nullptr); } } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } } return result; @@ -12114,10 +12113,10 @@ DN_API bool DN_OS_FileWriteAll(DN_Str8 path, DN_Str8 buffer, DN_ErrSink *error) DN_API bool DN_OS_FileWriteAllFV(DN_Str8 file_path, DN_ErrSink *error, DN_FMT_ATTRIB char const *fmt, va_list args) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); - DN_Str8 buffer = DN_Str8FromFmtVArena(&scratch.arena, fmt, args); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); + DN_Str8 buffer = DN_Str8FmtVArena(&scratch.arena, fmt, args); bool result = DN_OS_FileWriteAll(file_path, buffer, error); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -12132,30 +12131,30 @@ DN_API bool DN_OS_FileWriteAllF(DN_Str8 file_path, DN_ErrSink *error, DN_FMT_ATT DN_API bool DN_OS_FileWriteAllSafe(DN_Str8 path, DN_Str8 buffer, DN_ErrSink *error) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); - DN_Str8 tmp_path = DN_Str8FromFmtArena(&scratch.arena, "%.*s.tmp", DN_Str8PrintFmt(path)); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); + DN_Str8 tmp_path = DN_Str8FmtArena(&scratch.arena, "%.*s.tmp", DN_Str8PrintFmt(path)); if (!DN_OS_FileWriteAll(tmp_path, buffer, error)) { - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return false; } if (!DN_OS_FileCopy(tmp_path, path, true /*overwrite*/, error)) { - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return false; } if (!DN_OS_PathDelete(tmp_path)) { - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return false; } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return true; } DN_API bool DN_OS_FileWriteAllSafeFV(DN_Str8 path, DN_ErrSink *error, DN_FMT_ATTRIB char const *fmt, va_list args) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); - DN_Str8 buffer = DN_Str8FromFmtVArena(&scratch.arena, fmt, args); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); + DN_Str8 buffer = DN_Str8FmtVArena(&scratch.arena, fmt, args); bool result = DN_OS_FileWriteAllSafe(path, buffer, error); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -12240,7 +12239,7 @@ DN_API bool DN_OS_PathAddF(DN_Arena *arena, DN_OSPath *fs_path, DN_FMT_ATTRIB ch { va_list args; va_start(args, fmt); - DN_Str8 path = DN_Str8FromFmtVArena(arena, fmt, args); + DN_Str8 path = DN_Str8FmtVArena(arena, fmt, args); va_end(args); bool result = DN_OS_PathAddRef(arena, fs_path, path); return result; @@ -12310,38 +12309,38 @@ DN_API DN_Str8 DN_OS_PathToArena(DN_Arena *arena, DN_Str8 path, DN_Str8 path_sep DN_API DN_Str8 DN_OS_PathToPool(DN_Pool *pool, DN_Str8 path, DN_Str8 path_separator) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&pool->arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&pool->arena, 1); DN_OSPath fs_path = {}; DN_OS_PathAddRef(&scratch.arena, &fs_path, path); DN_Allocator allocator = DN_AllocatorFromPool(pool); DN_Str8 result = DN_OS_PathBuildWithSeparatorAllocator(allocator, &fs_path, path_separator); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } DN_API DN_Str8 DN_OS_PathToFmtArena(DN_Arena *arena, DN_Str8 path_separator, DN_FMT_ATTRIB char const *fmt, ...) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); va_list args; va_start(args, fmt); - DN_Str8 path = DN_Str8FromFmtVArena(&scratch.arena, fmt, args); + DN_Str8 path = DN_Str8FmtVArena(&scratch.arena, fmt, args); va_end(args); DN_Str8 result = DN_OS_PathToArena(arena, path, path_separator); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } DN_API DN_Str8 DN_OS_PathToFmtPool(DN_Pool *pool, DN_Str8 path_separator, DN_FMT_ATTRIB char const *fmt, ...) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&pool->arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&pool->arena, 1); va_list args; va_start(args, fmt); - DN_Str8 path = DN_Str8FromFmtVArena(&scratch.arena, fmt, args); + DN_Str8 path = DN_Str8FmtVArena(&scratch.arena, fmt, args); va_end(args); DN_Str8 result = DN_OS_PathToPool(pool, path, path_separator); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -12359,38 +12358,45 @@ DN_API DN_Str8 DN_OS_PathPool(DN_Pool *pool, DN_Str8 path) DN_API DN_Str8 DN_OS_PathFmtArena(DN_Arena *arena, DN_FMT_ATTRIB char const *fmt, ...) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); va_list args; va_start(args, fmt); - DN_Str8 path = DN_Str8FromFmtVArena(&scratch.arena, fmt, args); + DN_Str8 path = DN_Str8FmtVArena(&scratch.arena, fmt, args); va_end(args); DN_Str8 result = DN_OS_PathArena(arena, path); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } DN_API DN_Str8 DN_OS_PathFmtPool(DN_Pool *pool, DN_FMT_ATTRIB char const *fmt, ...) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&pool->arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&pool->arena, 1); va_list args; va_start(args, fmt); - DN_Str8 path = DN_Str8FromFmtVArena(&scratch.arena, fmt, args); + DN_Str8 path = DN_Str8FmtVArena(&scratch.arena, fmt, args); va_end(args); DN_Str8 result = DN_OS_PathPool(pool, path); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } -DN_API DN_OSExecResult DN_OS_Exec(DN_Str8Slice cmd_line, DN_OSExecArgs *args, DN_Arena *arena, DN_ErrSink *error) +DN_API DN_OSExecArgs DN_OS_ExecArgsDefault() +{ + DN_OSExecArgs result = {}; + result.flags |= DN_OSExecFlags_SaveOutput; + return result; +} + +DN_API DN_OSExecResult DN_OS_Exec(DN_Str8Slice cmd_line, DN_OSExecArgs args, DN_Arena *arena, DN_ErrSink *error) { DN_OSExecAsyncHandle async_handle = DN_OS_ExecAsync(cmd_line, args, error); DN_OSExecResult result = DN_OS_ExecWait(async_handle, arena, error); return result; } -DN_API DN_OSExecResult DN_OS_ExecOrAbort(DN_Str8Slice cmd_line, DN_OSExecArgs *args, DN_Arena *arena) +DN_API DN_OSExecResult DN_OS_ExecOrAbort(DN_Str8Slice cmd_line, DN_OSExecArgs args, DN_Arena *arena) { - DN_ErrSink *error = DN_TCErrSinkBegin(DN_ErrSinkMode_Nil); + DN_ErrSink *error = DN_TcErrSinkBegin(DN_ErrSinkMode_Nil); DN_OSExecResult result = DN_OS_Exec(cmd_line, args, arena, error); if (result.os_error_code) DN_ErrSinkEndExitIfErrorF(error, result.os_error_code, "OS failed to execute the requested command returning the error code %u", result.os_error_code); @@ -12414,7 +12420,7 @@ static void DN_OS_ThreadExecute_(void *user_context) DN_OS_SemaphoreWait(&thread->thread_exec_wait_for_thread_id_sem, DN_OS_SEMAPHORE_INFINITE_TIMEOUT); // NOTE: Setup thread context (TLS) _after_ thread ID is setup. - DN_TCInitFromHeap(&thread->context, thread->thread_id, thread->tc_init_args, DN_OS_HeapInitDefault()); + DN_TcInitFromHeap(&thread->context, thread->thread_id, thread->tc_init_args, DN_OS_HeapInitDefault()); // NOTE: Once all initialisation is done, if the thread is to be detached, make a copy of the // thread pointer because the caller is not guaranteeing to keep the thread pointer alive (they @@ -12427,9 +12433,9 @@ static void DN_OS_ThreadExecute_(void *user_context) // NOTE: Equip the pointers into TLS only _after_ the thread context is copied (if it was // detached) to avoid potential dangling ref in the TLS. - DN_TCEquip(&thread->context); + DN_TcEquip(&thread->context); if (thread->is_lane_set) { - DN_OS_TCThreadLaneEquip(thread->lane); + DN_OS_TcThreadLaneEquip(thread->lane); DN_OS_ThreadSetNameFmt("L%02zu/%02zu T%zu", thread->lane.index, thread->lane.count, thread->thread_id); } else { DN_OS_ThreadSetNameFmt("T%zu", thread->lane.index, thread->lane.count, thread->thread_id); @@ -12451,7 +12457,7 @@ static void DN_OS_ThreadExecute_(void *user_context) // up ourselves. DN_OS_SemaphoreDeinit(&thread->join_done_sem); #endif - DN_TCDeinit(&thread->context, DN_TCDeinitArenas_Yes); + DN_TcDeinit(&thread->context, DN_TcDeinitArenas_Yes); } else { #if !defined(DN_PLATFORM_WIN32) DN_OS_SemaphoreIncrement(&thread->join_done_sem, 1); // NOTE: Signal for DN_OS_ThreadJoin waits on this. @@ -12505,7 +12511,7 @@ static void DN_OS_ThreadPostInit_(DN_OSThread *thread, bool result) DN_API DN_OSThreadInitArgs DN_OS_ThreadInitArgsDefault() { DN_OSThreadInitArgs result = {}; - result.tc_args = DN_TCInitArgsDefault(); + result.tc_args = DN_TcInitArgsDefault(); return result; } @@ -12517,7 +12523,7 @@ DN_API bool DN_OS_ThreadInit(DN_OSThread *thread, DN_OSThreadFunc *func, DN_OSTh DN_API void DN_OS_ThreadSetNameFmt(char const *fmt, ...) { - DN_TCCore *tls = DN_TCGet(); + DN_TcCore *tls = DN_TcGet(); va_list args; va_start(args, fmt); tls->name = DN_Str8x64FromFmtV(fmt, args); @@ -12617,29 +12623,29 @@ DN_API void DN_OS_ThreadLanewayDispatch(DN_OSThreadLaneway *laneway, DN_OSThread } } -DN_API void DN_OS_ThreadLanewayJoin(DN_OSThreadLaneway *laneway, DN_U32 timeout_ms, DN_TCDeinitArenas deinit_arenas) +DN_API void DN_OS_ThreadLanewayJoin(DN_OSThreadLaneway *laneway, DN_U32 timeout_ms, DN_TcDeinitArenas deinit_arenas) { for (DN_ForItSize(it, DN_OSThread, laneway->threads, laneway->threads_count)) DN_OS_ThreadJoin(it.data, timeout_ms, deinit_arenas); DN_OS_BarrierDeinit(&laneway->barrier); } -DN_API DN_OSThreadLane *DN_OS_TCThreadLane() +DN_API DN_OSThreadLane *DN_OS_TcThreadLane() { - DN_TCCore *tc = DN_TCGet(); + DN_TcCore *tc = DN_TcGet(); DN_OSThreadLane *result = tc ? DN_Cast(DN_OSThreadLane *) tc->lane_opaque : nullptr; return result; } -DN_API void DN_OS_TCThreadLaneSync(void **ptr_to_share) +DN_API void DN_OS_TcThreadLaneSync(void **ptr_to_share) { - DN_OSThreadLane *lane = DN_OS_TCThreadLane(); + DN_OSThreadLane *lane = DN_OS_TcThreadLane(); DN_OS_ThreadLaneSync(lane, ptr_to_share); } -DN_API DN_OSThreadLane DN_OS_TCThreadLaneEquip(DN_OSThreadLane lane) +DN_API DN_OSThreadLane DN_OS_TcThreadLaneEquip(DN_OSThreadLane lane) { - DN_TCCore *tc = DN_TCGet(); + DN_TcCore *tc = DN_TcGet(); DN_OSThreadLane *curr = DN_Cast(DN_OSThreadLane *) tc->lane_opaque; DN_StaticAssert(sizeof(tc->lane_opaque) >= sizeof(DN_OSThreadLane)); DN_OSThreadLane result = *curr; @@ -12704,7 +12710,7 @@ DN_API void DN_OS_AsyncDeinit(DN_OSAsyncCore *async) DN_AtomicSetValue32(&async->join_threads, true); DN_OS_SemaphoreIncrement(&async->worker_sem, async->thread_count); for (DN_ForItSize(it, DN_OSThread, async->threads, async->thread_count)) - DN_OS_ThreadJoin(it.data, UINT32_MAX, DN_TCDeinitArenas_Yes); + DN_OS_ThreadJoin(it.data, UINT32_MAX, DN_TcDeinitArenas_Yes); } static bool DN_OS_AsyncQueueTask_(DN_OSAsyncCore *async, DN_OSAsyncTask const *task, DN_U64 wait_time_ms) { @@ -12824,10 +12830,10 @@ DN_API void DN_OS_Print(DN_OSPrintDest dest, DN_Str8 string) unsigned long bytes_written = 0; (void)bytes_written; if (print_to_console) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str16 string16 = DN_OS_W32Str8ToStr16(&scratch.arena, string); WriteConsoleW(print_handle, string16.data, DN_Cast(unsigned long) string16.count, &bytes_written, nullptr); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } else { WriteFile(print_handle, string.data, DN_Cast(unsigned long) string.count, &bytes_written, nullptr); } @@ -12856,14 +12862,14 @@ DN_API void DN_OS_PrintStyle(DN_OSPrintDest dest, DN_LogStyle style, DN_Str8 str { if (string.data && string.count) { if (style.colour) { - DN_Str8x32 colour = DN_Str8x32FromANSIColourCodeU8RGB(DN_ANSIColourMode_Fg, style.r, style.g, style.b); + DN_Str8x32 colour = DN_Str8x32FromAnsiColourCodeU8Rgb(DN_AnsiColourMode_Fg, style.r, style.g, style.b); DN_OS_Print(dest, DN_Str8FromStruct(&colour)); } if (style.bold == DN_LogBold_Yes) - DN_OS_Print(dest, DN_Str8Lit(DN_ANSICodeBoldLit)); + DN_OS_Print(dest, DN_Str8Lit(DN_AnsiCodeBoldLit)); DN_OS_Print(dest, string); if (style.colour || style.bold == DN_LogBold_Yes) - DN_OS_Print(dest, DN_Str8Lit(DN_ANSICodeResetLit)); + DN_OS_Print(dest, DN_Str8Lit(DN_AnsiCodeResetLit)); } } @@ -12889,14 +12895,14 @@ DN_API void DN_OS_PrintFVStyle(DN_OSPrintDest dest, DN_LogStyle style, DN_FMT_AT { if (fmt) { if (style.colour) { - DN_Str8x32 colour = DN_Str8x32FromANSIColourCodeU8RGB(DN_ANSIColourMode_Fg, style.r, style.g, style.b); + DN_Str8x32 colour = DN_Str8x32FromAnsiColourCodeU8Rgb(DN_AnsiColourMode_Fg, style.r, style.g, style.b); DN_OS_Print(dest, DN_Str8FromStruct(&colour)); } if (style.bold == DN_LogBold_Yes) - DN_OS_Print(dest, DN_Str8Lit(DN_ANSICodeBoldLit)); + DN_OS_Print(dest, DN_Str8Lit(DN_AnsiCodeBoldLit)); DN_OS_PrintFV(dest, fmt, args); if (style.colour || style.bold == DN_LogBold_Yes) - DN_OS_Print(dest, DN_Str8Lit(DN_ANSICodeResetLit)); + DN_OS_Print(dest, DN_Str8Lit(DN_AnsiCodeResetLit)); } } @@ -12958,10 +12964,10 @@ DN_API DN_StackTrace DN_StackTraceFromAllocator(DN_Allocator allocator, DN_U16 l w32->sym_initialised = true; SymSetOptions(SYMOPT_LOAD_LINES); if (!SymInitialize(result.process, nullptr /*UserSearchPath*/, true /*fInvadeProcess*/)) { - DN_TCScratch scratch = DN_TCScratchBeginAllocator(&allocator, 1); + DN_TcScratch scratch = DN_TcScratchBeginAllocator(&allocator, 1); DN_OSW32Error error = DN_OS_W32LastError(&scratch.arena); DN_LogErrorF("SymInitialize failed, stack trace can not be generated (%lu): %.*s\n", error.code, DN_Str8PrintFmt(error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } } @@ -13048,11 +13054,11 @@ DN_API DN_Str8 DN_Str8FromStackTraceAllocator(DN_Allocator allocator, DN_StackTr if (!trace) return result; - DN_TCScratch scratch = DN_TCScratchBeginAllocator(&allocator, 1); + DN_TcScratch scratch = DN_TcScratchBeginAllocator(&allocator, 1); DN_Str8Builder builder = DN_Str8BuilderFromArena(&scratch.arena); DN_StackTraceAddToStr8Builder_(trace, &builder, skip); result = DN_Str8FromStr8BuilderAllocator(&builder, allocator); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -13062,20 +13068,20 @@ DN_API DN_Str8 DN_Str8FromStackTraceArena(DN_Arena *arena, DN_StackTrace const * if (!trace || !arena) return result; - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_Str8Builder builder = DN_Str8BuilderFromArena(&scratch.arena); DN_StackTraceAddToStr8Builder_(trace, &builder, skip); result = DN_Str8FromStr8BuilderArena(&builder, arena); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } DN_API DN_Str8 DN_Str8FromStackTraceNowAllocator(DN_Allocator allocator, DN_U16 limit, DN_U16 skip) { - DN_TCScratch scratch = DN_TCScratchBeginArena(DN_Cast(DN_Arena **) & allocator.context, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(DN_Cast(DN_Arena **) & allocator.context, 1); DN_StackTrace walk = DN_StackTraceFromArena(&scratch.arena, limit); DN_Str8 result = DN_Str8FromStackTraceAllocator(allocator, &walk, skip); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -13102,7 +13108,7 @@ DN_API DN_StackTraceFrameSlice DN_StackTraceGetFrames(DN_Arena *arena, DN_U16 li if (!arena) return result; - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_StackTrace walk = DN_StackTraceFromArena(&scratch.arena, limit); if (walk.size) { if (DN_ISliceAllocArena(&result, walk.size, DN_ZMem_No, arena)) { @@ -13111,7 +13117,7 @@ DN_API DN_StackTraceFrameSlice DN_StackTraceGetFrames(DN_Arena *arena, DN_U16 li result.data[slice_index++] = DN_StackTraceRawFrameToFrame(arena, it.raw_frame); } } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -13164,13 +13170,13 @@ DN_API DN_StackTraceFrame DN_StackTraceRawFrameToFrame(DN_Arena *arena, DN_Stack DN_API void DN_StackTracePrint(DN_U16 limit) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_StackTraceFrameSlice stack_trace = DN_StackTraceGetFrames(&scratch.arena, limit); for (DN_ForItSize(it, DN_StackTraceFrame, stack_trace.data, stack_trace.count)) { DN_StackTraceFrame frame = *it.data; DN_OS_PrintErrLnF("%.*s(%I64u): %.*s", DN_Str8PrintFmt(frame.file_name), frame.line_number, DN_Str8PrintFmt(frame.function_name)); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } DN_API void DN_StackTraceReloadSymbols() @@ -13413,7 +13419,7 @@ DN_API bool DN_OS_SetEnvVar(DN_Str8 name, DN_Str8 value) DN_API DN_OSDiskSpace DN_OS_DiskSpace(DN_Str8 path) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_OSDiskSpace result = {}; DN_Str8 path_z_terminated = DN_Str8FromStr8Arena(path, &scratch.arena); struct statvfs info = {}; @@ -13422,11 +13428,11 @@ DN_API DN_OSDiskSpace DN_OS_DiskSpace(DN_Str8 path) result.avail = info.f_bavail * info.f_frsize; result.size = info.f_blocks * info.f_frsize; } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } -DN_API DN_Str8 DN_OS_EXEPath(DN_Arena *arena) +DN_API DN_Str8 DN_OS_ExePath(DN_Arena *arena) { DN_Str8 result = {}; if (!arena) @@ -13572,7 +13578,7 @@ DN_API bool DN_OS_FileCopy(DN_Str8 src, DN_Str8 dest, bool overwrite, DN_ErrSink result = (bytes_written == stat_existing.st_size); if (!result) { int error_code = errno; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str8 file_size_str8 = DN_Str8FromByteCount(scratch.arena, stat_existing.st_size, DN_ByteCountType_Auto); DN_Str8 bytes_written_str8 = DN_Str8FromByteCount(scratch.arena, bytes_written, DN_ByteCountType_Auto); DN_rrSinkAppendF(error, @@ -13585,7 +13591,7 @@ DN_API bool DN_OS_FileCopy(DN_Str8 src, DN_Str8 dest, bool overwrite, DN_ErrSink DN_Str8PrintFmt(file_size_str8), error_code, strerror(error_code)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } #endif @@ -13698,10 +13704,10 @@ DN_API DN_OSFileRead DN_OS_FileRead(DN_OSFile *file, void *buffer, DN_USize size result.bytes_read = fread(buffer, 1, size, DN_Cast(FILE *) file->handle); if (feof(DN_Cast(FILE*)file->handle)) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str8x32 buffer_size_str8 = DN_Str8x32FromByteCountU64Auto(size); DN_ErrSinkAppendF(err, 1, "Failed to read %S from file", buffer_size_str8); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -13717,10 +13723,10 @@ DN_API bool DN_OS_FileWritePtr(DN_OSFile *file, void const *buffer, DN_USize siz fwrite(buffer, DN_Cast(DN_USize) size, 1 /*count*/, DN_Cast(FILE *) file->handle) == 1 /*count*/; if (!result) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str8x32 buffer_size_str8 = DN_Str8x32FromByteCountU64Auto(size); DN_ErrSinkAppendF(err, 1, "Failed to write buffer (%s) to file handle", DN_Str8PrintFmt(buffer_size_str8)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } return result; } @@ -13808,7 +13814,7 @@ DN_API bool DN_OS_PathIsDir(DN_Str8 path) DN_API bool DN_OS_PathMakeDir(DN_Str8 path) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); bool result = true; // TODO(doyle): Implement this without using the path indexes, it's not @@ -13835,7 +13841,7 @@ DN_API bool DN_OS_PathMakeDir(DN_Str8 path) // NOTE: There's something that exists in at this path, but // it's not a directory. This request to make a directory is // invalid. - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return false; } else if (DN_OS_PathIsDir(copy)) { // NOTE: We found a directory, we can stop here and start @@ -13860,7 +13866,7 @@ DN_API bool DN_OS_PathMakeDir(DN_Str8 path) if (index != 0) copy.data[path_index] = temp; } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -13974,7 +13980,7 @@ DN_API DN_OSExecResult DN_OS_ExecWait(DN_OSExecAsyncHandle handle, // NOTE: Read the data from the read end of the pipe if (result.os_error_code == 0) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); if (arena && handle.stdout_read) { char buffer[4096]; DN_Str8Builder builder = DN_Str8BuilderFromArena(&scratch.arena); @@ -14002,7 +14008,7 @@ DN_API DN_OSExecResult DN_OS_ExecWait(DN_OSExecAsyncHandle handle, result.stderr_text = DN_Str8FromStr8BuilderArena(&builder, arena); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } close(stdout_pipe[DN_OSPipeType__Read]); @@ -14011,25 +14017,25 @@ DN_API DN_OSExecResult DN_OS_ExecWait(DN_OSExecAsyncHandle handle, } DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, - DN_OSExecArgs *args, + DN_OSExecArgs args, DN_ErrSink *error) { #if defined(DN_PLATFORM_EMSCRIPTEN) DN_AssertInvalidCodePathF("Unsupported operation"); #endif - DN_VerifyWarningF(args->environment.count == 0, "Environment variables are unimplemented in POSIX"); + DN_VerifyWarningF(args.environment.count == 0, "Environment variables are unimplemented in POSIX"); DN_OSExecAsyncHandle result = {}; if (cmd_line.count == 0) return result; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); - DN_DEFER { DN_TCScratchEnd(&scratch); }; + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); + DN_DEFER { DN_TcScratchEnd(&scratch); }; DN_Str8 cmd_rendered = DN_Str8SliceRender(cmd_line, DN_Str8Lit(" "), &scratch.arena); int stdout_pipe[DN_OSPipeType__Count] = {}; int stderr_pipe[DN_OSPipeType__Count] = {}; // NOTE: Open stdout pipe - if (DN_BitIsSet(args->flags, DN_OSExecFlags_SaveStdout)) { + if (DN_BitIsSet(args.flags, DN_OSExecFlags_SaveStdout)) { if (pipe(stdout_pipe) == -1) { result.os_error_code = errno; DN_ErrSinkAppendF( @@ -14053,8 +14059,8 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, }; // NOTE: Open stderr pipe ////////////////////////////////////////////////////////////////////// - if (DN_BitIsSet(args->flags, DN_OSExecFlags_SaveStderr)) { - if (DN_BitIsSet(args->flags, DN_OSExecFlags_MergeStderrToStdout)) { + if (DN_BitIsSet(args.flags, DN_OSExecFlags_SaveStderr)) { + if (DN_BitIsSet(args.flags, DN_OSExecFlags_MergeStderrToStdout)) { stderr_pipe[DN_OSPipeType__Read] = stdout_pipe[DN_OSPipeType__Read]; stderr_pipe[DN_OSPipeType__Write] = stdout_pipe[DN_OSPipeType__Write]; } else if (pipe(stderr_pipe) == -1) { @@ -14092,7 +14098,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, } if (child_pid == 0) { // Child process - if (DN_BitIsSet(args->flags, DN_OSExecFlags_SaveStdout) && + if (DN_BitIsSet(args.flags, DN_OSExecFlags_SaveStdout) && (dup2(stdout_pipe[DN_OSPipeType__Write], STDOUT_FILENO) == -1)) { result.os_error_code = errno; DN_ErrSinkAppendF( @@ -14104,7 +14110,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, return result; } - if (DN_BitIsSet(args->flags, DN_OSExecFlags_SaveStderr) && + if (DN_BitIsSet(args.flags, DN_OSExecFlags_SaveStderr) && (dup2(stderr_pipe[DN_OSPipeType__Write], STDERR_FILENO) == -1)) { result.os_error_code = errno; DN_ErrSinkAppendF( @@ -14147,9 +14153,9 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, free(prev_working_dir); }; - if (args->working_dir.count) { + if (args.working_dir.count) { prev_working_dir = get_current_dir_name(); - DN_Str8 working_dir = DN_Str8FromStr8Arena(args->working_dir, &scratch.arena); + DN_Str8 working_dir = DN_Str8FromStr8Arena(args.working_dir, &scratch.arena); if (chdir(working_dir.data) == -1) { result.os_error_code = errno; DN_ErrSinkAppendF( @@ -14184,7 +14190,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, &stdout_pipe[DN_OSPipeType__Write], sizeof(stdout_pipe[DN_OSPipeType__Write])); - if (DN_BitIsSet(args->flags, DN_OSExecFlags_SaveStderr) && DN_BitIsNotSet(args->flags, DN_OSExecFlags_MergeStderrToStdout)) { + if (DN_BitIsSet(args.flags, DN_OSExecFlags_SaveStderr) && DN_BitIsNotSet(args.flags, DN_OSExecFlags_MergeStderrToStdout)) { DN_Memcpy(&result.stderr_read, &stderr_pipe[DN_OSPipeType__Read], sizeof(stderr_pipe[DN_OSPipeType__Read])); @@ -14192,7 +14198,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, &stderr_pipe[DN_OSPipeType__Write], sizeof(stderr_pipe[DN_OSPipeType__Write])); } - result.exec_flags = args->flags; + result.exec_flags = args.flags; DN_Memcpy(&result.process, &child_pid, sizeof(child_pid)); return result; } @@ -14202,7 +14208,7 @@ DN_API DN_OSExecResult DN_OS_ExecPump(DN_OSExecAsyncHandle handle, size_t *stdout_size, char *stderr_buffer, size_t *stderr_size, - DN_U32 timeout_ms, + DN_U32 timeout_ms, DN_ErrSink *err) { DN_AssertInvalidCodePath; @@ -14507,7 +14513,7 @@ DN_API bool DN_OS_ThreadInitLane(DN_OSThread *thread, DN_OSThreadFunc *func, DN_ return result; } -DN_API bool DN_OS_ThreadJoin(DN_OSThread *thread, DN_U32 timeout_ms, DN_TCDeinitArenas deinit_arenas) +DN_API bool DN_OS_ThreadJoin(DN_OSThread *thread, DN_U32 timeout_ms, DN_TcDeinitArenas deinit_arenas) { bool result = true; if (thread && thread->handle) { @@ -14522,7 +14528,7 @@ DN_API bool DN_OS_ThreadJoin(DN_OSThread *thread, DN_U32 timeout_ms, DN_TCDeinit pthread_join(thread_id, &return_val); thread->handle = {}; thread->thread_id = {}; - DN_TCDeinit(&thread->context, deinit_arenas); + DN_TcDeinit(&thread->context, deinit_arenas); DN_OS_SemaphoreDeinit(&thread->join_done_sem); } else { result = false; @@ -14556,11 +14562,11 @@ DN_API void DN_OS_PosixThreadSetName(DN_Str8 name) #if defined(DN_PLATFORM_EMSCRIPTEN) (void)name; #else - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str8 copy = DN_Str8FromStr8Arena(name, &scratch.arena); pthread_t thread = pthread_self(); pthread_setname_np(thread, (char *)copy.data); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); #endif } @@ -14580,7 +14586,7 @@ DN_API DN_OSPosixProcSelfStatus DN_OS_PosixProcSelfStatus() DN_OSFile file = DN_OS_FileOpen(DN_Str8Lit("/proc/self/status"), DN_OSFileOpen_OpenIfExist, DN_OSFileAccess_Read, nullptr); if (!file.error) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); char buf[256]; DN_Str8Builder builder = DN_Str8BuilderFromArena(&scratch.arena); for (;;) { @@ -14624,7 +14630,7 @@ DN_API DN_OSPosixProcSelfStatus DN_OS_PosixProcSelfStatus() DN_Assert(to_u64.success); } } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } DN_OS_FileClose(&file); return result; @@ -14843,7 +14849,7 @@ DN_API void DN_OS_GenBytesSecure(void *buffer, DN_U32 size) DN_API DN_OSDiskSpace DN_OS_DiskSpace(DN_Str8 path) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_OSDiskSpace result = {}; DN_Str16 path16 = DN_OS_W32Str8ToStr16(&scratch.arena, path); @@ -14854,36 +14860,36 @@ DN_API DN_OSDiskSpace DN_OS_DiskSpace(DN_Str8 path) &free_bytes_avail_to_caller, &total_number_of_bytes, &total_number_of_free_bytes)) { - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } result.success = true; result.avail = free_bytes_avail_to_caller.QuadPart; result.size = total_number_of_bytes.QuadPart; - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } DN_API bool DN_OS_SetEnvVar(DN_Str8 name, DN_Str8 value) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str16 name16 = DN_OS_W32Str8ToStr16(&scratch.arena, name); DN_Str16 value16 = DN_OS_W32Str8ToStr16(&scratch.arena, value); bool result = SetEnvironmentVariableW(name16.data, value16.data) != 0; - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } -DN_API DN_Str8 DN_OS_EXEPath(DN_Arena *arena) +DN_API DN_Str8 DN_OS_ExePath(DN_Arena *arena) { DN_Str8 result = {}; if (!arena) return result; - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_Str16 exe_dir16 = DN_OS_W32EXEPathW(&scratch.arena); result = DN_OS_W32Str16ToStr8(arena, exe_dir16); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -14920,7 +14926,7 @@ static DN_U64 DN_OS_W32FileTimeToSeconds_(FILETIME const *time) DN_API bool DN_OS_FileCopy(DN_Str8 src, DN_Str8 dest, bool overwrite, DN_ErrSink *err) { bool result = false; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str16 src16 = DN_OS_W32Str8ToStr16(&scratch.arena, src); DN_Str16 dest16 = DN_OS_W32Str8ToStr16(&scratch.arena, dest); @@ -14937,14 +14943,14 @@ DN_API bool DN_OS_FileCopy(DN_Str8 src, DN_Str8 dest, bool overwrite, DN_ErrSink win_error.code, DN_Str8PrintFmt(win_error.msg)); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } DN_API bool DN_OS_FileMove(DN_Str8 src, DN_Str8 dest, bool overwrite, DN_ErrSink *err) { bool result = false; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str16 src16 = DN_OS_W32Str8ToStr16(&scratch.arena, src); DN_Str16 dest16 = DN_OS_W32Str8ToStr16(&scratch.arena, dest); @@ -14963,7 +14969,7 @@ DN_API bool DN_OS_FileMove(DN_Str8 src, DN_Str8 dest, bool overwrite, DN_ErrSink win_error.code, DN_Str8PrintFmt(win_error.msg)); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -15000,7 +15006,7 @@ DN_API DN_OSFile DN_OS_FileOpen(DN_Str8 path, DN_OSFileOpen open_mode, DN_OSFile access_mode |= GENERIC_EXECUTE; } - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str16 path16 = DN_OS_W32Str8ToStr16(&scratch.arena, path); void *handle = CreateFileW(/*LPCWSTR lpFileName*/ path16.data, /*DWORD dwDesiredAccess*/ access_mode, @@ -15014,12 +15020,12 @@ DN_API DN_OSFile DN_OS_FileOpen(DN_Str8 path, DN_OSFileOpen open_mode, DN_OSFile DN_OSW32Error win_error = DN_OS_W32LastError(&scratch.arena); result.error = true; DN_ErrSinkAppendF(err, win_error.code, "Failed to open file at '%.*s': '%.*s'", DN_Str8PrintFmt(path), DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } result.handle = handle; - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -15042,15 +15048,15 @@ DN_API DN_OSFileRead DN_OS_FileRead(DN_OSFile *file, void *buffer, DN_USize size /*LPDWORD lpNumberOfByesRead*/ &bytes_read, /*LPOVERLAPPED lpOverlapped*/ nullptr); if (read_result == 0) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_OSW32Error win_error = DN_OS_W32LastError(&scratch.arena); DN_ErrSinkAppendF(err, win_error.code, "Failed to read data from file: (%u) %.*s", win_error.code, DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } if (bytes_read != size) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_OSW32Error win_error = DN_OS_W32LastError(&scratch.arena); DN_ErrSinkAppendF( err, @@ -15060,7 +15066,7 @@ DN_API DN_OSFileRead DN_OS_FileRead(DN_OSFile *file, void *buffer, DN_USize size DN_Cast(unsigned long) size, win_error.code, DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -15084,11 +15090,11 @@ DN_API bool DN_OS_FileWritePtr(DN_OSFile *file, void const *buffer, DN_USize siz } if (!result) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_OSW32Error win_error = DN_OS_W32LastError(&scratch.arena); DN_Str8x32 buffer_size_str8 = DN_Str8x32FromByteCountU64Auto(size); DN_ErrSinkAppendF(err, win_error.code, "Failed to write buffer (%.*s) to file handle: %.*s", DN_Str8PrintFmt(buffer_size_str8), DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } return result; } @@ -15100,10 +15106,10 @@ DN_API bool DN_OS_FileFlush(DN_OSFile *file, DN_ErrSink *err) BOOL result = FlushFileBuffers(DN_Cast(HANDLE) file->handle); if (!result) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_OSW32Error win_error = DN_OS_W32LastError(&scratch.arena); DN_ErrSinkAppendF(err, win_error.code, "Failed to flush file buffer to disk: %.*s", DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } return DN_Cast(bool) result; @@ -15123,12 +15129,12 @@ DN_API DN_OSPathInfo DN_OS_PathInfo(DN_Str8 path) if (path.count == 0) return result; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str16 path16 = DN_OS_W32Str8ToStr16(&scratch.arena, path); WIN32_FILE_ATTRIBUTE_DATA attrib_data = {}; if (!GetFileAttributesExW(path16.data, GetFileExInfoStandard, &attrib_data)) { - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -15149,7 +15155,7 @@ DN_API DN_OSPathInfo DN_OS_PathInfo(DN_Str8 path) result.type = DN_OSPathInfoType_File; } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -15159,14 +15165,14 @@ DN_API bool DN_OS_PathDelete(DN_Str8 path) if (path.count == 0) return result; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str16 path16 = DN_OS_W32Str8ToStr16(&scratch.arena, path); if (path16.count) { result = DeleteFileW(path16.data); if (!result) result = RemoveDirectoryW(path16.data); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -15176,7 +15182,7 @@ DN_API bool DN_OS_PathIsFile(DN_Str8 path) if (path.count == 0) return result; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str16 path16 = DN_OS_W32Str8ToStr16(&scratch.arena, path); if (path16.count) { WIN32_FILE_ATTRIBUTE_DATA attrib_data = {}; @@ -15184,7 +15190,7 @@ DN_API bool DN_OS_PathIsFile(DN_Str8 path) result = (attrib_data.dwFileAttributes != INVALID_FILE_ATTRIBUTES) && !(attrib_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -15194,7 +15200,7 @@ DN_API bool DN_OS_PathIsDir(DN_Str8 path) if (path.count == 0) return result; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str16 path16 = DN_OS_W32Str8ToStr16(&scratch.arena, path); if (path16.count) { WIN32_FILE_ATTRIBUTE_DATA attrib_data = {}; @@ -15203,14 +15209,14 @@ DN_API bool DN_OS_PathIsDir(DN_Str8 path) (attrib_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } DN_API bool DN_OS_PathMakeDir(DN_Str8 path) { bool result = true; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str16 path16 = DN_OS_W32Str8ToStr16(&scratch.arena, path); // NOTE: Go back from the end of the string to all the directories in the @@ -15243,7 +15249,7 @@ DN_API bool DN_OS_PathMakeDir(DN_Str8 path) // NOTE: There's some kind of file that exists at the path // but it's not a directory. This request to make a // directory is invalid. - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return false; } } else { @@ -15256,7 +15262,7 @@ DN_API bool DN_OS_PathMakeDir(DN_Str8 path) path16.data[index] = temp; // Undo null termination } } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -15265,7 +15271,7 @@ DN_API bool DN_OS_PathIterateDir(DN_Str8 path, DN_OSDirIterator *it) if (path.count == 0 || !it || path.count <= 0) return false; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_OSW32FolderIteratorW wide_it = {}; DN_Str16 path16 = {}; if (it->handle) { @@ -15289,7 +15295,7 @@ DN_API bool DN_OS_PathIterateDir(DN_Str8 path, DN_OSDirIterator *it) path16 = DN_OS_W32Str8ToStr16(&scratch.arena, adjusted_path); if (path16.count <= 0) { // Conversion error - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return false; } } @@ -15301,7 +15307,7 @@ DN_API bool DN_OS_PathIterateDir(DN_Str8 path, DN_OSDirIterator *it) it->file_name = DN_Str8FromPtr(it->buffer, size); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -15345,9 +15351,9 @@ DN_API DN_OSExecResult DN_OS_ExecPump(DN_OSExecAsyncHandle handle, return result; } - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); - DWORD stdout_bytes_available = 0; - DWORD stderr_bytes_available = 0; + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); + DWORD stdout_bytes_available = 0; + DWORD stderr_bytes_available = 0; PeekNamedPipe(handle.stdout_read, nullptr, 0, nullptr, &stdout_bytes_available, nullptr); PeekNamedPipe(handle.stderr_read, nullptr, 0, nullptr, &stderr_bytes_available, nullptr); @@ -15359,9 +15365,11 @@ DN_API DN_OSExecResult DN_OS_ExecPump(DN_OSExecAsyncHandle handle, DN_OSW32Error win_error = DN_OS_W32LastError(&scratch.arena); result.os_error_code = win_error.code; DN_ErrSinkAppendF(err, result.os_error_code, "Executed command failed to terminate: %.*s", DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; - } else if (exec_result == WAIT_TIMEOUT || exec_result == WAIT_OBJECT_0) { + } + + if (exec_result == WAIT_TIMEOUT || exec_result == WAIT_OBJECT_0) { // NOTE: Read stdout from process // If the pipes are full, the process will block. We periodically // flush the pipes to make sure this doesn't happen @@ -15429,7 +15437,7 @@ DN_API DN_OSExecResult DN_OS_ExecPump(DN_OSExecAsyncHandle handle, result.stdout_text = DN_Str8FromPtr(stdout_buffer, stdout_size ? *stdout_size : 0); result.stderr_text = DN_Str8FromPtr(stderr_buffer, stderr_size ? *stderr_size : 0); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -15451,7 +15459,7 @@ DN_API DN_OSExecResult DN_OS_ExecWait(DN_OSExecAsyncHandle handle, DN_Arena *are return result; } - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_Str8Builder stdout_builder = {}; DN_Str8Builder stderr_builder = {}; if (arena) { @@ -15476,11 +15484,11 @@ DN_API DN_OSExecResult DN_OS_ExecWait(DN_OSExecAsyncHandle handle, DN_Arena *are // NOTE: Get stdout/stderr. If no arena is passed this is a no-op result.stdout_text = DN_Str8FromStr8BuilderArena(&stdout_builder, arena); result.stderr_text = DN_Str8FromStr8BuilderArena(&stderr_builder, arena); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } -DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs *args, DN_ErrSink *err) +DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs args, DN_ErrSink *err) { // NOTE: Pre-amble DN_OSExecAsyncHandle result = {}; @@ -15489,7 +15497,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs // NOTE: Render the command line into single string to pass into the Win32 API. We'll quote the // string on behalf of the user if there's whitespace in the string - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str8 cmd = {}; { DN_USize count_req = 0; @@ -15533,9 +15541,9 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs DN_AssertF(cmd.count < DN_Kilobytes(32), "Command exceeds the allowable size in Win32"); DN_Str16 cmd16 = DN_OS_W32Str8ToStr16(&scratch.arena, cmd); - DN_Str16 working_dir16 = DN_OS_W32Str8ToStr16(&scratch.arena, args->working_dir); + DN_Str16 working_dir16 = DN_OS_W32Str8ToStr16(&scratch.arena, args.working_dir); DN_Str8Builder env_builder = DN_Str8BuilderFromArena(&scratch.arena); - DN_Str8BuilderAppendArrayRef(&env_builder, args->environment.data, args->environment.count); + DN_Str8BuilderAppendArrayRef(&env_builder, args.environment.data, args.environment.count); if (env_builder.string_size) DN_Str8BuilderAppendRef(&env_builder, DN_Str8Lit("\0")); @@ -15560,7 +15568,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs } }; - if (DN_BitIsSet(args->flags, DN_OSExecFlags_SaveStdout)) { + if (DN_BitIsSet(args.flags, DN_OSExecFlags_SaveStdout)) { if (!CreatePipe(&stdout_read, &stdout_write, &save_std_security_attribs, /*nSize*/ 0)) { DN_OSW32Error win_error = DN_OS_W32LastError(&scratch.arena); result.os_error_code = win_error.code; @@ -15570,7 +15578,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs "Failed to create stdout pipe to redirect the output of the command '%.*s': %.*s", DN_Str8PrintFmt(cmd), DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -15583,7 +15591,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs "execute command '%.*s': %.*s", DN_Str8PrintFmt(cmd), DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } } @@ -15599,8 +15607,8 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs } }; - if (DN_BitIsSet(args->flags, DN_OSExecFlags_SaveStderr)) { - if (DN_BitIsSet(args->flags, DN_OSExecFlags_MergeStderrToStdout)) { + if (DN_BitIsSet(args.flags, DN_OSExecFlags_SaveStderr)) { + if (DN_BitIsSet(args.flags, DN_OSExecFlags_MergeStderrToStdout)) { stderr_read = stdout_read; stderr_write = stdout_write; } else { @@ -15613,7 +15621,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs "Failed to create stderr pipe to redirect the output of the command '%.*s': %.*s", DN_Str8PrintFmt(cmd), DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -15626,7 +15634,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs "execute command '%.*s': %.*s", DN_Str8PrintFmt(cmd), DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } } @@ -15654,7 +15662,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs DN_OSW32Error win_error = DN_OS_W32LastError(&scratch.arena); result.os_error_code = win_error.code; DN_ErrSinkAppendF(err, result.os_error_code, "Failed to execute command '%.*s': %.*s", DN_Str8PrintFmt(cmd), DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -15663,12 +15671,12 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs result.process = proc_info.hProcess; result.stdout_read = stdout_read; result.stdout_write = stdout_write; - if (DN_BitIsSet(args->flags, DN_OSExecFlags_SaveStderr) && DN_BitIsNotSet(args->flags, DN_OSExecFlags_MergeStderrToStdout)) { + if (DN_BitIsSet(args.flags, DN_OSExecFlags_SaveStderr) && DN_BitIsNotSet(args.flags, DN_OSExecFlags_MergeStderrToStdout)) { result.stderr_read = stderr_read; result.stderr_write = stderr_write; } - result.exec_flags = args->flags; - DN_TCScratchEnd(&scratch); + result.exec_flags = args.flags; + DN_TcScratchEnd(&scratch); return result; } @@ -15940,7 +15948,7 @@ DN_API bool DN_OS_ThreadInitLane(DN_OSThread *thread, DN_OSThreadFunc *func, DN_ return result; } -DN_API bool DN_OS_ThreadJoin(DN_OSThread *thread, DN_U32 timeout_ms, DN_TCDeinitArenas deinit_arenas) +DN_API bool DN_OS_ThreadJoin(DN_OSThread *thread, DN_U32 timeout_ms, DN_TcDeinitArenas deinit_arenas) { bool result = true; if (thread && thread->handle && thread->handle != INVALID_HANDLE_VALUE) { @@ -15951,7 +15959,7 @@ DN_API bool DN_OS_ThreadJoin(DN_OSThread *thread, DN_U32 timeout_ms, DN_TCDeinit CloseHandle(thread->handle); thread->handle = INVALID_HANDLE_VALUE; thread->thread_id = {}; - DN_TCDeinit(&thread->context, deinit_arenas); + DN_TcDeinit(&thread->context, deinit_arenas); } else { result = false; } @@ -15972,7 +15980,7 @@ DN_API void DN_OS_W32ThreadSetName(DN_Str8 name) // // See: https://learn.microsoft.com/en-us/windows/w32/api/processthreadsapi/nf-processthreadsapi-setthreaddescription DN_OSW32Core *w32 = DN_OS_W32GetCore(); - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); if (w32->set_thread_description) { DN_Str16 name16 = DN_OS_W32Str8ToStr16(&scratch.arena, name); w32->set_thread_description(GetCurrentThread(), (WCHAR *)name16.data); @@ -16004,7 +16012,7 @@ DN_API void DN_OS_W32ThreadSetName(DN_Str8 name) } DN_MSVC_WARNING_POP } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } DN_API DN_Str16 DN_OS_W32ErrorCodeToMsg16Alloc(DN_U32 error_code) @@ -16215,7 +16223,7 @@ DN_API DN_Str8 DN_OS_W32Str16ToStr8FromHeap(DN_Str16 src) // NOTE: Windows Executable Directory ////////////////////////////////////////// DN_API DN_Str16 DN_OS_W32EXEPathW(DN_Arena *arena) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_Str16 result = {}; DN_USize module_size = 0; wchar_t *module_path = nullptr; @@ -16223,7 +16231,7 @@ DN_API DN_Str16 DN_OS_W32EXEPathW(DN_Arena *arena) module_size += 256; module_path = DN_ArenaNewArray(&scratch.arena, wchar_t, module_size, DN_ZMem_No); if (!module_path) { - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } module_size = DN_Cast(DN_USize) GetModuleFileNameW(nullptr /*module*/, module_path, DN_Cast(int) module_size); @@ -16237,14 +16245,14 @@ DN_API DN_Str16 DN_OS_W32EXEPathW(DN_Arena *arena) result.count = module_size; DN_Memcpy(result.data, module_path, sizeof(wchar_t) * result.count); result.data[result.count] = 0; - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } -DN_API DN_Str16 DN_OS_W32EXEDirW(DN_Arena *arena) +DN_API DN_Str16 DN_OS_W32ExeDirW(DN_Arena *arena) { // TODO(doyle): Implement a DN_Str16_BinarySearchReverse - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_Str16 result = {}; DN_USize module_size = 0; wchar_t *module_path = nullptr; @@ -16252,7 +16260,7 @@ DN_API DN_Str16 DN_OS_W32EXEDirW(DN_Arena *arena) module_size += 256; module_path = DN_ArenaNewArray(&scratch.arena, wchar_t, module_size, DN_ZMem_No); if (!module_path) { - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } module_size = DN_Cast(DN_USize) GetModuleFileNameW(nullptr /*module*/, module_path, DN_Cast(int) module_size); @@ -16266,17 +16274,17 @@ DN_API DN_Str16 DN_OS_W32EXEDirW(DN_Arena *arena) result.count = index_of_last_slash; DN_Memcpy(result.data, module_path, sizeof(wchar_t) * result.count); result.data[result.count] = 0; - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } DN_API DN_Str8 DN_OS_W32WorkingDir(DN_Arena *arena, DN_Str8 suffix) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_Str16 suffix16 = DN_OS_W32Str8ToStr16(&scratch.arena, suffix); DN_Str16 dir16 = DN_OS_W32WorkingDirW(&scratch.arena, suffix16); DN_Str8 result = DN_OS_W32Str16ToStr8(arena, dir16); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -16286,26 +16294,26 @@ DN_API DN_Str16 DN_OS_W32WorkingDirW(DN_Arena *arena, DN_Str16 suffix) DN_Str16 result = {}; // NOTE: required_size is the size required *including* the null-terminator - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); unsigned long required_size = GetCurrentDirectoryW(0, nullptr); unsigned long desired_size = required_size + DN_Cast(unsigned long) suffix.count; wchar_t *scratch_w_path = DN_ArenaNewArray(&scratch.arena, wchar_t, desired_size, DN_ZMem_No); if (!scratch_w_path) { - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } unsigned long bytes_written_wo_null_terminator = GetCurrentDirectoryW(desired_size, scratch_w_path); if ((bytes_written_wo_null_terminator + 1) != required_size) { // TODO(dn): Error - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } wchar_t *w_path = DN_ArenaNewArray(arena, wchar_t, desired_size, DN_ZMem_No); if (!w_path) { - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -16316,7 +16324,7 @@ DN_API DN_Str16 DN_OS_W32WorkingDirW(DN_Arena *arena, DN_Str16 suffix) } result = DN_Str16{w_path, DN_Cast(DN_USize)(desired_size - 1)}; - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -16425,7 +16433,7 @@ bool DN_NET_ResponseIsReady(DN_NETResponse const* resp) DN_Str8 DN_NET_Str8DiagnosticFromResponse(DN_NETResponse const* resp, DN_Arena *arena) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_Str8Builder builder = DN_Str8BuilderFromArena(&scratch.arena); DN_Str8BuilderAppendF(&builder, "Request (%s", resp->type == DN_NETRequestType_HTTP ? "HTTP" : "WS"); if (resp->type == DN_NETRequestType_HTTP) { @@ -16441,7 +16449,7 @@ DN_Str8 DN_NET_Str8DiagnosticFromResponse(DN_NETResponse const* resp, DN_Arena * DN_Str8BuilderAppendF(&builder, "%s%.*s", resp->body.count ? ". " : "", DN_Str8PrintFmt(resp->error_str8)); } DN_Str8 result = DN_Str8FromStr8BuilderArena(&builder, arena); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -16615,7 +16623,7 @@ static int32_t DN_NET_CurlThreadEntryPoint_(DN_OSThread *thread) DN_OS_ThreadSetNameFmt("%.*s", DN_Str8PrintFmt(curl->thread.name)); while (!curl->kill_thread) { - DN_TCScratch tmem = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch tmem = DN_TcScratchBeginArena(nullptr, 0); // NOTE: Handle events sitting in the ring queue for (bool dequeue_ring = true; dequeue_ring;) { @@ -16772,13 +16780,13 @@ static int32_t DN_NET_CurlThreadEntryPoint_(DN_OSThread *thread) req->response.state = DN_NETResponseState_WSOpen; } } else { - req->response.error_str8 = DN_Str8FromFmtArena(&req->start_response_arena, "Failed to get HTTP response status (CURL %d): %s", msg->data.result, curl_easy_strerror(get_result)); + req->response.error_str8 = DN_Str8FmtArena(&req->start_response_arena, "Failed to get HTTP response status (CURL %d): %s", msg->data.result, curl_easy_strerror(get_result)); req->response.state = DN_NETResponseState_Error; } } else { DN_USize curl_extended_error_size = DN_CStr8Count(curl_req->error); req->response.state = DN_NETResponseState_Error; - req->response.error_str8 = DN_Str8FromFmtArena(&req->start_response_arena, + req->response.error_str8 = DN_Str8FmtArena(&req->start_response_arena, "HTTP request '%.*s' failed (CURL %d): %s%s%s%s", DN_Str8PrintFmt(req->url), msg->data.result, @@ -16901,7 +16909,7 @@ static int32_t DN_NET_CurlThreadEntryPoint_(DN_OSThread *thread) } else if (receive_result != CURLE_OK) { DN_USize curl_extended_error_size = DN_CStr8Count(curl_req->error); req->response.state = DN_NETResponseState_Error; - req->response.error_str8 = DN_Str8FromFmtArena(&req->start_response_arena, + req->response.error_str8 = DN_Str8FmtArena(&req->start_response_arena, "Websocket receive '%.*s' failed (CURL %d): %s%s%s%s", DN_Str8PrintFmt(req->url), receive_result, @@ -16921,7 +16929,7 @@ static int32_t DN_NET_CurlThreadEntryPoint_(DN_OSThread *thread) DN_I32 sleep_time_ms = ws_count > 0 ? 16 : INT32_MAX; curl_multi_poll(curl->thread_curlm, nullptr, 0, sleep_time_ms, nullptr); - DN_TCScratchEnd(&tmem); + DN_TcScratchEnd(&tmem); } return 0; @@ -16965,7 +16973,7 @@ void DN_NET_CurlDeinit(DN_NETCore *net) DN_NETCurlCore *curl = DN_Cast(DN_NETCurlCore *) net->context; curl->kill_thread = true; curl_multi_wakeup(curl->thread_curlm); - DN_OS_ThreadJoin(&curl->thread, UINT32_MAX, DN_TCDeinitArenas_Yes); + DN_OS_ThreadJoin(&curl->thread, UINT32_MAX, DN_TcDeinitArenas_Yes); } static DN_NETRequestHandle DN_NET_CurlDoRequest_(DN_NETCore *net, DN_Str8 url, DN_Str8 method, DN_NETDoHTTPArgs const *args, DN_NETRequestType type) @@ -17380,7 +17388,7 @@ static bool DN_NET_EmcWSOnClose(int eventType, EmscriptenWebSocketCloseEvent con DN_NETCore *net = DN_Cast(DN_NETCore *) req->context[0]; DN_NETEmcWSEvent *net_event = DN_NET_EmcAllocWSEvent_(req); net_event->state = DN_NETResponseState_WSClose; - net_event->payload = DN_Str8FromFmtArena(&req->start_response_arena, + net_event->payload = DN_Str8FmtArena(&req->start_response_arena, "Websocket closed '%.*s': (%u) %s (was %s close)", DN_Str8PrintFmt(req->url), event->code, diff --git a/Single-Header/dn_single_header.h b/Single-Header/dn_single_header.h index 67ea1f7..c3b6087 100644 --- a/Single-Header/dn_single_header.h +++ b/Single-Header/dn_single_header.h @@ -1,4 +1,4 @@ -// Generated by the DN single header generator 2026-07-17 17:54:42 +// Generated by the DN single header generator 2026-07-19 16:12:36 #if !defined(DN_H) #define DN_H @@ -31,7 +31,7 @@ int main(int argc, char **argv) { DN_Core core = {}; - DN_Init(&core, DN_InitFlags_Nil, DN_TCInitArgsDefault()); + DN_Init(&core, DN_InitFlags_Nil, DN_TcInitArgsDefault()); return 0; } */ @@ -726,7 +726,7 @@ typedef DN_I32 DN_B32; #define DN_CountLeadingZerosU64(value) __lzcnt64(value) #define DN_CountLeadingZerosU32(value) __lzcnt(value) - #define DN_CPUGetTSC() __rdtsc() + #define DN_CPUGetTsc() __rdtsc() #define DN_CompilerReadBarrierAndCPUReadFence _ReadBarrier(); _mm_lfence() #define DN_CompilerWriteBarrierAndCPUWriteFence _WriteBarrier(); _mm_sfence() #elif defined(DN_COMPILER_GCC) || defined(DN_COMPILER_CLANG) @@ -751,9 +751,9 @@ typedef DN_I32 DN_B32; #define DN_CountLeadingZerosU32(value) __builtin_clzl(value) #if defined(DN_COMPILER_GCC) - #define DN_CPUGetTSC() __rdtsc() + #define DN_CPUGetTsc() __rdtsc() #else - #define DN_CPUGetTSC() __builtin_readcyclecounter() + #define DN_CPUGetTsc() __builtin_readcyclecounter() #endif #if defined(DN_PLATFORM_EMSCRIPTEN) @@ -886,7 +886,7 @@ struct DN_CPUIDArgs { int eax; int ecx; }; DN_CPU_FEAT_XENTRY(POPCNT) \ DN_CPU_FEAT_XENTRY(RDRAND) \ DN_CPU_FEAT_XENTRY(RDSEED) \ - DN_CPU_FEAT_XENTRY(RDTSCP) \ + DN_CPU_FEAT_XENTRY(RDTscP) \ DN_CPU_FEAT_XENTRY(SHA) \ DN_CPU_FEAT_XENTRY(SSE) \ DN_CPU_FEAT_XENTRY(SSE2) \ @@ -895,7 +895,7 @@ struct DN_CPUIDArgs { int eax; int ecx; }; DN_CPU_FEAT_XENTRY(SSE42) \ DN_CPU_FEAT_XENTRY(SSE4A) \ DN_CPU_FEAT_XENTRY(SSSE3) \ - DN_CPU_FEAT_XENTRY(TSC) \ + DN_CPU_FEAT_XENTRY(Tsc) \ DN_CPU_FEAT_XENTRY(TscInvariant) \ DN_CPU_FEAT_XENTRY(VAES) \ DN_CPU_FEAT_XENTRY(VPCMULQDQ) @@ -1386,7 +1386,7 @@ typedef DN_U32 DN_CodepointCountFlags; enum DN_CodepointCountFlags_ { DN_CodepointCountFlags_Nil = 0, - DN_CodepointCountFlags_SkipANSICode = 1 << 0, + DN_CodepointCountFlags_SkipAnsiCode = 1 << 0, }; typedef struct DN_NibbleFromU8Result DN_NibbleFromU8Result; @@ -1590,7 +1590,7 @@ struct DN_ProfilerAnchorArray DN_USize count; }; -typedef DN_U64 (DN_ProfilerTSCNowFunc)(); +typedef DN_U64 (DN_ProfilerTscNowFunc)(); typedef struct DN_Profiler DN_Profiler; struct DN_Profiler { @@ -1600,7 +1600,7 @@ struct DN_Profiler DN_USize anchors_per_frame; DN_U16 parent_zone; bool paused; - DN_ProfilerTSCNowFunc *tsc_now; + DN_ProfilerTscNowFunc *tsc_now; DN_U64 tsc_frequency; DN_ProfilerZone frame_zone; DN_F64 frame_avg_tsc; @@ -1676,25 +1676,25 @@ struct DN_ErrSink DN_USize stack_size; }; -typedef struct DN_TCScratch DN_TCScratch; -struct DN_TCScratch +typedef struct DN_TcScratch DN_TcScratch; +struct DN_TcScratch { DN_Arena arena; DN_B32 destructed; }; #if defined(__cplusplus) -typedef struct DN_TCScratchCpp DN_TCScratchCpp; -struct DN_TCScratchCpp +typedef struct DN_TcScratchCpp DN_TcScratchCpp; +struct DN_TcScratchCpp { - DN_TCScratchCpp(DN_Arena **conflicts, DN_USize count); - ~DN_TCScratchCpp(); - DN_TCScratch data; + DN_TcScratchCpp(DN_Arena **conflicts, DN_USize count); + ~DN_TcScratchCpp(); + DN_TcScratch data; }; #endif -typedef struct DN_TCInitArgs DN_TCInitArgs; -struct DN_TCInitArgs +typedef struct DN_TcInitArgs DN_TcInitArgs; +struct DN_TcInitArgs { DN_U64 main_reserve; DN_U64 main_commit; @@ -1705,8 +1705,8 @@ struct DN_TCInitArgs DN_U64 err_sink_commit; }; -typedef struct DN_TCCore DN_TCCore; -struct DN_TCCore // (T)hread (C)ontext sitting in thread-local storage +typedef struct DN_TcCore DN_TcCore; +struct DN_TcCore // (T)hread (C)ontext sitting in thread-local storage { DN_Str8x64 name; DN_U64 thread_id; @@ -1724,13 +1724,13 @@ struct DN_TCCore // (T)hread (C)ontext sitting in thread-local storage DN_Arena* frame_arena; }; -typedef enum DN_TCDeinitArenas { - DN_TCDeinitArenas_No, - DN_TCDeinitArenas_Yes, -} DN_TCDeinitArenas; +typedef enum DN_TcDeinitArenas { + DN_TcDeinitArenas_No, + DN_TcDeinitArenas_Yes, +} DN_TcDeinitArenas; -typedef struct DN_PCG32 DN_PCG32; -struct DN_PCG32 { DN_U64 state; }; +typedef struct DN_Pcg32 DN_Pcg32; +struct DN_Pcg32 { DN_U64 state; }; typedef struct DN_Murmur3 DN_Murmur3; struct DN_Murmur3 { DN_U64 e[2]; }; @@ -1764,10 +1764,10 @@ struct DN_LogTypeParam DN_Str8 str8; }; -typedef enum DN_ANSIColourMode { - DN_ANSIColourMode_Fg, - DN_ANSIColourMode_Bg, -} DN_ANSIColourMode; +typedef enum DN_AnsiColourMode { + DN_AnsiColourMode_Fg, + DN_AnsiColourMode_Bg, +} DN_AnsiColourMode; typedef struct DN_LogDate DN_LogDate; struct DN_LogDate @@ -4402,7 +4402,7 @@ struct DN_OSThreadInitArgs { // NOTE: Customise much memory the thread's TLS context will be initialised with which contains // persistent/temporary allocators and misc facilities that each thread has exclusive access to. - DN_TCInitArgs tc_args; + DN_TcInitArgs tc_args; // NOTE: Set how much stack space in bytes the thread will have. Leave this value to 0 to defer // to the OS's default stack size. @@ -4433,7 +4433,7 @@ struct DN_OSThread { DN_OSThreadFlags flags; DN_Str8x64 name; - DN_TCCore context; + DN_TcCore context; DN_OSThreadLane lane; bool is_lane_set; void *handle; @@ -4445,7 +4445,7 @@ struct DN_OSThread #if !defined(DN_PLATFORM_WIN32) DN_OSSemaphore join_done_sem; #endif - DN_TCInitArgs tc_init_args; + DN_TcInitArgs tc_init_args; }; typedef DN_U32 DN_OSLogFlags; @@ -4453,7 +4453,7 @@ enum DN_OSLoggerFlags_ { DN_OSLoggerFlags_Nil = 0, DN_OSLoggerFlags_File = 1 << 0, // Write the log to disk - DN_OSLoggerFlags_NoColour = 1 << 2, // Prevent outputting logs with ANSI colour codes (note: logs written to disk never use colour) + DN_OSLoggerFlags_NoColour = 1 << 2, // Prevent outputting logs with Ansi colour codes (note: logs written to disk never use colour) DN_OSLoggerFlags_NoOutput = 1 << 3, // Prevent outputting to the terminal // NOTE: Internal flags, do not use @@ -4559,7 +4559,7 @@ typedef struct DN_Core DN_Core; struct DN_Core { DN_InitFlags init_flags; - DN_TCCore main_tc; + DN_TcCore main_tc; DN_USize mem_allocs_frame; DN_LeakTracker leak; @@ -4590,10 +4590,10 @@ struct DN_Core // optionally call `DN_BeginFrame` which resets some metrics that are counted for example it // tracks the number of memory allocations for the current frame and that counter can be reset. // -// For convenience you can opt into some sane defaults for the `DN_TCInitArgs` which customises -// how thread-local storage is setup with `DN_TCInitArgsDefault()` which produces a -// `DN_TCInitArgs` object you can pass in by value. -DN_API void DN_Init (DN_Core *dn, DN_InitFlags flags, DN_TCInitArgs args); +// For convenience you can opt into some sane defaults for the `DN_TcInitArgs` which customises +// how thread-local storage is setup with `DN_TcInitArgsDefault()` which produces a +// `DN_TcInitArgs` object you can pass in by value. +DN_API void DN_Init (DN_Core *dn, DN_InitFlags flags, DN_TcInitArgs args); DN_API void DN_Set (DN_Core *dn); DN_API DN_Core* DN_Get (); DN_API void DN_BeginFrame (); @@ -4601,10 +4601,10 @@ DN_API void DN_BeginFrame DN_API bool DN_VerifyArgsF (DN_VerifyType type, bool expr, DN_CallSite call_site, DN_Str8 expr_str8, char const *fmt, ...); DN_API bool DN_VerifyArgs (DN_VerifyType type, bool expr, DN_CallSite call_site, DN_Str8 expr_str8); -#define DN_SPrintF(...) STB_SPRINTF_DECORATE(sprintf)(__VA_ARGS__) -#define DN_SNPrintF(...) STB_SPRINTF_DECORATE(snprintf)(__VA_ARGS__) -#define DN_VSPrintF(...) STB_SPRINTF_DECORATE(vsprintf)(__VA_ARGS__) -#define DN_VSNPrintF(...) STB_SPRINTF_DECORATE(vsnprintf)(__VA_ARGS__) +#define DN_Sprintf(...) STB_SPRINTF_DECORATE(sprintf)(__VA_ARGS__) +#define DN_Snprintf(...) STB_SPRINTF_DECORATE(snprintf)(__VA_ARGS__) +#define DN_Vsprintf(...) STB_SPRINTF_DECORATE(vsprintf)(__VA_ARGS__) +#define DN_Vsnprintf(...) STB_SPRINTF_DECORATE(vsnprintf)(__VA_ARGS__) DN_API bool DN_MemStartsWith (void const *lhs, DN_USize lhs_count, void const *rhs, DN_USize rhs_count); DN_API bool DN_MemEq (void const *lhs, DN_USize lhs_count, void const *rhs, DN_USize rhs_count); @@ -4672,7 +4672,7 @@ DN_API void DN_BitSetInplace DN_API bool DN_BitIsSet (DN_USize bits, DN_USize bits_to_set); DN_API bool DN_BitIsNotSet (DN_USize bits, DN_USize bits_to_check); DN_API bool DN_BitIsAny (DN_USize bits, DN_USize bits_to_check); -#define DN_BitClearNextLSB(value) (value) & ((value) - 1) +#define DN_BitClearNextLsb(value) (value) & ((value) - 1) DN_API DN_I64 DN_SafeAddI64 (DN_I64 a, DN_I64 b); DN_API DN_I64 DN_SafeMulI64 (DN_I64 a, DN_I64 b); @@ -4901,24 +4901,24 @@ DN_API void DN_ErrSinkAppendFV_ DN_API void DN_ErrSinkAppendF_ (DN_ErrSink *err, DN_U32 error_code, DN_CallSite call_site, DN_FMT_ATTRIB char const *fmt, ...); #define DN_ErrSinkAppendF(error, error_code, fmt, ...) DN_ErrSinkAppendF_(error, error_code, DN_CallSiteNow, fmt, ##__VA_ARGS__) -DN_API DN_TCInitArgs DN_TCInitArgsDefault (); -DN_API void DN_TCInit (DN_TCCore *tc, DN_U64 thread_id, DN_Arena *main_arena, DN_Arena *temp_arenas, DN_USize temp_arenas_count, DN_Arena *err_sink_arena); -DN_API void DN_TCInitFromHeap (DN_TCCore *tc, DN_U64 thread_id, DN_TCInitArgs args, DN_Heap heap); -DN_API void DN_TCDeinit (DN_TCCore *tc, DN_TCDeinitArenas deinit_arenas); -DN_API void DN_TCEquip (DN_TCCore *tc); -DN_API DN_TCCore* DN_TCGet (); -DN_API DN_Arena* DN_TCMainArena (); -DN_API DN_Pool* DN_TCMainPool (); -DN_API DN_Arena DN_TCTempArenaFromAllocator (DN_Allocator *conflicts, DN_USize count); -DN_API DN_Arena DN_TCTempArenaFromArena (DN_Arena **conflicts, DN_USize count); -DN_API DN_TCScratch DN_TCScratchBeginAllocator (DN_Allocator *conflicts, DN_USize count); -DN_API DN_TCScratch DN_TCScratchBeginArena (DN_Arena **conflicts, DN_USize count); -DN_API void DN_TCScratchEnd (DN_TCScratch *scratch); -DN_API void DN_TCSetFrameArena (DN_Arena *arena); -DN_API DN_Arena* DN_TCFrameArena (); -DN_API DN_ErrSink* DN_TCErrSink (); -#define DN_TCErrSinkBegin(mode) DN_ErrSinkBegin(DN_TCErrSink(), mode) -#define DN_TCErrSinkBeginDefault() DN_ErrSinkBeginDefault(DN_TCErrSink()) +DN_API DN_TcInitArgs DN_TcInitArgsDefault (); +DN_API void DN_TcInit (DN_TcCore *tc, DN_U64 thread_id, DN_Arena *main_arena, DN_Arena *temp_arenas, DN_USize temp_arenas_count, DN_Arena *err_sink_arena); +DN_API void DN_TcInitFromHeap (DN_TcCore *tc, DN_U64 thread_id, DN_TcInitArgs args, DN_Heap heap); +DN_API void DN_TcDeinit (DN_TcCore *tc, DN_TcDeinitArenas deinit_arenas); +DN_API void DN_TcEquip (DN_TcCore *tc); +DN_API DN_TcCore* DN_TcGet (); +DN_API DN_Arena* DN_TcMainArena (); +DN_API DN_Pool* DN_TcMainPool (); +DN_API DN_Arena DN_TcTempArenaFromAllocator (DN_Allocator *conflicts, DN_USize count); +DN_API DN_Arena DN_TcTempArenaFromArena (DN_Arena **conflicts, DN_USize count); +DN_API DN_TcScratch DN_TcScratchBeginAllocator (DN_Allocator *conflicts, DN_USize count); +DN_API DN_TcScratch DN_TcScratchBeginArena (DN_Arena **conflicts, DN_USize count); +DN_API void DN_TcScratchEnd (DN_TcScratch *scratch); +DN_API void DN_TcSetFrameArena (DN_Arena *arena); +DN_API DN_Arena* DN_TcFrameArena (); +DN_API DN_ErrSink* DN_TcErrSink (); +#define DN_TcErrSinkBegin(mode) DN_ErrSinkBegin(DN_TcErrSink(), mode) +#define DN_TcErrSinkBeginDefault() DN_ErrSinkBeginDefault(DN_TcErrSink()) DN_API bool DN_CharIsAlphabet (char ch); DN_API bool DN_CharIsDigit (char ch); @@ -4992,12 +4992,12 @@ DN_API DN_Str8 DN_Str8FromPtrPool DN_API DN_Str8 DN_Str8FromStr8Allocator (DN_Str8 string, DN_Allocator allocator); DN_API DN_Str8 DN_Str8FromStr8Arena (DN_Str8 string, DN_Arena *arena); DN_API DN_Str8 DN_Str8FromStr8Pool (DN_Str8 string, DN_Pool *pool); -DN_API DN_Str8 DN_Str8FromFmtVAllocator (DN_Allocator allocator, DN_FMT_ATTRIB char const *fmt, va_list args); -DN_API DN_Str8 DN_Str8FromFmtVArena (DN_Arena *arena, DN_FMT_ATTRIB char const *fmt, va_list args); -DN_API DN_Str8 DN_Str8FromFmtAllocator (DN_Allocator allocator, DN_FMT_ATTRIB char const *fmt, ...); -DN_API DN_Str8 DN_Str8FromFmtArena (DN_Arena *arena, DN_FMT_ATTRIB char const *fmt, ...); -DN_API DN_Str8 DN_Str8FromFmtVPool (DN_Pool *pool, DN_FMT_ATTRIB char const *fmt, va_list args); -DN_API DN_Str8 DN_Str8FromFmtPool (DN_Pool *pool, DN_FMT_ATTRIB char const *fmt, ...); +DN_API DN_Str8 DN_Str8FmtVAllocator (DN_Allocator allocator, DN_FMT_ATTRIB char const *fmt, va_list args); +DN_API DN_Str8 DN_Str8FmtVArena (DN_Arena *arena, DN_FMT_ATTRIB char const *fmt, va_list args); +DN_API DN_Str8 DN_Str8FmtAllocator (DN_Allocator allocator, DN_FMT_ATTRIB char const *fmt, ...); +DN_API DN_Str8 DN_Str8FmtArena (DN_Arena *arena, DN_FMT_ATTRIB char const *fmt, ...); +DN_API DN_Str8 DN_Str8FmtVPool (DN_Pool *pool, DN_FMT_ATTRIB char const *fmt, va_list args); +DN_API DN_Str8 DN_Str8FmtPool (DN_Pool *pool, DN_FMT_ATTRIB char const *fmt, ...); DN_API DN_Str8x16 DN_Str8x16FromFmt (DN_FMT_ATTRIB char const *fmt, ...); DN_API DN_Str8x16 DN_Str8x16FromFmtV (DN_FMT_ATTRIB char const *fmt, va_list args); @@ -5215,8 +5215,8 @@ DN_API DN_Str8x32 DN_Str8x32FromByteCountU64 // API // DN_ProfilerInit // You can set `tsc_now` to NULL to use the default timer mechanic which relies on -// DN_CPUGetTSC() which essentially uses __rdtsc. `tsc_frequency` must however always be -// provided, for, DN_CPUGetTSC() you can use `DN_OS_EstimateTSCPerSecond()` to calculate the +// DN_CPUGetTsc() which essentially uses __rdtsc. `tsc_frequency` must however always be +// provided, for, DN_CPUGetTsc() you can use `DN_OS_EstimateTscPerSecond()` to calculate the // frequency of `__rdtsc`. // DN_ProfilerNewFrame // Always call `DN_ProfilerNewFrame` at-least once using the `Zone` family of functions as it @@ -5235,7 +5235,7 @@ DN_API DN_Str8x32 DN_Str8x32FromByteCountU64 DN_ProfilerEndZone(DN_UniqueName(zone_)), DN_UniqueName(dummy_).begin_tsc = 1 #define DN_ProfilerZoneLoopAuto(prof, name) DN_ProfilerZoneLoop(prof, name, __COUNTER__ + 1) -DN_API DN_Profiler DN_ProfilerInit (DN_ProfilerAnchor *anchors, DN_USize count, DN_USize anchors_per_frame, DN_ProfilerTSCNowFunc *tsc_now, DN_U64 tsc_frequency); +DN_API DN_Profiler DN_ProfilerInit (DN_ProfilerAnchor *anchors, DN_USize count, DN_USize anchors_per_frame, DN_ProfilerTscNowFunc *tsc_now, DN_U64 tsc_frequency); DN_API DN_ProfilerZone DN_ProfilerBeginZone (DN_Profiler *profiler, DN_Str8 name, DN_U16 anchor_index); #define DN_ProfilerBeginZoneAuto(prof, name) DN_ProfilerBeginZone(prof, DN_Str8Lit(name), __COUNTER__ + 1) DN_API void DN_ProfilerEndZone (DN_ProfilerZone zone); @@ -5246,8 +5246,8 @@ DN_API void DN_ProfilerNewFrame DN_API DN_USize DN_ProfilerFmtAnchor (DN_ProfilerAnchor anchor, DN_U64 tsc_frequency, char *buffer, DN_USize count); DN_API DN_Str8 DN_ProfilerFmtAnchorStr8 (DN_ProfilerAnchor anchor, DN_U64 tsc_frequency, DN_Arena *arena); DN_API void DN_ProfilerFmtToStdout (DN_Profiler *profiler); -DN_API DN_F64 DN_ProfilerSecFromTSC (DN_Profiler *profiler, DN_U64 duration_tsc); -DN_API DN_F64 DN_ProfilerMsFromTSC (DN_Profiler *profiler, DN_U64 duration_tsc); +DN_API DN_F64 DN_ProfilerSecFromTsc (DN_Profiler *profiler, DN_U64 duration_tsc); +DN_API DN_F64 DN_ProfilerMsFromTsc (DN_Profiler *profiler, DN_U64 duration_tsc); DN_API void DN_QSort (void *array, DN_USize array_size, DN_USize elem_size, void *user_context, DN_QSortCompareFunc *compare); DN_API bool DN_QSortCompareStr8NaturalAsc (void const* lhs, void const *rhs, void *user_context); @@ -5270,24 +5270,24 @@ DN_API DN_BSearchResult DN_BSearchUSize DN_API DN_BSearchResult DN_BSearchU64 (DN_U64 const *array, DN_USize count, DN_U64 find, DN_BSearchType type); DN_API DN_BSearchResult DN_BSearchU32 (DN_U32 const *array, DN_USize count, DN_U32 find, DN_BSearchType type); -DN_API DN_PCG32 DN_PCG32Init (DN_U64 seed); -DN_API DN_U32 DN_PCG32Next (DN_PCG32 *rng); -DN_API DN_U64 DN_PCG32Next64 (DN_PCG32 *rng); -DN_API DN_U32 DN_PCG32Range (DN_PCG32 *rng, DN_U32 low, DN_U32 high); -DN_API DN_F32 DN_PCG32NextF32 (DN_PCG32 *rng); -DN_API DN_F64 DN_PCG32NextF64 (DN_PCG32 *rng); -DN_API void DN_PCG32Advance (DN_PCG32 *rng, DN_U64 delta); +DN_API DN_Pcg32 DN_Pcg32Init (DN_U64 seed); +DN_API DN_U32 DN_Pcg32Next (DN_Pcg32 *rng); +DN_API DN_U64 DN_Pcg32Next64 (DN_Pcg32 *rng); +DN_API DN_U32 DN_Pcg32Range (DN_Pcg32 *rng, DN_U32 low, DN_U32 high); +DN_API DN_F32 DN_Pcg32NextF32 (DN_Pcg32 *rng); +DN_API DN_F64 DN_Pcg32NextF64 (DN_Pcg32 *rng); +DN_API void DN_Pcg32Advance (DN_Pcg32 *rng, DN_U64 delta); -#if !defined(DN_FNV1A32_SEED) - #define DN_FNV1A32_SEED 2166136261U +#if !defined(DN_Fnv1a32_SEED) + #define DN_Fnv1a32_SEED 2166136261U #endif -#if !defined(DN_FNV1A64_SEED) - #define DN_FNV1A64_SEED 14695981039346656037ULL +#if !defined(DN_Fnv1a64_SEED) + #define DN_Fnv1a64_SEED 14695981039346656037ULL #endif -DN_API DN_U32 DN_FNV1AHashU32FromBytes (void const *bytes, DN_USize count, DN_U32 seed); -DN_API DN_U64 DN_FNV1AHashU64FromBytes (void const *bytes, DN_USize count, DN_U64 seed); +DN_API DN_U32 DN_Fnv1aHashU32FromBytes (void const *bytes, DN_USize count, DN_U32 seed); +DN_API DN_U64 DN_Fnv1aHashU64FromBytes (void const *bytes, DN_USize count, DN_U64 seed); DN_API DN_U32 DN_Murmur3HashU32FromBytesX86 (void const *bytes, int len, DN_U32 seed); DN_API DN_Murmur3 DN_Murmur3HashU128FromBytesX64 (void const *bytes, int len, DN_U32 seed); @@ -5300,15 +5300,15 @@ DN_API DN_U32 DN_Murmur3HashU32FromBytesX64 #define DN_Murmur3HashU32FromBytes(bytes, len, seed) DN_Murmur3HashU32FromBytesX86(bytes, len, seed) #endif -#define DN_ANSICodeBoldLit "\x1b[1m" -#define DN_ANSICodeResetLit "\x1b[0m" -DN_API DN_Str8x32 DN_Str8x32FromANSIColourCodeU8RGB (DN_ANSIColourMode mode, DN_U8 r, DN_U8 g, DN_U8 b); -DN_API DN_Str8x32 DN_Str8x32FromANSIColourCodeV3F32RGB255 (DN_ANSIColourMode mode, DN_V3F32 rgb_255); -DN_API DN_Str8x32 DN_Str8x32FromANSIColourCodeU32RGB (DN_ANSIColourMode mode, DN_U32 value); -DN_API DN_Str8 DN_Str8FromStr8ANSIColourU8RGBArena (DN_ANSIColourMode mode, DN_Str8 str8, DN_U8 r, DN_U8 g, DN_U8 b, DN_Arena *arena); -DN_API DN_Str8 DN_Str8FromStr8ANSIColourV3F32RGB255Arena (DN_ANSIColourMode mode, DN_Str8 str8, DN_V3F32 rgb_255, DN_Arena *arena); -DN_API DN_Str8 DN_Str8FromFmtANSIColourU8RGBArena (DN_ANSIColourMode mode, DN_U8 r, DN_U8 g, DN_U8 b, DN_Arena *arena, char const *fmt, ...); -DN_API DN_Str8 DN_Str8FromFmtANSIColourV3F32RGB255Arena (DN_ANSIColourMode mode, DN_V3F32 rgb_255, DN_Arena *arena, char const *fmt, ...); +#define DN_AnsiCodeBoldLit "\x1b[1m" +#define DN_AnsiCodeResetLit "\x1b[0m" +DN_API DN_Str8x32 DN_Str8x32FromAnsiColourCodeU8Rgb (DN_AnsiColourMode mode, DN_U8 r, DN_U8 g, DN_U8 b); +DN_API DN_Str8x32 DN_Str8x32FromAnsiColourCodeV3F32Rgb255 (DN_AnsiColourMode mode, DN_V3F32 rgb_255); +DN_API DN_Str8x32 DN_Str8x32FromAnsiColourCodeU32Rgb (DN_AnsiColourMode mode, DN_U32 value); +DN_API DN_Str8 DN_Str8FromStr8AnsiColourU8RgbArena (DN_AnsiColourMode mode, DN_Str8 str8, DN_U8 r, DN_U8 g, DN_U8 b, DN_Arena *arena); +DN_API DN_Str8 DN_Str8FromStr8AnsiColourV3F32Rgb255Arena (DN_AnsiColourMode mode, DN_Str8 str8, DN_V3F32 rgb_255, DN_Arena *arena); +DN_API DN_Str8 DN_Str8FmtAnsiColourU8RgbArena (DN_AnsiColourMode mode, DN_U8 r, DN_U8 g, DN_U8 b, DN_Arena *arena, char const *fmt, ...); +DN_API DN_Str8 DN_Str8FmtAnsiColourV3F32Rgb255Arena (DN_AnsiColourMode mode, DN_V3F32 rgb_255, DN_Arena *arena, char const *fmt, ...); // NOTE: Create log printable lines with a date prefix, severity and message. The platform // implementation should call `SetPrintFunc` to intercept the log messages and output to the desired @@ -5510,7 +5510,7 @@ DN_API DN_F32 DN_V2F32Area // NOTE: Grayscale co-efficients from: // https://github.com/EpicGames/UnrealEngine/blob/260bb2e1c5610b31c63a36206eedd289409c5f11/Engine/Source/Runtime/Core/Private/Math/Color.cpp#L304 -DN_V3F32 static const DN_V3F32_RGB_LUMINANCE = DN_V3F32From3N(0.3f, 0.59f, 0.11f); +DN_V3F32 static const DN_V3F32_Rgb_LUMINANCE = DN_V3F32From3N(0.3f, 0.59f, 0.11f); DN_API bool operator== (DN_V3F32 lhs, DN_V3F32 rhs); DN_API bool operator!= (DN_V3F32 lhs, DN_V3F32 rhs); @@ -5543,16 +5543,16 @@ DN_API DN_V3F32 DN_V3F32Normalise #define DN_V4F32From1N(x) DN_Literal(DN_V4F32){{(DN_F32)(x), (DN_F32)(x), (DN_F32)(x), (DN_F32)(x)}} #define DN_V4F32From4N(x, y, z, w) DN_Literal(DN_V4F32){{(DN_F32)(x), (DN_F32)(y), (DN_F32)(z), (DN_F32)(w)}} #define DN_V4F32FromV3And1N(xyz, w) DN_Literal(DN_V4F32){{xyz.x, xyz.y, xyz.z, w}} -#define DN_V4F32RGBA01FromRGBAU8(r, g, b, a) DN_Literal(DN_V4F32){{r / 255.f, g / 255.f, b / 255.f, a / 255.f}} -#define DN_V4F32RGBA01FromRGBU8(r, g, b) DN_Literal(DN_V4F32){{r / 255.f, g / 255.f, b / 255.f, 1.f}} +#define DN_V4F32Rgba01FromRgbaU8(r, g, b, a) DN_Literal(DN_V4F32){{r / 255.f, g / 255.f, b / 255.f, a / 255.f}} +#define DN_V4F32Rgba01FromRgbU8(r, g, b) DN_Literal(DN_V4F32){{r / 255.f, g / 255.f, b / 255.f, 1.f}} DN_API DN_V4F32 DN_V4F32Lerp (DN_V4F32 lhs, DN_F32 t01, DN_V4F32 rhs); -DN_API bool DN_V4F32RGBA01IsValid (DN_V4F32 rgba01); -DN_API DN_V4F32 DN_V4F32RGBA01FromRGBU32 (DN_U32 u32); -DN_API DN_V4F32 DN_V4F32RGBA01FromRGBAU32 (DN_U32 u32); -DN_API DN_V4F32 DN_V4F32Linear01FromSRGB01 (DN_V4F32 rgb01); -DN_API DN_V4F32 DN_V4F32Linear01Desaturate (DN_V4F32 linear01, DN_F32 t01); -DN_API DN_V4F32 DN_V4F32SRGB01FromLinear01 (DN_V4F32 linear01); +DN_API bool DN_V4F32Rgba01IsValid (DN_V4F32 rgba01); +DN_API DN_V4F32 DN_V4F32Rgba01FromRgbU32 (DN_U32 u32); +DN_API DN_V4F32 DN_V4F32Rgba01FromRgbaU32 (DN_U32 u32); +DN_API DN_V4F32 DN_V4F32Linear01FromSrgb01 (DN_V4F32 rgb01); +DN_API DN_V4F32 DN_V4F32Linear01Desaturate (DN_V4F32 linear01, DN_F32 t01); +DN_API DN_V4F32 DN_V4F32Srgb01FromLinear01 (DN_V4F32 linear01); #define DN_V4F32FromV4Alpha(v4, alpha) DN_V4F32FromV3And1N(v4.xyz, alpha) @@ -6538,8 +6538,8 @@ DN_API DN_U64 DN_OS_DateLocalUnixTimeSFromUnixTimeS (D DN_API void DN_OS_GenBytesSecure (void *buffer, DN_U32 size); DN_API bool DN_OS_SetEnvVar (DN_Str8 name, DN_Str8 value); DN_API DN_OSDiskSpace DN_OS_DiskSpace (DN_Str8 path); -DN_API DN_Str8 DN_OS_EXEPath (DN_Arena *arena); -DN_API DN_Str8 DN_OS_EXEDir (DN_Arena *arena); +DN_API DN_Str8 DN_OS_ExePath (DN_Arena *arena); +DN_API DN_Str8 DN_OS_ExeDir (DN_Arena *arena); DN_API void DN_OS_SleepMs (DN_UInt milliseconds); DN_API DN_U64 DN_OS_PerfCounterNow (); @@ -6554,7 +6554,7 @@ DN_API DN_F64 DN_OS_TimerS (D DN_API DN_F64 DN_OS_TimerMs (DN_OSTimer timer); DN_API DN_F64 DN_OS_TimerUs (DN_OSTimer timer); DN_API DN_F64 DN_OS_TimerNs (DN_OSTimer timer); -DN_API DN_U64 DN_OS_EstimateTSCPerSecond (uint64_t duration_ms_to_gauge_tsc_frequency); +DN_API DN_U64 DN_OS_EstimateTscPerSecond (uint64_t duration_ms_to_gauge_tsc_frequency); // NOTE: OS File // Overview @@ -6645,11 +6645,12 @@ DN_API DN_Str8 DN_OS_PathFmtPool (D #define DN_OS_PathBuild(allocator, fs_path) DN_OS_PathBuildWithSeparatorAllocator(allocator, fs_path, DN_OSPathSeparatorStr8) DN_API void DN_OS_Exit (int32_t exit_code); +DN_API DN_OSExecArgs DN_OS_ExecArgsDefault (); DN_API DN_OSExecResult DN_OS_ExecPump (DN_OSExecAsyncHandle handle, char *stdout_buffer, size_t *stdout_size, char *stderr_buffer, size_t *stderr_size, DN_U32 timeout_ms, DN_ErrSink *err); DN_API DN_OSExecResult DN_OS_ExecWait (DN_OSExecAsyncHandle handle, DN_Arena *arena, DN_ErrSink *err); -DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync (DN_Str8Slice cmd_line, DN_OSExecArgs *args, DN_ErrSink *err); -DN_API DN_OSExecResult DN_OS_Exec (DN_Str8Slice cmd_line, DN_OSExecArgs *args, DN_Arena *arena, DN_ErrSink *err); -DN_API DN_OSExecResult DN_OS_ExecOrAbort (DN_Str8Slice cmd_line, DN_OSExecArgs *args, DN_Arena *arena); +DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync (DN_Str8Slice cmd_line, DN_OSExecArgs args, DN_ErrSink *err); +DN_API DN_OSExecResult DN_OS_Exec (DN_Str8Slice cmd_line, DN_OSExecArgs args, DN_Arena *arena, DN_ErrSink *err); +DN_API DN_OSExecResult DN_OS_ExecOrAbort (DN_Str8Slice cmd_line, DN_OSExecArgs args, DN_Arena *arena); DN_API DN_OSSemaphore DN_OS_SemaphoreInit (DN_U32 initial_count); DN_API void DN_OS_SemaphoreDeinit (DN_OSSemaphore *semaphore); @@ -6685,7 +6686,7 @@ DN_API void DN_OS_ConditionVariableBroadcast (D // // `tc_init_args` customises how much memory is allocated for the thread's TLS context which // contains allocators that are exclusively owned by the thread. You may use -// DN_TCInitArgsDefault() for sensible default values. +// DN_TcInitArgsDefault() for sensible default values. // // Note not all fields in the thread will be initialised until the thread has itself run its // initialisation code which is entirely dependent on the OS scheduler, scheduling the thread to @@ -6710,7 +6711,7 @@ DN_API void DN_OS_ConditionVariableBroadcast (D // waiting for the thread to join. DN_API bool DN_OS_ThreadInitLane (DN_OSThread *thread, DN_OSThreadFunc *func, DN_OSThreadLane *lane, DN_OSThreadInitArgs init_args, void *user_context); DN_API bool DN_OS_ThreadInit (DN_OSThread *thread, DN_OSThreadFunc *func, DN_OSThreadInitArgs init_args, void *user_context); -DN_API bool DN_OS_ThreadJoin (DN_OSThread *thread, DN_U32 timeout_ms, DN_TCDeinitArenas deinit_arenas); +DN_API bool DN_OS_ThreadJoin (DN_OSThread *thread, DN_U32 timeout_ms, DN_TcDeinitArenas deinit_arenas); DN_API DN_U32 DN_OS_ThreadID (); DN_API DN_OSThreadInitArgs DN_OS_ThreadInitArgsDefault (); DN_API void DN_OS_ThreadSetNameFmt (char const *fmt, ...); @@ -6745,12 +6746,12 @@ DN_API void DN_OS_ThreadSetNameFmt (c // to broadcast the pointer must have a non-null pointer, all other lanes must pass in a // non-null pointer. A typical use case might look like: /* - DN_OSThreadLane *lane = DN_OS_TCThreadLane(); // Get lane from current (t)hread (c)context + DN_OSThreadLane *lane = DN_OS_TcThreadLane(); // Get lane from current (t)hread (c)context // NOTE: Allocate buffer in lane 0 DN_U8 *buffer = nullptr; if (lane->index == 0) - buffer = DN_ArenaNewArray(DN_TCMainArena(), DN_U8, DN_Gigabytes(1), DN_ZMem_No); + buffer = DN_ArenaNewArray(DN_TcMainArena(), DN_U8, DN_Gigabytes(1), DN_ZMem_No); // NOTE: Lane 0 broadcasts the `buffer` pointer to lane 1..N DN_OS_ThreadLaneSync(lane, &buffer); @@ -6784,11 +6785,11 @@ DN_API DN_V2USize DN_OS_ThreadLaneRange (D DN_API DN_OSThreadLaneway DN_OS_ThreadLanewayFromArgs (DN_OSThread* threads, DN_USize threads_count, DN_UPtr* shared_mem); DN_API DN_OSThreadLaneway DN_OS_ThreadLanewayFromArena (DN_USize threads_count, DN_Arena* arena); DN_API void DN_OS_ThreadLanewayDispatch (DN_OSThreadLaneway *laneway, DN_OSThreadFunc *entry_point, DN_OSThreadInitArgs init_args, void *user_context); -DN_API void DN_OS_ThreadLanewayJoin (DN_OSThreadLaneway *laneway, DN_U32 timeout_ms, DN_TCDeinitArenas deinit_arenas); +DN_API void DN_OS_ThreadLanewayJoin (DN_OSThreadLaneway *laneway, DN_U32 timeout_ms, DN_TcDeinitArenas deinit_arenas); -DN_API DN_OSThreadLane* DN_OS_TCThreadLane (); -DN_API void DN_OS_TCThreadLaneSync (void **ptr_to_share); -DN_API DN_OSThreadLane DN_OS_TCThreadLaneEquip (DN_OSThreadLane lane); +DN_API DN_OSThreadLane* DN_OS_TcThreadLane (); +DN_API void DN_OS_TcThreadLaneSync (void **ptr_to_share); +DN_API DN_OSThreadLane DN_OS_TcThreadLaneEquip (DN_OSThreadLane lane); DN_API void DN_OS_AsyncInit (DN_OSAsyncCore *async, char *base, DN_USize base_size, DN_OSThread *threads, DN_U32 threads_size); DN_API void DN_OS_AsyncDeinit (DN_OSAsyncCore *async); diff --git a/Source/Extra/dn_seshc.cpp b/Source/Extra/dn_seshc.cpp index e880fb7..3a9313e 100644 --- a/Source/Extra/dn_seshc.cpp +++ b/Source/Extra/dn_seshc.cpp @@ -1,34 +1,17 @@ #include "dn_seshc.h" -struct DN_SHMsgSendAsyncContext_ -{ - bool send_success; - DN_Arena* arena; - DN_SHCLIArgs args; - DN_SHMsgSendData send; - DN_Str8 msg; - bool detached; -}; - -DN_SHCLIArgs DN_SH_CLIArgsCopy(DN_SHCLIArgs const *src, DN_Arena *arena) -{ - DN_SHCLIArgs result = {}; - result = *src; - result.exe_path = DN_Str8FromStr8Arena(src->exe_path, arena); - result.ini_path = DN_Str8FromStr8Arena(src->ini_path, arena); - result.seed_node_url = DN_Str8FromStr8Arena(src->seed_node_url, arena); - return result; -} - DN_Str8 DN_SH_CLIOptionsStr8() { DN_Str8 result = DN_Str8Lit( "SESHC OPTIONS (note all options must be set to activate Seshc):\n" -" --seshc-exe-path Path to the Seshc EXE file to invoke for sending messages\n" -" --seshc-ini-path Path to the .ini file to load Seshc arguments from\n" -" (such as account secrets, display name, recipient...)\n" -" --seshc-seed-node URL to the Session seed node for determining the nodes to\n" -" send the message to\n" +" --seshc-exe-path Path to the Seshc EXE file to invoke for sending messages\n" +" --seshc-account-secret Specify the secret of the Session account to send a message\n" +" as (see --help on the Seshc EXE for more info)\n" +" --seshc-seed-node URL to the Session seed node for determining the nodes to\n" +" send the message to\n" +" --seshc-display-name Display name to send the message as\n" +" --seshc-recipient-pkey Recipient to send the message as (must be 0x05 prefixed, 0x\n" +" is optional)" ); return result; } @@ -57,16 +40,10 @@ DN_SHCLIEatArgResult DN_SH_CLIEatArg(DN_SHCLIArgs *args, char const **arg_ptr, i } } - if (!result.eaten && DN_Str8EqInsensitive(arg, DN_Str8Lit("--seshc-ini-path"))) { + if (!result.eaten && DN_Str8EqInsensitive(arg, DN_Str8Lit("--seshc-account-secret"))) { (void)DN_ArgShift(result.arg_ptr, result.arg_count); - result.eaten = true; - args->ini_path = DN_Str8FromCStr8(DN_ArgShift(result.arg_ptr, result.arg_count)); - - if (DN_OS_PathInfo(args->ini_path).type != DN_OSPathInfoType_File) { - result.error_msg = DN_Str8Lit("Seshc ini path does not point to a file"); - result.error_arg = args->ini_path; - args->ini_path = {}; - } + result.eaten = true; + args->account_secret = DN_Str8FromCStr8(DN_ArgShift(result.arg_ptr, result.arg_count)); } if (!result.eaten && DN_Str8EqInsensitive(arg, DN_Str8Lit("--seshc-seed-node"))) { @@ -74,230 +51,65 @@ DN_SHCLIEatArgResult DN_SH_CLIEatArg(DN_SHCLIArgs *args, char const **arg_ptr, i result.eaten = true; args->seed_node_url = DN_Str8FromCStr8(DN_ArgShift(result.arg_ptr, result.arg_count)); } + + if (!result.eaten && DN_Str8EqInsensitive(arg, DN_Str8Lit("--seshc-display-name"))) { + (void)DN_ArgShift(result.arg_ptr, result.arg_count); + result.eaten = true; + args->display_name = DN_Str8FromCStr8(DN_ArgShift(result.arg_ptr, result.arg_count)); + } + + if (!result.eaten && DN_Str8EqInsensitive(arg, DN_Str8Lit("--seshc-recipient-pkey"))) { + (void)DN_ArgShift(result.arg_ptr, result.arg_count); + result.eaten = true; + args->recipient_pkey = DN_Str8FromCStr8(DN_ArgShift(result.arg_ptr, result.arg_count)); + + DN_Str8 check = DN_Str8TrimHexPrefix(args->recipient_pkey); + if (!DN_Str8StartsWithSensitive(check, DN_Str8Lit("05"))) { + result.error_msg = DN_Str8Lit("Seshc recipient public key does not have a 05 prefix"); + result.error_arg = args->recipient_pkey; + args->recipient_pkey = {}; + } + } } - if (args->seed_node_url.count && args->exe_path.count && args->ini_path.count) + if (args->seed_node_url.count && args->account_secret.count && args->exe_path.count && args->display_name.count && args->recipient_pkey.count) args->valid = true; return result; } -bool DN_SH_MsgSendBlockingFmt(DN_SHMsgSendData send, DN_SHCLIArgs *cli_args, char const *fmt, ...) -{ - bool result = false; - if (cli_args->valid) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); - - va_list args; - va_start(args, fmt); - DN_Str8 msg = DN_Str8FromFmtVArena(&scratch.arena, fmt, args); - va_end(args); - - DN_Str8 account_secret_arg = DN_Str8Lit("--account-secret"); - DN_Str8 seed_node_url_arg = DN_Str8Lit("--seed-node-url"); - DN_Str8 display_name_arg = DN_Str8Lit("--display-name"); - DN_Str8 ini_path_arg = DN_Str8Lit("--ini-path"); - DN_Str8 send_arg = DN_Str8Lit("send"); - - DN_Str8 cmds[16] = {}; - DN_USize cmds_count = 0; - DN_LArrayAppend(cmds, &cmds_count, cli_args->exe_path); - - DN_LArrayAppend(cmds, &cmds_count, account_secret_arg); - DN_LArrayAppend(cmds, &cmds_count, send.account_secret); - - DN_LArrayAppend(cmds, &cmds_count, seed_node_url_arg); - DN_LArrayAppend(cmds, &cmds_count, cli_args->seed_node_url); - - if (send.display_name.count) { - DN_LArrayAppend(cmds, &cmds_count, display_name_arg); - DN_LArrayAppend(cmds, &cmds_count, send.display_name); - } - - DN_LArrayAppend(cmds, &cmds_count, ini_path_arg); - DN_LArrayAppend(cmds, &cmds_count, cli_args->ini_path); - - DN_LArrayAppend(cmds, &cmds_count, send_arg); - DN_LArrayAppend(cmds, &cmds_count, send.recipient); - - DN_LArrayAppend(cmds, &cmds_count, msg); - - DN_Str8Slice cmd_line = {}; - cmd_line.data = cmds; - cmd_line.count = cmds_count; - - DN_OSExecArgs exec_args = {}; - exec_args.flags |= DN_OSExecFlags_SaveOutput; - - DN_OSExecResult exec = DN_OS_Exec(cmd_line, &exec_args, &scratch.arena, nullptr); - result = exec.os_error_code == 0 && exec.exit_code == 0; - if (!result) { - DN_LogErrorF("Error sending message to %.*s (exit code: %d, os: %d): %.*s", - DN_Str8PrintFmt(send.recipient), - exec.exit_code, - exec.os_error_code, - DN_Str8PrintFmt(exec.stderr_text)); - } - DN_TCScratchEnd(&scratch); - - } - return result; -} - -static int DN_SH_MsgSendDetachedFmtThreadFunc_(DN_OSThread *thread) -{ - DN_SHMsgSendAsyncContext_ *context = DN_Cast(DN_SHMsgSendAsyncContext_ *) thread->user_context; - context->send_success = DN_SH_MsgSendBlockingFmt(context->send, &context->args, "%.*s", DN_Str8PrintFmt(context->msg)); - if (context->detached) - DN_ArenaDeinit(context->arena); - return 0; -} - -static DN_SHMsgSendAsyncHandle DN_SH_MsgSendAsyncFmtVMaybeDetached_(DN_SHMsgSendData send, DN_SHCLIArgs *cli_args, DN_Arena *arena, bool detached, char const *fmt, va_list args) -{ - DN_SHMsgSendAsyncHandle result = {}; - if (!cli_args->valid) - return result; - - // NOTE: Setup context - DN_SHMsgSendAsyncContext_ *context = DN_ArenaNewZ(arena, DN_SHMsgSendAsyncContext_); - context->args = DN_SH_CLIArgsCopy(cli_args, arena); - context->send = send; - context->arena = arena; - context->msg = DN_Str8FromFmtVArena(arena, fmt, args); - context->detached = detached; - - // NOTE: Execute and forget - DN_OSThreadInitArgs thread_args = DN_OS_ThreadInitArgsDefault(); - if (detached) - thread_args.flags |= DN_OSThreadFlags_Detached; - - DN_OS_ThreadInit(&result.thread, DN_SH_MsgSendDetachedFmtThreadFunc_, thread_args, context); - return result; -} - -void DN_SH_MsgSendDetachedFmt(DN_SHMsgSendData send, DN_SHCLIArgs *cli_args, char const *fmt, ...) -{ - DN_Arena arena_stack = DN_OS_ArenaFromHeapVirtual(0, 0, DN_MemFlags_Nil); - DN_Arena *arena = DN_ArenaNewZ(&arena_stack, DN_Arena); - *arena = arena_stack; - - va_list args; - va_start(args, fmt); - DN_SH_MsgSendAsyncFmtVMaybeDetached_(send, cli_args, arena, /*detached=*/ true, fmt, args); - va_end(args); -} - -DN_SHMsgSendAsyncHandle DN_SH_MsgSendAsyncFmt(DN_SHMsgSendData send, DN_SHCLIArgs *cli_args, DN_Arena *arena, char const *fmt, ...) -{ - va_list args; - va_start(args, fmt); - DN_SHMsgSendAsyncHandle result = DN_SH_MsgSendAsyncFmtVMaybeDetached_(send, cli_args, arena, /*detached=*/ false, fmt, args); - va_end(args); - return result; -} - -DN_SHMsgSendAsyncStatus DN_SH_MsgSendAsyncWait(DN_SHMsgSendAsyncHandle *handle, DN_U32 timeout_ms) -{ - DN_SHMsgSendAsyncStatus result = DN_SHMsgSendAsyncStatus_Success; - if (handle && handle->thread.user_context) { - bool joined = DN_OS_ThreadJoin(&handle->thread, timeout_ms, DN_TCDeinitArenas_Yes); - if (joined) { - DN_SHMsgSendAsyncContext_ *context = DN_Cast(DN_SHMsgSendAsyncContext_ *) handle->thread.user_context; - result = context->send_success ? DN_SHMsgSendAsyncStatus_Success : DN_SHMsgSendAsyncStatus_Failed; - *handle = {}; - } else { - result = DN_SHMsgSendAsyncStatus_Timeout; - } - } - return result; -} - -void DN_SH_LogBroadcastFmtV(DN_SHLogMode mode, DN_LogType type, DN_SHMsgSendData send, DN_SHCLIArgs *cli_args, DN_Str8 short_desc, char const *fmt, va_list args) +bool DN_SH_CLIArgsSendDMFmt(DN_SHCLIArgs *cli_args, DN_Str8 sesh_pkey_hex, char const *fmt, ...) { DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); - DN_Str8 msg = DN_Str8FromFmtVArena(&scratch.arena, fmt, args); - DN_Str8 prefix = {}; - switch (type) { - case DN_LogType_Debug: prefix = DN_Str8Lit("🐞 "); break; - case DN_LogType_Info: prefix = DN_Str8Lit("ℹ️ "); break; - case DN_LogType_Warning: prefix = DN_Str8Lit("⚠️ "); break; - case DN_LogType_Error: prefix = DN_Str8Lit("🚨 "); break; - case DN_LogType_Count: break; - } - DN_LogF(type, "%.*s%.*s\n%.*s", DN_Str8PrintFmt(prefix), DN_Str8PrintFmt(short_desc), DN_Str8PrintFmt(msg)); - DN_Date date = DN_OS_DateLocalTimeNow(); + va_list args; + va_start(args, fmt); + DN_Str8 msg = DN_Str8FromFmtVArena(&scratch.arena, fmt, args); + va_end(args); - // NOTE: 12-hour conversion - DN_U8 hour12 = date.hour % 12; - if (hour12 == 0) - hour12 = 12; - char const *am_pm = date.hour < 12 ? "AM" : "PM"; + DN_Str8 cmds[] = { + cli_args->exe_path, + DN_Str8Lit("--account-secret"), + cli_args->account_secret, + DN_Str8Lit("--seed-node-url"), + cli_args->seed_node_url, + DN_Str8Lit("--display-name"), + DN_Str8FromFmtArena(&scratch.arena, "\"%.*s\"", DN_Str8PrintFmt(cli_args->display_name)), + DN_Str8Lit("send"), + sesh_pkey_hex, + msg, + }; - // Time-of-day emoji - DN_Str8 time_emoji = {}; - if (date.hour >= 5 && date.hour <= 11) - time_emoji = DN_Str8Lit("☀️"); - else if (date.hour >= 12 && date.hour <= 16) - time_emoji = DN_Str8Lit("🌤️"); - else if (date.hour >= 17 && date.hour <= 19) - time_emoji = DN_Str8Lit("🌅"); - else if (date.hour >= 20 && date.hour <= 23) - time_emoji = DN_Str8Lit("✨"); - else - time_emoji = DN_Str8Lit("🌑"); + DN_Str8Slice cmd_line = {}; + cmd_line.data = cmds; + cmd_line.count = DN_ArrayCountU(cmds); - if (mode == DN_SHLogMode_Detached) { - DN_SH_MsgSendDetachedFmt(send, - cli_args, - "%.*s%.*s\n" - "%.*s %u-%02u-%02u %u:%02u:%02u %s\n" - "%.*s", - DN_Str8PrintFmt(prefix), - DN_Str8PrintFmt(short_desc), - DN_Str8PrintFmt(time_emoji), - date.year, - date.month, - date.day, - hour12, - date.minutes, - date.seconds, - am_pm, - DN_Str8PrintFmt(msg)); - } else { - DN_Assert(mode == DN_SHLogMode_Blocking); - DN_SH_MsgSendBlockingFmt(send, - cli_args, - "%.*s %.*s\n" - "%.*s %u-%02u-%02u %u:%02u:%02u %s\n" - "%.*s", - DN_Str8PrintFmt(prefix), - DN_Str8PrintFmt(short_desc), - DN_Str8PrintFmt(time_emoji), - date.year, - date.month, - date.day, - hour12, - date.minutes, - date.seconds, - am_pm, - DN_Str8PrintFmt(msg)); - } + DN_OSExecArgs exec_args = {}; + exec_args.flags |= DN_OSExecFlags_SaveOutput; + DN_OSExecResult exec = DN_OS_Exec(cmd_line, &exec_args, &scratch.arena, nullptr); + DN_LogInfoF("OUT (exit code:%zu, os: %zu): %.*s", exec.exit_code, exec.os_error_code, DN_Str8PrintFmt(exec.stdout_text)); + DN_LogInfoF("ERR: %.*s", DN_Str8PrintFmt(exec.stderr_text)); DN_TCScratchEnd(&scratch); -} -void DN_SH_LogBroadcastBlockingFmt(DN_LogType type, DN_SHMsgSendData send, DN_SHCLIArgs *cli_args, DN_Str8 short_desc, char const *fmt, ...) -{ - va_list args; - va_start(args, fmt); - DN_SH_LogBroadcastFmtV(DN_SHLogMode_Blocking, type, send, cli_args, short_desc, fmt, args); - va_end(args); -} - -void DN_SH_LogBroadcastDetachedFmt(DN_LogType type, DN_SHMsgSendData send, DN_SHCLIArgs *cli_args, DN_Str8 short_desc, char const *fmt, ...) -{ - va_list args; - va_start(args, fmt); - DN_SH_LogBroadcastFmtV(DN_SHLogMode_Detached, type, send, cli_args, short_desc, fmt, args); - va_end(args); + bool result = exec.os_error_code == 0 && exec.exit_code == 0; + return result; } diff --git a/Source/Extra/dn_seshc.h b/Source/Extra/dn_seshc.h index 7ad7a68..1001b82 100644 --- a/Source/Extra/dn_seshc.h +++ b/Source/Extra/dn_seshc.h @@ -10,8 +10,10 @@ struct DN_SHCLIArgs { bool valid; DN_Str8 exe_path; - DN_Str8 ini_path; + DN_Str8 account_secret; DN_Str8 seed_node_url; + DN_Str8 display_name; + DN_Str8 recipient_pkey; }; struct DN_SHCLIEatArgResult @@ -23,60 +25,12 @@ struct DN_SHCLIEatArgResult DN_USize arg_count; // Next argument count that that the caller should assume }; -struct DN_SHMsgSendData -{ - DN_Str8 recipient; // Either `ini:` or "05-prefix session account ID" - DN_Str8 account_secret; // Seshc EXE --account-secret format - DN_Str8 display_name; -}; - -struct DN_SHMsgSendAsyncHandle -{ - DN_OSThread thread; -}; - -enum DN_SHLogMode -{ - DN_SHLogMode_Blocking, - DN_SHLogMode_Detached, -}; - -enum DN_SHMsgSendAsyncStatus -{ - DN_SHMsgSendAsyncStatus_Timeout, - DN_SHMsgSendAsyncStatus_Success, - DN_SHMsgSendAsyncStatus_Failed, -}; - - // NOTE: Seshc // Overview // Helper library that provides some useful APIs for programatically calling the Seshc CLI // executable to send messages from your C/C++ application. - -// API -// DN_SH_MsgSendDetachedFmt -// Send a 1-on-1 message with a background thread that is spawned on demand and detached. If the -// application exits before this thread has completed sending the message, the message will not -// be sent. - -// DN_SH_MsgSendBlockingFmt -// Send a 1-on-1 message using the current executing thread, blocking control-flow until the -// message has been sent. Returns true if the send was successful, false otherwise. - -// DN_SH_MsgSendAsyncFmt -// Send a 1-on-1 message with a background thread that is spawned on demand. A handle to the -// thread is returned that can be waited on. - -DN_SHCLIArgs DN_SH_CLIArgsCopy (DN_SHCLIArgs const *src, DN_Arena *arena); -DN_Str8 DN_SH_CLIOptionsStr8 (); -DN_SHCLIEatArgResult DN_SH_CLIEatArg (DN_SHCLIArgs *args, char const **arg_ptr, int arg_count); -bool DN_SH_MsgSendBlockingFmt (DN_SHMsgSendData send, DN_SHCLIArgs *cli_args, char const *fmt, ...); -void DN_SH_MsgSendDetachedFmt (DN_SHMsgSendData send, DN_SHCLIArgs *cli_args, char const *fmt, ...); -DN_SHMsgSendAsyncHandle DN_SH_MsgSendAsyncFmt (DN_SHMsgSendData send, DN_SHCLIArgs *cli_args, DN_Arena *arena, char const *fmt, ...); -DN_SHMsgSendAsyncStatus DN_SH_MsgSendAsyncWait (DN_SHMsgSendAsyncHandle *handle, DN_U32 timeout_ms); -void DN_SH_LogBroadcastFmtV (DN_SHLogMode mode, DN_LogType type, DN_SHMsgSendData send, DN_SHCLIArgs *cli_args, DN_Str8 short_desc, char const *fmt, va_list args); -void DN_SH_LogBroadcastBlockingFmt (DN_LogType type, DN_SHMsgSendData send, DN_SHCLIArgs *cli_args, DN_Str8 short_desc, char const *fmt, ...); -void DN_SH_LogBroadcastDetachedFmt (DN_LogType type, DN_SHMsgSendData send, DN_SHCLIArgs *cli_args, DN_Str8 short_desc, char const *fmt, ...); +DN_Str8 DN_SH_CLIOptionsStr8 (); +DN_SHCLIEatArgResult DN_SH_CLIEatArg (DN_SHCLIArgs *args, char const **arg_ptr, int arg_count); +bool DN_SH_CLIArgsSendDMFmt(DN_SHCLIArgs *cli_args, DN_Str8 sesh_pkey_hex, char const *fmt, ...); #endif // #if !defined(DN_SESHC_H) diff --git a/Source/OS/dn_os_posix.cpp b/Source/OS/dn_os_posix.cpp index a8290c9..0a84cba 100644 --- a/Source/OS/dn_os_posix.cpp +++ b/Source/OS/dn_os_posix.cpp @@ -228,7 +228,7 @@ DN_API bool DN_OS_SetEnvVar(DN_Str8 name, DN_Str8 value) DN_API DN_OSDiskSpace DN_OS_DiskSpace(DN_Str8 path) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_OSDiskSpace result = {}; DN_Str8 path_z_terminated = DN_Str8FromStr8Arena(path, &scratch.arena); struct statvfs info = {}; @@ -237,11 +237,11 @@ DN_API DN_OSDiskSpace DN_OS_DiskSpace(DN_Str8 path) result.avail = info.f_bavail * info.f_frsize; result.size = info.f_blocks * info.f_frsize; } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } -DN_API DN_Str8 DN_OS_EXEPath(DN_Arena *arena) +DN_API DN_Str8 DN_OS_ExePath(DN_Arena *arena) { DN_Str8 result = {}; if (!arena) @@ -387,7 +387,7 @@ DN_API bool DN_OS_FileCopy(DN_Str8 src, DN_Str8 dest, bool overwrite, DN_ErrSink result = (bytes_written == stat_existing.st_size); if (!result) { int error_code = errno; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str8 file_size_str8 = DN_Str8FromByteCount(scratch.arena, stat_existing.st_size, DN_ByteCountType_Auto); DN_Str8 bytes_written_str8 = DN_Str8FromByteCount(scratch.arena, bytes_written, DN_ByteCountType_Auto); DN_rrSinkAppendF(error, @@ -400,7 +400,7 @@ DN_API bool DN_OS_FileCopy(DN_Str8 src, DN_Str8 dest, bool overwrite, DN_ErrSink DN_Str8PrintFmt(file_size_str8), error_code, strerror(error_code)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } #endif @@ -513,10 +513,10 @@ DN_API DN_OSFileRead DN_OS_FileRead(DN_OSFile *file, void *buffer, DN_USize size result.bytes_read = fread(buffer, 1, size, DN_Cast(FILE *) file->handle); if (feof(DN_Cast(FILE*)file->handle)) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str8x32 buffer_size_str8 = DN_Str8x32FromByteCountU64Auto(size); DN_ErrSinkAppendF(err, 1, "Failed to read %S from file", buffer_size_str8); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -532,10 +532,10 @@ DN_API bool DN_OS_FileWritePtr(DN_OSFile *file, void const *buffer, DN_USize siz fwrite(buffer, DN_Cast(DN_USize) size, 1 /*count*/, DN_Cast(FILE *) file->handle) == 1 /*count*/; if (!result) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str8x32 buffer_size_str8 = DN_Str8x32FromByteCountU64Auto(size); DN_ErrSinkAppendF(err, 1, "Failed to write buffer (%s) to file handle", DN_Str8PrintFmt(buffer_size_str8)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } return result; } @@ -623,7 +623,7 @@ DN_API bool DN_OS_PathIsDir(DN_Str8 path) DN_API bool DN_OS_PathMakeDir(DN_Str8 path) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); bool result = true; // TODO(doyle): Implement this without using the path indexes, it's not @@ -650,7 +650,7 @@ DN_API bool DN_OS_PathMakeDir(DN_Str8 path) // NOTE: There's something that exists in at this path, but // it's not a directory. This request to make a directory is // invalid. - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return false; } else if (DN_OS_PathIsDir(copy)) { // NOTE: We found a directory, we can stop here and start @@ -675,7 +675,7 @@ DN_API bool DN_OS_PathMakeDir(DN_Str8 path) if (index != 0) copy.data[path_index] = temp; } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -789,7 +789,7 @@ DN_API DN_OSExecResult DN_OS_ExecWait(DN_OSExecAsyncHandle handle, // NOTE: Read the data from the read end of the pipe if (result.os_error_code == 0) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); if (arena && handle.stdout_read) { char buffer[4096]; DN_Str8Builder builder = DN_Str8BuilderFromArena(&scratch.arena); @@ -817,7 +817,7 @@ DN_API DN_OSExecResult DN_OS_ExecWait(DN_OSExecAsyncHandle handle, result.stderr_text = DN_Str8FromStr8BuilderArena(&builder, arena); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } close(stdout_pipe[DN_OSPipeType__Read]); @@ -826,25 +826,25 @@ DN_API DN_OSExecResult DN_OS_ExecWait(DN_OSExecAsyncHandle handle, } DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, - DN_OSExecArgs *args, + DN_OSExecArgs args, DN_ErrSink *error) { #if defined(DN_PLATFORM_EMSCRIPTEN) DN_AssertInvalidCodePathF("Unsupported operation"); #endif - DN_VerifyWarningF(args->environment.count == 0, "Environment variables are unimplemented in POSIX"); + DN_VerifyWarningF(args.environment.count == 0, "Environment variables are unimplemented in POSIX"); DN_OSExecAsyncHandle result = {}; if (cmd_line.count == 0) return result; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); - DN_DEFER { DN_TCScratchEnd(&scratch); }; + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); + DN_DEFER { DN_TcScratchEnd(&scratch); }; DN_Str8 cmd_rendered = DN_Str8SliceRender(cmd_line, DN_Str8Lit(" "), &scratch.arena); int stdout_pipe[DN_OSPipeType__Count] = {}; int stderr_pipe[DN_OSPipeType__Count] = {}; // NOTE: Open stdout pipe - if (DN_BitIsSet(args->flags, DN_OSExecFlags_SaveStdout)) { + if (DN_BitIsSet(args.flags, DN_OSExecFlags_SaveStdout)) { if (pipe(stdout_pipe) == -1) { result.os_error_code = errno; DN_ErrSinkAppendF( @@ -868,8 +868,8 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, }; // NOTE: Open stderr pipe ////////////////////////////////////////////////////////////////////// - if (DN_BitIsSet(args->flags, DN_OSExecFlags_SaveStderr)) { - if (DN_BitIsSet(args->flags, DN_OSExecFlags_MergeStderrToStdout)) { + if (DN_BitIsSet(args.flags, DN_OSExecFlags_SaveStderr)) { + if (DN_BitIsSet(args.flags, DN_OSExecFlags_MergeStderrToStdout)) { stderr_pipe[DN_OSPipeType__Read] = stdout_pipe[DN_OSPipeType__Read]; stderr_pipe[DN_OSPipeType__Write] = stdout_pipe[DN_OSPipeType__Write]; } else if (pipe(stderr_pipe) == -1) { @@ -907,7 +907,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, } if (child_pid == 0) { // Child process - if (DN_BitIsSet(args->flags, DN_OSExecFlags_SaveStdout) && + if (DN_BitIsSet(args.flags, DN_OSExecFlags_SaveStdout) && (dup2(stdout_pipe[DN_OSPipeType__Write], STDOUT_FILENO) == -1)) { result.os_error_code = errno; DN_ErrSinkAppendF( @@ -919,7 +919,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, return result; } - if (DN_BitIsSet(args->flags, DN_OSExecFlags_SaveStderr) && + if (DN_BitIsSet(args.flags, DN_OSExecFlags_SaveStderr) && (dup2(stderr_pipe[DN_OSPipeType__Write], STDERR_FILENO) == -1)) { result.os_error_code = errno; DN_ErrSinkAppendF( @@ -962,9 +962,9 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, free(prev_working_dir); }; - if (args->working_dir.count) { + if (args.working_dir.count) { prev_working_dir = get_current_dir_name(); - DN_Str8 working_dir = DN_Str8FromStr8Arena(args->working_dir, &scratch.arena); + DN_Str8 working_dir = DN_Str8FromStr8Arena(args.working_dir, &scratch.arena); if (chdir(working_dir.data) == -1) { result.os_error_code = errno; DN_ErrSinkAppendF( @@ -999,7 +999,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, &stdout_pipe[DN_OSPipeType__Write], sizeof(stdout_pipe[DN_OSPipeType__Write])); - if (DN_BitIsSet(args->flags, DN_OSExecFlags_SaveStderr) && DN_BitIsNotSet(args->flags, DN_OSExecFlags_MergeStderrToStdout)) { + if (DN_BitIsSet(args.flags, DN_OSExecFlags_SaveStderr) && DN_BitIsNotSet(args.flags, DN_OSExecFlags_MergeStderrToStdout)) { DN_Memcpy(&result.stderr_read, &stderr_pipe[DN_OSPipeType__Read], sizeof(stderr_pipe[DN_OSPipeType__Read])); @@ -1007,7 +1007,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, &stderr_pipe[DN_OSPipeType__Write], sizeof(stderr_pipe[DN_OSPipeType__Write])); } - result.exec_flags = args->flags; + result.exec_flags = args.flags; DN_Memcpy(&result.process, &child_pid, sizeof(child_pid)); return result; } @@ -1017,7 +1017,7 @@ DN_API DN_OSExecResult DN_OS_ExecPump(DN_OSExecAsyncHandle handle, size_t *stdout_size, char *stderr_buffer, size_t *stderr_size, - DN_U32 timeout_ms, + DN_U32 timeout_ms, DN_ErrSink *err) { DN_AssertInvalidCodePath; @@ -1322,7 +1322,7 @@ DN_API bool DN_OS_ThreadInitLane(DN_OSThread *thread, DN_OSThreadFunc *func, DN_ return result; } -DN_API bool DN_OS_ThreadJoin(DN_OSThread *thread, DN_U32 timeout_ms, DN_TCDeinitArenas deinit_arenas) +DN_API bool DN_OS_ThreadJoin(DN_OSThread *thread, DN_U32 timeout_ms, DN_TcDeinitArenas deinit_arenas) { bool result = true; if (thread && thread->handle) { @@ -1337,7 +1337,7 @@ DN_API bool DN_OS_ThreadJoin(DN_OSThread *thread, DN_U32 timeout_ms, DN_TCDeinit pthread_join(thread_id, &return_val); thread->handle = {}; thread->thread_id = {}; - DN_TCDeinit(&thread->context, deinit_arenas); + DN_TcDeinit(&thread->context, deinit_arenas); DN_OS_SemaphoreDeinit(&thread->join_done_sem); } else { result = false; @@ -1371,11 +1371,11 @@ DN_API void DN_OS_PosixThreadSetName(DN_Str8 name) #if defined(DN_PLATFORM_EMSCRIPTEN) (void)name; #else - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str8 copy = DN_Str8FromStr8Arena(name, &scratch.arena); pthread_t thread = pthread_self(); pthread_setname_np(thread, (char *)copy.data); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); #endif } @@ -1395,7 +1395,7 @@ DN_API DN_OSPosixProcSelfStatus DN_OS_PosixProcSelfStatus() DN_OSFile file = DN_OS_FileOpen(DN_Str8Lit("/proc/self/status"), DN_OSFileOpen_OpenIfExist, DN_OSFileAccess_Read, nullptr); if (!file.error) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); char buf[256]; DN_Str8Builder builder = DN_Str8BuilderFromArena(&scratch.arena); for (;;) { @@ -1439,7 +1439,7 @@ DN_API DN_OSPosixProcSelfStatus DN_OS_PosixProcSelfStatus() DN_Assert(to_u64.success); } } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } DN_OS_FileClose(&file); return result; diff --git a/Source/OS/dn_os_w32.cpp b/Source/OS/dn_os_w32.cpp index 943d81e..5338207 100644 --- a/Source/OS/dn_os_w32.cpp +++ b/Source/OS/dn_os_w32.cpp @@ -210,7 +210,7 @@ DN_API void DN_OS_GenBytesSecure(void *buffer, DN_U32 size) DN_API DN_OSDiskSpace DN_OS_DiskSpace(DN_Str8 path) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_OSDiskSpace result = {}; DN_Str16 path16 = DN_OS_W32Str8ToStr16(&scratch.arena, path); @@ -221,36 +221,36 @@ DN_API DN_OSDiskSpace DN_OS_DiskSpace(DN_Str8 path) &free_bytes_avail_to_caller, &total_number_of_bytes, &total_number_of_free_bytes)) { - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } result.success = true; result.avail = free_bytes_avail_to_caller.QuadPart; result.size = total_number_of_bytes.QuadPart; - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } DN_API bool DN_OS_SetEnvVar(DN_Str8 name, DN_Str8 value) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str16 name16 = DN_OS_W32Str8ToStr16(&scratch.arena, name); DN_Str16 value16 = DN_OS_W32Str8ToStr16(&scratch.arena, value); bool result = SetEnvironmentVariableW(name16.data, value16.data) != 0; - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } -DN_API DN_Str8 DN_OS_EXEPath(DN_Arena *arena) +DN_API DN_Str8 DN_OS_ExePath(DN_Arena *arena) { DN_Str8 result = {}; if (!arena) return result; - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_Str16 exe_dir16 = DN_OS_W32EXEPathW(&scratch.arena); result = DN_OS_W32Str16ToStr8(arena, exe_dir16); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -287,7 +287,7 @@ static DN_U64 DN_OS_W32FileTimeToSeconds_(FILETIME const *time) DN_API bool DN_OS_FileCopy(DN_Str8 src, DN_Str8 dest, bool overwrite, DN_ErrSink *err) { bool result = false; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str16 src16 = DN_OS_W32Str8ToStr16(&scratch.arena, src); DN_Str16 dest16 = DN_OS_W32Str8ToStr16(&scratch.arena, dest); @@ -304,14 +304,14 @@ DN_API bool DN_OS_FileCopy(DN_Str8 src, DN_Str8 dest, bool overwrite, DN_ErrSink win_error.code, DN_Str8PrintFmt(win_error.msg)); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } DN_API bool DN_OS_FileMove(DN_Str8 src, DN_Str8 dest, bool overwrite, DN_ErrSink *err) { bool result = false; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str16 src16 = DN_OS_W32Str8ToStr16(&scratch.arena, src); DN_Str16 dest16 = DN_OS_W32Str8ToStr16(&scratch.arena, dest); @@ -330,7 +330,7 @@ DN_API bool DN_OS_FileMove(DN_Str8 src, DN_Str8 dest, bool overwrite, DN_ErrSink win_error.code, DN_Str8PrintFmt(win_error.msg)); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -367,7 +367,7 @@ DN_API DN_OSFile DN_OS_FileOpen(DN_Str8 path, DN_OSFileOpen open_mode, DN_OSFile access_mode |= GENERIC_EXECUTE; } - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str16 path16 = DN_OS_W32Str8ToStr16(&scratch.arena, path); void *handle = CreateFileW(/*LPCWSTR lpFileName*/ path16.data, /*DWORD dwDesiredAccess*/ access_mode, @@ -381,12 +381,12 @@ DN_API DN_OSFile DN_OS_FileOpen(DN_Str8 path, DN_OSFileOpen open_mode, DN_OSFile DN_OSW32Error win_error = DN_OS_W32LastError(&scratch.arena); result.error = true; DN_ErrSinkAppendF(err, win_error.code, "Failed to open file at '%.*s': '%.*s'", DN_Str8PrintFmt(path), DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } result.handle = handle; - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -409,15 +409,15 @@ DN_API DN_OSFileRead DN_OS_FileRead(DN_OSFile *file, void *buffer, DN_USize size /*LPDWORD lpNumberOfByesRead*/ &bytes_read, /*LPOVERLAPPED lpOverlapped*/ nullptr); if (read_result == 0) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_OSW32Error win_error = DN_OS_W32LastError(&scratch.arena); DN_ErrSinkAppendF(err, win_error.code, "Failed to read data from file: (%u) %.*s", win_error.code, DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } if (bytes_read != size) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_OSW32Error win_error = DN_OS_W32LastError(&scratch.arena); DN_ErrSinkAppendF( err, @@ -427,7 +427,7 @@ DN_API DN_OSFileRead DN_OS_FileRead(DN_OSFile *file, void *buffer, DN_USize size DN_Cast(unsigned long) size, win_error.code, DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -451,11 +451,11 @@ DN_API bool DN_OS_FileWritePtr(DN_OSFile *file, void const *buffer, DN_USize siz } if (!result) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_OSW32Error win_error = DN_OS_W32LastError(&scratch.arena); DN_Str8x32 buffer_size_str8 = DN_Str8x32FromByteCountU64Auto(size); DN_ErrSinkAppendF(err, win_error.code, "Failed to write buffer (%.*s) to file handle: %.*s", DN_Str8PrintFmt(buffer_size_str8), DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } return result; } @@ -467,10 +467,10 @@ DN_API bool DN_OS_FileFlush(DN_OSFile *file, DN_ErrSink *err) BOOL result = FlushFileBuffers(DN_Cast(HANDLE) file->handle); if (!result) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_OSW32Error win_error = DN_OS_W32LastError(&scratch.arena); DN_ErrSinkAppendF(err, win_error.code, "Failed to flush file buffer to disk: %.*s", DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } return DN_Cast(bool) result; @@ -490,12 +490,12 @@ DN_API DN_OSPathInfo DN_OS_PathInfo(DN_Str8 path) if (path.count == 0) return result; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str16 path16 = DN_OS_W32Str8ToStr16(&scratch.arena, path); WIN32_FILE_ATTRIBUTE_DATA attrib_data = {}; if (!GetFileAttributesExW(path16.data, GetFileExInfoStandard, &attrib_data)) { - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -516,7 +516,7 @@ DN_API DN_OSPathInfo DN_OS_PathInfo(DN_Str8 path) result.type = DN_OSPathInfoType_File; } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -526,14 +526,14 @@ DN_API bool DN_OS_PathDelete(DN_Str8 path) if (path.count == 0) return result; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str16 path16 = DN_OS_W32Str8ToStr16(&scratch.arena, path); if (path16.count) { result = DeleteFileW(path16.data); if (!result) result = RemoveDirectoryW(path16.data); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -543,7 +543,7 @@ DN_API bool DN_OS_PathIsFile(DN_Str8 path) if (path.count == 0) return result; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str16 path16 = DN_OS_W32Str8ToStr16(&scratch.arena, path); if (path16.count) { WIN32_FILE_ATTRIBUTE_DATA attrib_data = {}; @@ -551,7 +551,7 @@ DN_API bool DN_OS_PathIsFile(DN_Str8 path) result = (attrib_data.dwFileAttributes != INVALID_FILE_ATTRIBUTES) && !(attrib_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -561,7 +561,7 @@ DN_API bool DN_OS_PathIsDir(DN_Str8 path) if (path.count == 0) return result; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str16 path16 = DN_OS_W32Str8ToStr16(&scratch.arena, path); if (path16.count) { WIN32_FILE_ATTRIBUTE_DATA attrib_data = {}; @@ -570,14 +570,14 @@ DN_API bool DN_OS_PathIsDir(DN_Str8 path) (attrib_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } DN_API bool DN_OS_PathMakeDir(DN_Str8 path) { bool result = true; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str16 path16 = DN_OS_W32Str8ToStr16(&scratch.arena, path); // NOTE: Go back from the end of the string to all the directories in the @@ -610,7 +610,7 @@ DN_API bool DN_OS_PathMakeDir(DN_Str8 path) // NOTE: There's some kind of file that exists at the path // but it's not a directory. This request to make a // directory is invalid. - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return false; } } else { @@ -623,7 +623,7 @@ DN_API bool DN_OS_PathMakeDir(DN_Str8 path) path16.data[index] = temp; // Undo null termination } } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -632,7 +632,7 @@ DN_API bool DN_OS_PathIterateDir(DN_Str8 path, DN_OSDirIterator *it) if (path.count == 0 || !it || path.count <= 0) return false; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_OSW32FolderIteratorW wide_it = {}; DN_Str16 path16 = {}; if (it->handle) { @@ -656,7 +656,7 @@ DN_API bool DN_OS_PathIterateDir(DN_Str8 path, DN_OSDirIterator *it) path16 = DN_OS_W32Str8ToStr16(&scratch.arena, adjusted_path); if (path16.count <= 0) { // Conversion error - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return false; } } @@ -668,7 +668,7 @@ DN_API bool DN_OS_PathIterateDir(DN_Str8 path, DN_OSDirIterator *it) it->file_name = DN_Str8FromPtr(it->buffer, size); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -712,9 +712,9 @@ DN_API DN_OSExecResult DN_OS_ExecPump(DN_OSExecAsyncHandle handle, return result; } - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); - DWORD stdout_bytes_available = 0; - DWORD stderr_bytes_available = 0; + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); + DWORD stdout_bytes_available = 0; + DWORD stderr_bytes_available = 0; PeekNamedPipe(handle.stdout_read, nullptr, 0, nullptr, &stdout_bytes_available, nullptr); PeekNamedPipe(handle.stderr_read, nullptr, 0, nullptr, &stderr_bytes_available, nullptr); @@ -726,9 +726,11 @@ DN_API DN_OSExecResult DN_OS_ExecPump(DN_OSExecAsyncHandle handle, DN_OSW32Error win_error = DN_OS_W32LastError(&scratch.arena); result.os_error_code = win_error.code; DN_ErrSinkAppendF(err, result.os_error_code, "Executed command failed to terminate: %.*s", DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; - } else if (exec_result == WAIT_TIMEOUT || exec_result == WAIT_OBJECT_0) { + } + + if (exec_result == WAIT_TIMEOUT || exec_result == WAIT_OBJECT_0) { // NOTE: Read stdout from process // If the pipes are full, the process will block. We periodically // flush the pipes to make sure this doesn't happen @@ -796,7 +798,7 @@ DN_API DN_OSExecResult DN_OS_ExecPump(DN_OSExecAsyncHandle handle, result.stdout_text = DN_Str8FromPtr(stdout_buffer, stdout_size ? *stdout_size : 0); result.stderr_text = DN_Str8FromPtr(stderr_buffer, stderr_size ? *stderr_size : 0); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -818,7 +820,7 @@ DN_API DN_OSExecResult DN_OS_ExecWait(DN_OSExecAsyncHandle handle, DN_Arena *are return result; } - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_Str8Builder stdout_builder = {}; DN_Str8Builder stderr_builder = {}; if (arena) { @@ -843,11 +845,11 @@ DN_API DN_OSExecResult DN_OS_ExecWait(DN_OSExecAsyncHandle handle, DN_Arena *are // NOTE: Get stdout/stderr. If no arena is passed this is a no-op result.stdout_text = DN_Str8FromStr8BuilderArena(&stdout_builder, arena); result.stderr_text = DN_Str8FromStr8BuilderArena(&stderr_builder, arena); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } -DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs *args, DN_ErrSink *err) +DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs args, DN_ErrSink *err) { // NOTE: Pre-amble DN_OSExecAsyncHandle result = {}; @@ -856,7 +858,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs // NOTE: Render the command line into single string to pass into the Win32 API. We'll quote the // string on behalf of the user if there's whitespace in the string - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str8 cmd = {}; { DN_USize count_req = 0; @@ -900,9 +902,9 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs DN_AssertF(cmd.count < DN_Kilobytes(32), "Command exceeds the allowable size in Win32"); DN_Str16 cmd16 = DN_OS_W32Str8ToStr16(&scratch.arena, cmd); - DN_Str16 working_dir16 = DN_OS_W32Str8ToStr16(&scratch.arena, args->working_dir); + DN_Str16 working_dir16 = DN_OS_W32Str8ToStr16(&scratch.arena, args.working_dir); DN_Str8Builder env_builder = DN_Str8BuilderFromArena(&scratch.arena); - DN_Str8BuilderAppendArrayRef(&env_builder, args->environment.data, args->environment.count); + DN_Str8BuilderAppendArrayRef(&env_builder, args.environment.data, args.environment.count); if (env_builder.string_size) DN_Str8BuilderAppendRef(&env_builder, DN_Str8Lit("\0")); @@ -927,7 +929,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs } }; - if (DN_BitIsSet(args->flags, DN_OSExecFlags_SaveStdout)) { + if (DN_BitIsSet(args.flags, DN_OSExecFlags_SaveStdout)) { if (!CreatePipe(&stdout_read, &stdout_write, &save_std_security_attribs, /*nSize*/ 0)) { DN_OSW32Error win_error = DN_OS_W32LastError(&scratch.arena); result.os_error_code = win_error.code; @@ -937,7 +939,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs "Failed to create stdout pipe to redirect the output of the command '%.*s': %.*s", DN_Str8PrintFmt(cmd), DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -950,7 +952,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs "execute command '%.*s': %.*s", DN_Str8PrintFmt(cmd), DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } } @@ -966,8 +968,8 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs } }; - if (DN_BitIsSet(args->flags, DN_OSExecFlags_SaveStderr)) { - if (DN_BitIsSet(args->flags, DN_OSExecFlags_MergeStderrToStdout)) { + if (DN_BitIsSet(args.flags, DN_OSExecFlags_SaveStderr)) { + if (DN_BitIsSet(args.flags, DN_OSExecFlags_MergeStderrToStdout)) { stderr_read = stdout_read; stderr_write = stdout_write; } else { @@ -980,7 +982,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs "Failed to create stderr pipe to redirect the output of the command '%.*s': %.*s", DN_Str8PrintFmt(cmd), DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -993,7 +995,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs "execute command '%.*s': %.*s", DN_Str8PrintFmt(cmd), DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } } @@ -1021,7 +1023,7 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs DN_OSW32Error win_error = DN_OS_W32LastError(&scratch.arena); result.os_error_code = win_error.code; DN_ErrSinkAppendF(err, result.os_error_code, "Failed to execute command '%.*s': %.*s", DN_Str8PrintFmt(cmd), DN_Str8PrintFmt(win_error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -1030,12 +1032,12 @@ DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync(DN_Str8Slice cmd_line, DN_OSExecArgs result.process = proc_info.hProcess; result.stdout_read = stdout_read; result.stdout_write = stdout_write; - if (DN_BitIsSet(args->flags, DN_OSExecFlags_SaveStderr) && DN_BitIsNotSet(args->flags, DN_OSExecFlags_MergeStderrToStdout)) { + if (DN_BitIsSet(args.flags, DN_OSExecFlags_SaveStderr) && DN_BitIsNotSet(args.flags, DN_OSExecFlags_MergeStderrToStdout)) { result.stderr_read = stderr_read; result.stderr_write = stderr_write; } - result.exec_flags = args->flags; - DN_TCScratchEnd(&scratch); + result.exec_flags = args.flags; + DN_TcScratchEnd(&scratch); return result; } @@ -1307,7 +1309,7 @@ DN_API bool DN_OS_ThreadInitLane(DN_OSThread *thread, DN_OSThreadFunc *func, DN_ return result; } -DN_API bool DN_OS_ThreadJoin(DN_OSThread *thread, DN_U32 timeout_ms, DN_TCDeinitArenas deinit_arenas) +DN_API bool DN_OS_ThreadJoin(DN_OSThread *thread, DN_U32 timeout_ms, DN_TcDeinitArenas deinit_arenas) { bool result = true; if (thread && thread->handle && thread->handle != INVALID_HANDLE_VALUE) { @@ -1318,7 +1320,7 @@ DN_API bool DN_OS_ThreadJoin(DN_OSThread *thread, DN_U32 timeout_ms, DN_TCDeinit CloseHandle(thread->handle); thread->handle = INVALID_HANDLE_VALUE; thread->thread_id = {}; - DN_TCDeinit(&thread->context, deinit_arenas); + DN_TcDeinit(&thread->context, deinit_arenas); } else { result = false; } @@ -1339,7 +1341,7 @@ DN_API void DN_OS_W32ThreadSetName(DN_Str8 name) // // See: https://learn.microsoft.com/en-us/windows/w32/api/processthreadsapi/nf-processthreadsapi-setthreaddescription DN_OSW32Core *w32 = DN_OS_W32GetCore(); - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); if (w32->set_thread_description) { DN_Str16 name16 = DN_OS_W32Str8ToStr16(&scratch.arena, name); w32->set_thread_description(GetCurrentThread(), (WCHAR *)name16.data); @@ -1371,7 +1373,7 @@ DN_API void DN_OS_W32ThreadSetName(DN_Str8 name) } DN_MSVC_WARNING_POP } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } DN_API DN_Str16 DN_OS_W32ErrorCodeToMsg16Alloc(DN_U32 error_code) @@ -1582,7 +1584,7 @@ DN_API DN_Str8 DN_OS_W32Str16ToStr8FromHeap(DN_Str16 src) // NOTE: Windows Executable Directory ////////////////////////////////////////// DN_API DN_Str16 DN_OS_W32EXEPathW(DN_Arena *arena) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_Str16 result = {}; DN_USize module_size = 0; wchar_t *module_path = nullptr; @@ -1590,7 +1592,7 @@ DN_API DN_Str16 DN_OS_W32EXEPathW(DN_Arena *arena) module_size += 256; module_path = DN_ArenaNewArray(&scratch.arena, wchar_t, module_size, DN_ZMem_No); if (!module_path) { - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } module_size = DN_Cast(DN_USize) GetModuleFileNameW(nullptr /*module*/, module_path, DN_Cast(int) module_size); @@ -1604,14 +1606,14 @@ DN_API DN_Str16 DN_OS_W32EXEPathW(DN_Arena *arena) result.count = module_size; DN_Memcpy(result.data, module_path, sizeof(wchar_t) * result.count); result.data[result.count] = 0; - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } -DN_API DN_Str16 DN_OS_W32EXEDirW(DN_Arena *arena) +DN_API DN_Str16 DN_OS_W32ExeDirW(DN_Arena *arena) { // TODO(doyle): Implement a DN_Str16_BinarySearchReverse - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_Str16 result = {}; DN_USize module_size = 0; wchar_t *module_path = nullptr; @@ -1619,7 +1621,7 @@ DN_API DN_Str16 DN_OS_W32EXEDirW(DN_Arena *arena) module_size += 256; module_path = DN_ArenaNewArray(&scratch.arena, wchar_t, module_size, DN_ZMem_No); if (!module_path) { - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } module_size = DN_Cast(DN_USize) GetModuleFileNameW(nullptr /*module*/, module_path, DN_Cast(int) module_size); @@ -1633,17 +1635,17 @@ DN_API DN_Str16 DN_OS_W32EXEDirW(DN_Arena *arena) result.count = index_of_last_slash; DN_Memcpy(result.data, module_path, sizeof(wchar_t) * result.count); result.data[result.count] = 0; - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } DN_API DN_Str8 DN_OS_W32WorkingDir(DN_Arena *arena, DN_Str8 suffix) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_Str16 suffix16 = DN_OS_W32Str8ToStr16(&scratch.arena, suffix); DN_Str16 dir16 = DN_OS_W32WorkingDirW(&scratch.arena, suffix16); DN_Str8 result = DN_OS_W32Str16ToStr8(arena, dir16); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -1653,26 +1655,26 @@ DN_API DN_Str16 DN_OS_W32WorkingDirW(DN_Arena *arena, DN_Str16 suffix) DN_Str16 result = {}; // NOTE: required_size is the size required *including* the null-terminator - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); unsigned long required_size = GetCurrentDirectoryW(0, nullptr); unsigned long desired_size = required_size + DN_Cast(unsigned long) suffix.count; wchar_t *scratch_w_path = DN_ArenaNewArray(&scratch.arena, wchar_t, desired_size, DN_ZMem_No); if (!scratch_w_path) { - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } unsigned long bytes_written_wo_null_terminator = GetCurrentDirectoryW(desired_size, scratch_w_path); if ((bytes_written_wo_null_terminator + 1) != required_size) { // TODO(dn): Error - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } wchar_t *w_path = DN_ArenaNewArray(arena, wchar_t, desired_size, DN_ZMem_No); if (!w_path) { - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -1683,7 +1685,7 @@ DN_API DN_Str16 DN_OS_W32WorkingDirW(DN_Arena *arena, DN_Str16 suffix) } result = DN_Str16{w_path, DN_Cast(DN_USize)(desired_size - 1)}; - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } diff --git a/Source/Standalone/dn_sha3.h b/Source/Standalone/dn_sha3.h index f5ccc4a..509aa4f 100644 --- a/Source/Standalone/dn_sha3.h +++ b/Source/Standalone/dn_sha3.h @@ -681,7 +681,7 @@ enum DN_SHA3TestHash static void DN_SHA3_TestHashDispatch_(DN_TestCore *test, DN_SHA3TestHash hash_type, DN_Str8 input) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&test->arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&test->arena, 1); DN_Str8 input_hex = DN_Str8HexFromPtrBytesArena(input.data, input.count, &scratch.arena, DN_TrimLeadingZero_No); switch (hash_type) { case DN_SHA3TestHash_Count: DN_AssertInvalidCodePath; break; @@ -741,7 +741,7 @@ static void DN_SHA3_TestHashDispatch_(DN_TestCore *test, DN_SHA3TestHash hash_ty DN_TestVerifyBytesEqF(test, DN_Str8FromLitArray(hash.data), DN_Str8FromLitArray(expect.data), "Input: %.*s", DN_Str8PrintFmt(input_hex)); } break; } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } DN_TestCore DN_SHA3_TestSuite(DN_Arena *arena) @@ -780,13 +780,13 @@ DN_TestCore DN_SHA3_TestSuite(DN_Arena *arena) // NOTE: Test SHA3 against some deterministic inputs generated from a PRNG for (DN_TestScopeF(&result, "[%.*s] Deterministic random inputs", DN_Str8PrintFmt(hash_name))) { - DN_PCG32 rng = DN_PCG32Init(0xd48e'be21'2af8'733d); + DN_Pcg32 rng = DN_Pcg32Init(0xd48e'be21'2af8'733d); for (DN_USize index = 0; index < 128; index++) { // NOTE: Create a 4kb buffer with the deterministic contents char src[4096] = {}; - DN_U32 src_size = DN_PCG32Range(&rng, 0, sizeof(src)); + DN_U32 src_size = DN_Pcg32Range(&rng, 0, sizeof(src)); for (DN_USize src_index = 0; src_index < src_size; src_index++) - src[src_index] = DN_Cast(char) DN_PCG32Range(&rng, 0, 255); + src[src_index] = DN_Cast(char) DN_Pcg32Range(&rng, 0, 255); // NOTE: Do the hashing DN_Str8 input = DN_Str8FromPtr(src, src_size); diff --git a/Source/dn.cpp b/Source/dn.cpp index 16d427d..861d73b 100644 --- a/Source/dn.cpp +++ b/Source/dn.cpp @@ -19,7 +19,7 @@ enum DN_ArenaUAFCheckReportType_ DN_Core *g_dn_; -DN_API void DN_Init(DN_Core *dn, DN_InitFlags flags, DN_TCInitArgs args) +DN_API void DN_Init(DN_Core *dn, DN_InitFlags flags, DN_TcInitArgs args) { DN_Set(dn); dn->init_flags = flags; @@ -91,8 +91,8 @@ DN_API void DN_Init(DN_Core *dn, DN_InitFlags flags, DN_TCInitArgs args) #endif // NOTE: Initialise thread context - DN_TCInitFromHeap(&dn->main_tc, DN_OS_ThreadID(), args, DN_OS_HeapInitDefault()); - DN_TCEquip(&dn->main_tc); + DN_TcInitFromHeap(&dn->main_tc, DN_OS_ThreadID(), args, DN_OS_HeapInitDefault()); + DN_TcEquip(&dn->main_tc); } if (DN_BitIsSet(flags, DN_InitFlags_LeakTracker)) { @@ -224,7 +224,7 @@ DN_API bool DN_VerifyArgsF(DN_VerifyType type, bool expr, DN_CallSite call_site, if (result) return result; - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); { DN_Str8Builder builder = DN_Str8BuilderFromArena(&scratch.arena); @@ -251,7 +251,7 @@ DN_API bool DN_VerifyArgsF(DN_VerifyType type, bool expr, DN_CallSite call_site, DN_LogTypeParam log_type_param = DN_LogTypeParamFromType(log_type); DN_LogPrintF(log_type_param, call_site, DN_LogFlags_Nil, "%.*s", DN_Str8PrintFmt(log)); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); if (type == DN_VerifyType_Nil && DN_PARANOIA_LEVEL) { DN_DebugBreak; @@ -535,7 +535,7 @@ DN_API DN_CPUReport DN_CPUGetReport() case DN_CPUFeature_POPCNT: available = (fn_0000_[0x0001].reg.ecx & (1 << 23)); break; case DN_CPUFeature_RDRAND: available = (fn_0000_[0x0001].reg.ecx & (1 << 30)); break; case DN_CPUFeature_RDSEED: available = (fn_0000_[0x0007].reg.ebx & (1 << 18)); break; - case DN_CPUFeature_RDTSCP: available = (fn_8000_[0x0001].reg.edx & (1 << 27)); break; + case DN_CPUFeature_RDTscP: available = (fn_8000_[0x0001].reg.edx & (1 << 27)); break; case DN_CPUFeature_SHA: available = (fn_0000_[0x0007].reg.ebx & (1 << 29)); break; case DN_CPUFeature_SSE: available = (fn_0000_[0x0001].reg.edx & (1 << 25)); break; case DN_CPUFeature_SSE2: available = (fn_0000_[0x0001].reg.edx & (1 << 26)); break; @@ -544,7 +544,7 @@ DN_API DN_CPUReport DN_CPUGetReport() case DN_CPUFeature_SSE42: available = (fn_0000_[0x0001].reg.ecx & (1 << 20)); break; case DN_CPUFeature_SSE4A: available = (fn_8000_[0x0001].reg.ecx & (1 << 6)); break; case DN_CPUFeature_SSSE3: available = (fn_0000_[0x0001].reg.ecx & (1 << 9)); break; - case DN_CPUFeature_TSC: available = (fn_0000_[0x0001].reg.edx & (1 << 4)); break; + case DN_CPUFeature_Tsc: available = (fn_0000_[0x0001].reg.edx & (1 << 4)); break; case DN_CPUFeature_TscInvariant: available = (fn_8000_[0x0007].reg.edx & (1 << 8)); break; case DN_CPUFeature_VAES: available = (fn_0000_[0x0007].reg.ecx & (1 << 9)); break; case DN_CPUFeature_VPCMULQDQ: available = (fn_0000_[0x0007].reg.ecx & (1 << 10)); break; @@ -1622,12 +1622,12 @@ static void DN_ArenaUAFCheck_(DN_Arena *arena, DN_ArenaUAFCheckReportType_ type) // NOTE: MSVC does not recognise %'u which is a STB extension which causes a lot of incorrect // format arguments warnings that we mute here. DN_MSVC_WARNING_PUSH - DN_MSVC_WARNING_DISABLE(6271) // Extra argument passed to 'DN_Str8FromFmtArena' + DN_MSVC_WARNING_DISABLE(6271) // Extra argument passed to 'DN_Str8FmtArena' DN_MSVC_WARNING_DISABLE(6067) // _Param_(10) in call to 'DN_LogPrint' must be the address of a string. Actual type: 'int'. DN_MSVC_WARNING_DISABLE(6273) // Non-integer passed as _Param_(11) when an integer is required in call to 'DN_LogPrint' Actual type: 'char *'. DN_Str8 error_msg = {}; if (type == DN_ArenaUAFCheckReportType_AllocViolation) { - error_msg = DN_Str8FromFmtAllocator(allocator, + error_msg = DN_Str8FmtAllocator(allocator, "\n\nArena use-after-free (UAF) detected in temporary memory usage! This allocation (trace " "shown above) is attempting to allocate memory inside the active temporary region (id: %'u) " "but belongs to a different region (id: %'u). This means when the active temporary region is " @@ -2087,7 +2087,7 @@ DN_API bool DN_ErrSinkEndLogError_(DN_ErrSink *err, DN_CallSite call_site, DN_St DN_API bool DN_ErrSinkEndLogErrorFV_(DN_ErrSink *err, DN_CallSite call_site, DN_FMT_ATTRIB char const *fmt, va_list args) { - DN_Str8 log = DN_Str8FromFmtVArena(err->arena, fmt, args); + DN_Str8 log = DN_Str8FmtVArena(err->arena, fmt, args); bool result = DN_ErrSinkEndLogError_(err, call_site, log); return result; } @@ -2096,7 +2096,7 @@ DN_API bool DN_ErrSinkEndLogErrorF_(DN_ErrSink *err, DN_CallSite call_site, DN_F { va_list args; va_start(args, fmt); - DN_Str8 log = DN_Str8FromFmtVArena(err->arena, fmt, args); + DN_Str8 log = DN_Str8FmtVArena(err->arena, fmt, args); bool result = DN_ErrSinkEndLogError_(err, call_site, log); va_end(args); return result; @@ -2129,7 +2129,7 @@ DN_API void DN_ErrSinkAppendFV_(DN_ErrSink *err, DN_U32 error_code, DN_CallSite DN_ErrSinkMsg *msg = DN_ArenaNew(err->arena, DN_ErrSinkMsg, DN_ZMem_Yes); DN_Assert(msg); - msg->msg = DN_Str8FromFmtVArena(err->arena, fmt, args); + msg->msg = DN_Str8FmtVArena(err->arena, fmt, args); msg->error_code = error_code; msg->call_site = call_site; DN_SentinelDoublyLLPrepend(node->msg_sentinel, msg); @@ -2145,9 +2145,9 @@ DN_API void DN_ErrSinkAppendF_(DN_ErrSink *err, DN_U32 error_code, DN_CallSite c va_end(args); } -DN_THREAD_LOCAL DN_TCCore *g_dn_thread_context; +DN_THREAD_LOCAL DN_TcCore *g_dn_thread_context; -DN_API void DN_TCInit(DN_TCCore *tc, DN_U64 thread_id, DN_Arena *main_arena, DN_Arena *temp_arenas, DN_USize temp_arenas_count, DN_Arena *err_sink_arena) +DN_API void DN_TcInit(DN_TcCore *tc, DN_U64 thread_id, DN_Arena *main_arena, DN_Arena *temp_arenas, DN_USize temp_arenas_count, DN_Arena *err_sink_arena) { tc->thread_id = thread_id; tc->main_arena = main_arena; @@ -2158,9 +2158,9 @@ DN_API void DN_TCInit(DN_TCCore *tc, DN_U64 thread_id, DN_Arena *main_arena, DN_ tc->temp_arenas[tc->temp_arenas_count++] = temp_arenas + index; } -DN_API DN_TCInitArgs DN_TCInitArgsDefault() +DN_API DN_TcInitArgs DN_TcInitArgsDefault() { - DN_TCInitArgs result = {}; + DN_TcInitArgs result = {}; result.main_reserve = DN_Kilobytes(64); result.main_commit = DN_Kilobytes(4); result.temp_reserve = DN_Kilobytes(64); @@ -2171,7 +2171,7 @@ DN_API DN_TCInitArgs DN_TCInitArgsDefault() return result; } -DN_API void DN_TCInitFromHeap(DN_TCCore *tc, DN_U64 thread_id, DN_TCInitArgs args, DN_Heap heap) +DN_API void DN_TcInitFromHeap(DN_TcCore *tc, DN_U64 thread_id, DN_TcInitArgs args, DN_Heap heap) { DN_Assert(args.temp_count <= DN_ArrayCountU(tc->temp_arenas)); DN_MemList main_mem_stack = DN_MemListFromHeap(args.main_reserve, args.main_commit, DN_MemFlags_AllocCanLeak | DN_MemFlags_NoAllocTrack, heap); @@ -2191,13 +2191,13 @@ DN_API void DN_TCInitFromHeap(DN_TCCore *tc, DN_U64 thread_id, DN_TCInitArgs arg DN_Arena *err_sink_arena = DN_MemListNewZ(main_mem, DN_Arena); *err_sink_arena = DN_ArenaFromMemList(err_sink_mem); - DN_TCInit(tc, thread_id, main_arena, temp_arenas, args.temp_count, err_sink_arena); + DN_TcInit(tc, thread_id, main_arena, temp_arenas, args.temp_count, err_sink_arena); } -DN_API void DN_TCDeinit(DN_TCCore *tc, DN_TCDeinitArenas deinit_arenas) +DN_API void DN_TcDeinit(DN_TcCore *tc, DN_TcDeinitArenas deinit_arenas) { // NOTE: That we deallocate the main memory last as TC might be allocated in that arena. - if (deinit_arenas == DN_TCDeinitArenas_Yes) { + if (deinit_arenas == DN_TcDeinitArenas_Yes) { for (DN_ForIndexU(index, tc->temp_arenas_count)) DN_MemListDeinit(tc->temp_arenas[index]->mem); DN_MemListDeinit(tc->err_sink.arena->mem); @@ -2205,35 +2205,35 @@ DN_API void DN_TCDeinit(DN_TCCore *tc, DN_TCDeinitArenas deinit_arenas) } } -DN_API void DN_TCEquip(DN_TCCore *tc) +DN_API void DN_TcEquip(DN_TcCore *tc) { g_dn_thread_context = tc; } -DN_API DN_TCCore *DN_TCGet() +DN_API DN_TcCore *DN_TcGet() { DN_AssertRaw(g_dn_thread_context && - "This thread's thread context has not been equipped yet. Ensure that DN_TCInit(...) " - "has been called to create a thread context and call DN_TCEquip(...) in the current " + "This thread's thread context has not been equipped yet. Ensure that DN_TcInit(...) " + "has been called to create a thread context and call DN_TcEquip(...) in the current " "thread to make it retrievable via this function"); return g_dn_thread_context; } -DN_API DN_Arena *DN_TCMainArena() +DN_API DN_Arena *DN_TcMainArena() { - DN_TCCore *tc = DN_TCGet(); + DN_TcCore *tc = DN_TcGet(); DN_Arena *result = tc->main_arena; return result; } -DN_API DN_Pool *DN_TCMainPool() +DN_API DN_Pool *DN_TcMainPool() { - DN_TCCore *tc = DN_TCGet(); + DN_TcCore *tc = DN_TcGet(); DN_Pool *result = &tc->main_pool; return result; } -DN_API DN_Arena DN_TCTempArenaAllocator(DN_Allocator *conflicts, DN_USize count) +DN_API DN_Arena DN_TcTempArenaAllocator(DN_Allocator *conflicts, DN_USize count) { DN_MemList *conflict_mem_lists[8]; DN_USize conflict_mem_lists_count = 0; @@ -2264,7 +2264,7 @@ DN_API DN_Arena DN_TCTempArenaAllocator(DN_Allocator *conflicts, DN_USize count) DN_Assert(added); } - DN_TCCore *tc = DN_TCGet(); + DN_TcCore *tc = DN_TcGet(); DN_Arena result = {}; for (DN_ForItSize(it, DN_Arena *, tc->temp_arenas, tc->temp_arenas_count)) { bool is_usable = true; @@ -2288,9 +2288,9 @@ DN_API DN_Arena DN_TCTempArenaAllocator(DN_Allocator *conflicts, DN_USize count) return result; } -DN_API DN_Arena DN_TCTempArenaFromArena(DN_Arena **conflicts, DN_USize count) +DN_API DN_Arena DN_TcTempArenaFromArena(DN_Arena **conflicts, DN_USize count) { - DN_TCCore *tc = DN_TCGet(); + DN_TcCore *tc = DN_TcGet(); DN_Arena result = {}; for (DN_ForItSize(it, DN_Arena *, tc->temp_arenas, tc->temp_arenas_count)) { bool is_usable = true; @@ -2316,32 +2316,32 @@ DN_API DN_Arena DN_TCTempArenaFromArena(DN_Arena **conflicts, DN_USize count) } #if defined(__cplusplus) -DN_TCScratchCpp::DN_TCScratchCpp(DN_Arena **conflicts, DN_USize count) +DN_TcScratchCpp::DN_TcScratchCpp(DN_Arena **conflicts, DN_USize count) { - this->data = DN_TCScratchBeginArena(conflicts, count); + this->data = DN_TcScratchBeginArena(conflicts, count); } -DN_TCScratchCpp::~DN_TCScratchCpp() +DN_TcScratchCpp::~DN_TcScratchCpp() { - DN_TCScratchEnd(&this->data); + DN_TcScratchEnd(&this->data); } #endif -DN_API DN_TCScratch DN_TCScratchBeginAllocator(DN_Allocator *conflicts, DN_USize count) +DN_API DN_TcScratch DN_TcScratchBeginAllocator(DN_Allocator *conflicts, DN_USize count) { - DN_TCScratch result = {}; - result.arena = DN_TCTempArenaAllocator(conflicts, count); + DN_TcScratch result = {}; + result.arena = DN_TcTempArenaAllocator(conflicts, count); return result; } -DN_API DN_TCScratch DN_TCScratchBeginArena(DN_Arena **conflicts, DN_USize count) +DN_API DN_TcScratch DN_TcScratchBeginArena(DN_Arena **conflicts, DN_USize count) { - DN_TCScratch result = {}; - result.arena = DN_TCTempArenaFromArena(conflicts, count); + DN_TcScratch result = {}; + result.arena = DN_TcTempArenaFromArena(conflicts, count); return result; } -DN_API void DN_TCScratchEnd(DN_TCScratch *scratch) +DN_API void DN_TcScratchEnd(DN_TcScratch *scratch) { DN_Assert(scratch->destructed == false); DN_ArenaTempEnd(&scratch->arena, DN_ArenaReset_Yes); @@ -2349,22 +2349,22 @@ DN_API void DN_TCScratchEnd(DN_TCScratch *scratch) scratch->destructed = true; } -DN_API void DN_TCSetFrameArena(DN_Arena *arena) +DN_API void DN_TcSetFrameArena(DN_Arena *arena) { - DN_TCCore *tc = DN_TCGet(); + DN_TcCore *tc = DN_TcGet(); tc->frame_arena = arena; } -DN_API DN_Arena *DN_TCFrameArena() +DN_API DN_Arena *DN_TcFrameArena() { - DN_TCCore *tc = DN_TCGet(); + DN_TcCore *tc = DN_TcGet(); DN_Arena *result = tc->frame_arena; return result; } -DN_API DN_ErrSink *DN_TCErrSink() +DN_API DN_ErrSink *DN_TcErrSink() { - DN_TCCore *tc = DN_TCGet(); + DN_TcCore *tc = DN_TcGet(); DN_ErrSink *result = &tc->err_sink; return result; } @@ -2855,7 +2855,7 @@ DN_API DN_FmtAppendResult DN_FmtVAppend(char *buf, DN_USize *buf_size, DN_USize { DN_FmtAppendResult result = {}; DN_USize starting_size = *buf_size; - result.size_req = DN_VSNPrintF(buf + *buf_size, DN_Cast(int)(buf_max - *buf_size), fmt, args); + result.size_req = DN_Vsnprintf(buf + *buf_size, DN_Cast(int)(buf_max - *buf_size), fmt, args); *buf_size += result.size_req; if (*buf_size >= (buf_max - 1)) *buf_size = buf_max - 1; @@ -2889,7 +2889,7 @@ DN_API DN_USize DN_FmtCount(DN_FMT_ATTRIB char const *fmt, ...) { va_list args; va_start(args, fmt); - DN_USize result = DN_VSNPrintF(nullptr, 0, fmt, args); + DN_USize result = DN_Vsnprintf(nullptr, 0, fmt, args); va_end(args); return result; } @@ -2898,7 +2898,7 @@ DN_API DN_USize DN_FmtVCount(DN_FMT_ATTRIB char const *fmt, va_list args) { va_list args_copy; va_copy(args_copy, args); - DN_USize result = DN_VSNPrintF(nullptr, 0, fmt, args_copy); + DN_USize result = DN_Vsnprintf(nullptr, 0, fmt, args_copy); va_end(args_copy); return result; } @@ -2996,7 +2996,7 @@ DN_API DN_Str8 DN_Str8FromStr8Pool(DN_Str8 string, DN_Pool *pool) return result; } -DN_API DN_Str8 DN_Str8FromFmtVAllocator(DN_Allocator allocator, DN_FMT_ATTRIB char const *fmt, va_list args) +DN_API DN_Str8 DN_Str8FmtVAllocator(DN_Allocator allocator, DN_FMT_ATTRIB char const *fmt, va_list args) { DN_USize count = DN_FmtVCount(fmt, args); DN_Str8 result = DN_Str8AllocAllocator(count, DN_ZMem_No, allocator); @@ -3008,41 +3008,41 @@ DN_API DN_Str8 DN_Str8FromFmtVAllocator(DN_Allocator allocator, DN_FMT_ATTRIB ch return result; } -DN_API DN_Str8 DN_Str8FromFmtVArena(DN_Arena *arena, DN_FMT_ATTRIB char const *fmt, va_list args) +DN_API DN_Str8 DN_Str8FmtVArena(DN_Arena *arena, DN_FMT_ATTRIB char const *fmt, va_list args) { - DN_Str8 result = DN_Str8FromFmtVAllocator(DN_AllocatorFromArena(arena), fmt, args); + DN_Str8 result = DN_Str8FmtVAllocator(DN_AllocatorFromArena(arena), fmt, args); return result; } -DN_API DN_Str8 DN_Str8FromFmtAllocator(DN_Allocator allocator, DN_FMT_ATTRIB char const *fmt, ...) +DN_API DN_Str8 DN_Str8FmtAllocator(DN_Allocator allocator, DN_FMT_ATTRIB char const *fmt, ...) { va_list va; va_start(va, fmt); - DN_Str8 result = DN_Str8FromFmtVAllocator(allocator, fmt, va); + DN_Str8 result = DN_Str8FmtVAllocator(allocator, fmt, va); va_end(va); return result; } -DN_API DN_Str8 DN_Str8FromFmtArena(DN_Arena *arena, DN_FMT_ATTRIB char const *fmt, ...) +DN_API DN_Str8 DN_Str8FmtArena(DN_Arena *arena, DN_FMT_ATTRIB char const *fmt, ...) { va_list va; va_start(va, fmt); - DN_Str8 result = DN_Str8FromFmtVArena(arena, fmt, va); + DN_Str8 result = DN_Str8FmtVArena(arena, fmt, va); va_end(va); return result; } -DN_API DN_Str8 DN_Str8FromFmtVPool(DN_Pool *pool, DN_FMT_ATTRIB char const *fmt, va_list args) +DN_API DN_Str8 DN_Str8FmtVPool(DN_Pool *pool, DN_FMT_ATTRIB char const *fmt, va_list args) { - DN_Str8 result = DN_Str8FromFmtVAllocator(DN_AllocatorFromPool(pool), fmt, args); + DN_Str8 result = DN_Str8FmtVAllocator(DN_AllocatorFromPool(pool), fmt, args); return result; } -DN_API DN_Str8 DN_Str8FromFmtPool(DN_Pool *pool, DN_FMT_ATTRIB char const *fmt, ...) +DN_API DN_Str8 DN_Str8FmtPool(DN_Pool *pool, DN_FMT_ATTRIB char const *fmt, ...) { va_list args; va_start(args, fmt); - DN_Str8 result = DN_Str8FromFmtVPool(pool, fmt, args); + DN_Str8 result = DN_Str8FmtVPool(pool, fmt, args); va_end(args); return result; } @@ -3803,7 +3803,7 @@ DN_API DN_Str8 DN_Str8AppendF(DN_Arena *arena, DN_Str8 string, char const *fmt, DN_API DN_Str8 DN_Str8AppendFV(DN_Arena *arena, DN_Str8 string, char const *fmt, va_list args) { // TODO: Calculate size and write into one buffer instead of 2 appends - DN_Str8 append = DN_Str8FromFmtVArena(arena, fmt, args); + DN_Str8 append = DN_Str8FmtVArena(arena, fmt, args); DN_Str8 result = DN_Str8AllocArena(string.count + append.count, DN_ZMem_No, arena); DN_Memcpy(result.data, string.data, string.count); DN_Memcpy(result.data + string.count, append.data, append.count); @@ -3821,7 +3821,7 @@ DN_API DN_Str8 DN_Str8FillF(DN_Arena *arena, DN_USize count, char const *fmt, .. DN_API DN_Str8 DN_Str8FillFV(DN_Arena *arena, DN_USize count, char const *fmt, va_list args) { - DN_Str8 fill = DN_Str8FromFmtVArena(arena, fmt, args); + DN_Str8 fill = DN_Str8FmtVArena(arena, fmt, args); DN_Str8 result = DN_Str8AllocArena(count * fill.count, DN_ZMem_No, arena); for (DN_USize index = 0; index < count; index++) { void *dest = result.data + (index * fill.count); @@ -3848,7 +3848,7 @@ DN_API DN_Str8 DN_Str8TruncateArena(DN_Str8 string, DN_USize max_count, DN_Str8 DN_Str8 result = {}; if (string.count > max_count) { DN_Str8 string_trunc = DN_Str8Subset(string, 0, max_count); - result = DN_Str8FromFmtArena(arena, "%.*s%.*s", DN_Str8PrintFmt(string_trunc), DN_Str8PrintFmt(truncator)); + result = DN_Str8FmtArena(arena, "%.*s%.*s", DN_Str8PrintFmt(string_trunc), DN_Str8PrintFmt(truncator)); } else { result = DN_Str8FromStr8Arena(string, arena); } @@ -3931,7 +3931,7 @@ DN_API DN_Str8 DN_Str8Replace(DN_Str8 string, return result; } - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_Str8Builder string_builder = DN_Str8BuilderFromArena(&scratch.arena); DN_USize max = string.count - find.count; DN_USize head = start_index; @@ -3965,7 +3965,7 @@ DN_API DN_Str8 DN_Str8Replace(DN_Str8 string, DN_Str8BuilderAppendRef(&string_builder, remainder); result = DN_Str8FromStr8BuilderArena(&string_builder, arena); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -3983,7 +3983,7 @@ DN_API DN_Str8 DN_Str8ReplaceInsensitive(DN_Str8 string, DN_Str8 find, DN_Str8 r DN_API DN_Str8 DN_Str8PadNewLinesAllocator(DN_Str8 string, DN_Str8 pad_string, DN_Allocator allocator) { - DN_TCScratch scratch = DN_TCScratchBeginAllocator(&allocator, 1); + DN_TcScratch scratch = DN_TcScratchBeginAllocator(&allocator, 1); DN_Str8Builder builder = DN_Str8BuilderFromArena(&scratch.arena); DN_Str8 it = string; while (it.count) { @@ -3993,7 +3993,7 @@ DN_API DN_Str8 DN_Str8PadNewLinesAllocator(DN_Str8 string, DN_Str8 pad_string, D } DN_Str8 result = DN_Str8FromStr8BuilderDelimitAllocator(&builder, pad_string, allocator); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -4007,13 +4007,13 @@ DN_API DN_USize DN_USizeCodepointCountFromUTF8(DN_Str8 str, DN_CodepointCountFla { DN_USize result = 0; - if (DN_BitIsNotSet(flags, DN_CodepointCountFlags_SkipANSICode)) { + if (DN_BitIsNotSet(flags, DN_CodepointCountFlags_SkipAnsiCode)) { DN_UTF8DecodeIterator it = {}; while (DN_UTF8DecodeIterate(&it, str)) ; result = it.codepoint_index; } else { - // NOTE: ANSI SGR (Select Graphic Rendition) sequence handling + // NOTE: Ansi SGR (Select Graphic Rendition) sequence handling // Format: ESC [ parameter_bytes intermediate_bytes final_byte // Common examples: \x1b[31m (red), \x1b[1;31m (bold red), \x1b[0m (reset) // Parameter bytes: 0x30-0x3F (digits and :;<=>?) @@ -4046,7 +4046,7 @@ DN_API DN_USize DN_USizeCodepointCountFromUTF8(DN_Str8 str, DN_CodepointCountFla DN_API DN_Str8 DN_Str8LineBreakAllocator(DN_Str8 src, DN_USize desired_width, DN_Str8 delimiter, DN_Str8LineBreakMode mode, DN_Allocator allocator) { - DN_TCScratch scratch = DN_TCScratchBeginAllocator(&allocator, 1); + DN_TcScratch scratch = DN_TcScratchBeginAllocator(&allocator, 1); DN_Str8Builder builder = DN_Str8BuilderFromArena(&scratch.arena); if (mode == DN_Str8LineBreakMode_AtWord) { @@ -4113,7 +4113,7 @@ DN_API DN_Str8 DN_Str8LineBreakAllocator(DN_Str8 src, DN_USize desired_width, DN } DN_Str8 result = DN_Str8FromStr8BuilderDelimitAllocator(&builder, delimiter, allocator); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -4125,12 +4125,12 @@ DN_API DN_Str8 DN_Str8LineBreakArena(DN_Str8 src, DN_USize desired_width, DN_Str DN_API DN_Str8 DN_Str8Table(DN_Str8 const *rows, DN_USize num_rows, DN_USize num_cols, DN_Str8TableFlags flags, DN_Arena *arena) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_U16 col_widths[128] = {}; for (DN_USize i = 0; i < num_cols; i++) { for (DN_USize j = 0; j < num_rows; j++) { DN_USize index = j * num_cols + i; - col_widths[i] = DN_Max(col_widths[i], (DN_U16)DN_USizeCodepointCountFromUTF8(rows[index], DN_CodepointCountFlags_SkipANSICode)); + col_widths[i] = DN_Max(col_widths[i], (DN_U16)DN_USizeCodepointCountFromUTF8(rows[index], DN_CodepointCountFlags_SkipAnsiCode)); } } @@ -4149,7 +4149,7 @@ DN_API DN_Str8 DN_Str8Table(DN_Str8 const *rows, DN_USize num_rows, DN_USize num DN_USize index = (i * num_cols) + j; DN_Str8 item = rows[index]; DN_Str8BuilderAppendF(&builder, " %.*s", DN_Str8PrintFmt(item)); - DN_USize item_width = DN_USizeCodepointCountFromUTF8(item, DN_CodepointCountFlags_SkipANSICode); + DN_USize item_width = DN_USizeCodepointCountFromUTF8(item, DN_CodepointCountFlags_SkipAnsiCode); for (DN_USize k = 0; k < col_widths[j] - item_width; k++) DN_Str8BuilderAppendF(&builder, " "); DN_Str8BuilderAppendF(&builder, " |"); @@ -4179,7 +4179,7 @@ DN_API DN_Str8 DN_Str8Table(DN_Str8 const *rows, DN_USize num_rows, DN_USize num } DN_Str8 result = DN_Str8FromStr8BuilderArena(&builder, arena); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -4266,7 +4266,7 @@ DN_API DN_Str8FindResult DN_Str8FindStr8AVX512F(DN_Str8 string, DN_Str8 find) return result; } - zero_byte_mask = DN_BitClearNextLSB(zero_byte_mask); + zero_byte_mask = DN_BitClearNextLsb(zero_byte_mask); } ptr += sizeof(__m512i); @@ -4370,7 +4370,7 @@ DN_API DN_Str8FindResult DN_Str8FindLastStr8AVX512F(DN_Str8 string, DN_Str8 find return result; } - zero_byte_mask = DN_BitClearNextLSB(zero_byte_mask); + zero_byte_mask = DN_BitClearNextLsb(zero_byte_mask); } } @@ -4733,7 +4733,7 @@ DN_API bool DN_Str8BuilderAddArrayCopy(DN_Str8Builder *builder, DN_Str8 const *s DN_API bool DN_Str8BuilderAddFV(DN_Str8Builder *builder, DN_Str8BuilderAdd add, DN_FMT_ATTRIB char const *fmt, va_list args) { - DN_Str8 string = DN_Str8FromFmtVArena(builder->arena, fmt, args); + DN_Str8 string = DN_Str8FmtVArena(builder->arena, fmt, args); DN_U64 arena_p = DN_MemListPos(builder->arena->mem); bool result = DN_Str8BuilderAddArrayRef(builder, &string, 1, add); if (!result) @@ -5515,7 +5515,7 @@ DN_API DN_Str8x32 DN_Str8x32FromByteCountU64(DN_U64 bytes, DN_ByteType type) return result; } -DN_API DN_Profiler DN_ProfilerInit(DN_ProfilerAnchor *anchors, DN_USize count, DN_USize anchors_per_frame, DN_ProfilerTSCNowFunc *tsc_now, DN_U64 tsc_frequency) +DN_API DN_Profiler DN_ProfilerInit(DN_ProfilerAnchor *anchors, DN_USize count, DN_USize anchors_per_frame, DN_ProfilerTscNowFunc *tsc_now, DN_U64 tsc_frequency) { DN_Profiler result = {}; result.anchors = anchors; @@ -5525,22 +5525,22 @@ DN_API DN_Profiler DN_ProfilerInit(DN_ProfilerAnchor *anchors, DN_USize count, D result.tsc_frequency = tsc_frequency; DN_AssertF(result.tsc_frequency != 0, - "You must set this to the frequency of the timestamp counter function (TSC) (e.g. how " + "You must set this to the frequency of the timestamp counter function (Tsc) (e.g. how " "many ticks occur between timestamps). We use this to determine the duration between " - "each zone's recorded TSC. For example if the 'tsc_now' was set to Window's " + "each zone's recorded Tsc. For example if the 'tsc_now' was set to Window's " "QueryPerformanceCounter then 'tsc_frequency' would be set to the value of " "QueryPerformanceFrequency which is typically 10mhz (e.g. The duration between two " - "consecutive TSC's is 10mhz)." + "consecutive Tsc's is 10mhz)." "" - "Hence frequency can't be zero otherwise it's a divide by 0. If you don't have a TSC " + "Hence frequency can't be zero otherwise it's a divide by 0. If you don't have a Tsc " "function and pass in null, the profiler defaults to rdtsc() and you must measure the " "frequency of rdtsc yourself. The reason for this is that measuring rdtsc requires " - "having some alternate timing mechanism to measure the duration between the TSCs " + "having some alternate timing mechanism to measure the duration between the Tscs " "provided by rdtsc and this profiler makes no assumption about what timing primitives " "are available other than rdtsc which is a CPU builtin available on basically all " "platforms or have an equivalent (e.g. __builtin_readcyclecounter)" "" - "This codebase provides DN_OS_EstimateTSCPerSecond() as an example of how to that for " + "This codebase provides DN_OS_EstimateTscPerSecond() as an example of how to that for " "convenience and is available if compiling with the OS layer. Some platforms like " "Emscripten don't support rdtsc() so you should use an alternative method like " "emscripten_get_now() or clock_gettime with CLOCK_MONOTONIC."); @@ -5589,7 +5589,7 @@ DN_API DN_ProfilerZone DN_ProfilerBeginZone(DN_Profiler *profiler, DN_Str8 name, #endif result.profiler = profiler; - result.begin_tsc = profiler->tsc_now ? profiler->tsc_now() : DN_CPUGetTSC(); + result.begin_tsc = profiler->tsc_now ? profiler->tsc_now() : DN_CPUGetTsc(); result.anchor_index = anchor_index; result.parent_zone = profiler->parent_zone; result.elapsed_tsc_at_zone_start = anchor->tsc_inclusive; @@ -5608,13 +5608,13 @@ DN_API void DN_ProfilerEndZone(DN_ProfilerZone zone) DN_ProfilerAnchorArray array = DN_ProfilerFrameAnchors(profiler); DN_ProfilerAnchor *anchor = array.data + zone.anchor_index; - DN_U64 tsc_now = profiler->tsc_now ? profiler->tsc_now() : DN_CPUGetTSC(); + DN_U64 tsc_now = profiler->tsc_now ? profiler->tsc_now() : DN_CPUGetTsc(); DN_U64 elapsed_tsc = tsc_now - zone.begin_tsc; - // NOTE: We snap the elapsed TSC at the zone start and overwrite every time we end zones. If we + // NOTE: We snap the elapsed Tsc at the zone start and overwrite every time we end zones. If we // nest zones, the nested zones will clobber the inclusive timestamp with their values. // This is fine, as long as all the zones and begun and ended correctly, when the top-most zone - // in the stack ends, it will overwrite the TSC with the elapsed time overall for just that top + // in the stack ends, it will overwrite the Tsc with the elapsed time overall for just that top // most function, unclobbering the elapsed time sitting in the anchor. anchor->tsc_inclusive = zone.elapsed_tsc_at_zone_start + elapsed_tsc; anchor->tsc_exclusive += elapsed_tsc; @@ -5695,13 +5695,13 @@ DN_API void DN_ProfilerFmtToStdout(DN_Profiler *profiler) } } -DN_API DN_F64 DN_ProfilerSecFromTSC(DN_Profiler *profiler, DN_U64 duration_tsc) +DN_API DN_F64 DN_ProfilerSecFromTsc(DN_Profiler *profiler, DN_U64 duration_tsc) { DN_F64 result = DN_Cast(DN_F64)duration_tsc / profiler->tsc_frequency; return result; } -DN_API DN_F64 DN_ProfilerMsFromTSC(DN_Profiler *profiler, DN_U64 duration_tsc) +DN_API DN_F64 DN_ProfilerMsFromTsc(DN_Profiler *profiler, DN_U64 duration_tsc) { DN_F64 result = DN_Cast(DN_F64)duration_tsc / profiler->tsc_frequency * 1000.0; return result; @@ -5721,12 +5721,12 @@ static void DN_QSortSwapElems_(void *array, DN_USize elem_size, DN_USize lhs_ind char temp_buffer[512]; bool use_buffer = elem_size <= DN_ArrayCountU(temp_buffer); - DN_TCScratch scratch = {}; + DN_TcScratch scratch = {}; char *temp = {}; if (use_buffer) { temp = temp_buffer; } else { - scratch = DN_TCScratchBeginArena(nullptr, 0); + scratch = DN_TcScratchBeginArena(nullptr, 0); temp = DN_ArenaNewArray(&scratch.arena, char, elem_size, DN_ZMem_No); } @@ -5737,19 +5737,19 @@ static void DN_QSortSwapElems_(void *array, DN_USize elem_size, DN_USize lhs_ind DN_Memcpy(rhs, temp, elem_size); if (!use_buffer) - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } static void DN_QSortInsertion_(void *array, DN_USize array_size, DN_USize elem_size, void *user_context, DN_QSortCompareFunc *compare) { char temp_buffer[512]; bool use_buffer = elem_size <= DN_ArrayCountU(temp_buffer); - DN_TCScratch scratch = {}; + DN_TcScratch scratch = {}; char *temp = {}; if (use_buffer) { temp = temp_buffer; } else { - scratch = DN_TCScratchBeginArena(nullptr, 0); + scratch = DN_TcScratchBeginArena(nullptr, 0); temp = DN_ArenaNewArray(&scratch.arena, char, elem_size, DN_ZMem_No); } @@ -5770,7 +5770,7 @@ static void DN_QSortInsertion_(void *array, DN_USize array_size, DN_USize elem_s } if (!use_buffer) - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } DN_API void DN_QSort(void *array, DN_USize array_size, DN_USize elem_size, void *user_context, DN_QSortCompareFunc *compare) @@ -5976,16 +5976,16 @@ DN_API DN_BSearchResult DN_BSearchU32(DN_U32 const *array, DN_USize count, DN_U3 #define DN_PCG_DEFAULT_MULTIPLIER_64 6364136223846793005ULL #define DN_PCG_DEFAULT_INCREMENT_64 1442695040888963407ULL -DN_API DN_PCG32 DN_PCG32Init(DN_U64 seed) +DN_API DN_Pcg32 DN_Pcg32Init(DN_U64 seed) { - DN_PCG32 result = {}; - DN_PCG32Next(&result); + DN_Pcg32 result = {}; + DN_Pcg32Next(&result); result.state += seed; - DN_PCG32Next(&result); + DN_Pcg32Next(&result); return result; } -DN_API DN_U32 DN_PCG32Next(DN_PCG32 *rng) +DN_API DN_U32 DN_Pcg32Next(DN_Pcg32 *rng) { DN_U64 state = rng->state; rng->state = state * DN_PCG_DEFAULT_MULTIPLIER_64 + DN_PCG_DEFAULT_INCREMENT_64; @@ -5996,39 +5996,39 @@ DN_API DN_U32 DN_PCG32Next(DN_PCG32 *rng) return rot ? (value >> rot) | (value << (32 - rot)) : value; } -DN_API DN_U64 DN_PCG32Next64(DN_PCG32 *rng) +DN_API DN_U64 DN_Pcg32Next64(DN_Pcg32 *rng) { - DN_U64 value = DN_PCG32Next(rng); + DN_U64 value = DN_Pcg32Next(rng); value <<= 32; - value |= DN_PCG32Next(rng); + value |= DN_Pcg32Next(rng); return value; } -DN_API DN_U32 DN_PCG32Range(DN_PCG32 *rng, DN_U32 low, DN_U32 high) +DN_API DN_U32 DN_Pcg32Range(DN_Pcg32 *rng, DN_U32 low, DN_U32 high) { DN_U32 bound = high - low; DN_U32 threshold = -(DN_I32)bound % bound; for (;;) { - DN_U32 r = DN_PCG32Next(rng); + DN_U32 r = DN_Pcg32Next(rng); if (r >= threshold) return low + (r % bound); } } -DN_API DN_F32 DN_PCG32NextF32(DN_PCG32 *rng) +DN_API DN_F32 DN_Pcg32NextF32(DN_Pcg32 *rng) { - DN_U32 x = DN_PCG32Next(rng); + DN_U32 x = DN_Pcg32Next(rng); return (DN_F32)(DN_I32)(x >> 8) * 0x1.0p-24f; } -DN_API DN_F64 DN_PCG32NextF64(DN_PCG32 *rng) +DN_API DN_F64 DN_Pcg32NextF64(DN_Pcg32 *rng) { - DN_U64 x = DN_PCG32Next64(rng); + DN_U64 x = DN_Pcg32Next64(rng); return (DN_F64)(DN_I64)(x >> 11) * 0x1.0p-53; } -DN_API void DN_PCG32Advance(DN_PCG32 *rng, DN_U64 delta) +DN_API void DN_Pcg32Advance(DN_Pcg32 *rng, DN_U64 delta) { DN_U64 cur_mult = DN_PCG_DEFAULT_MULTIPLIER_64; DN_U64 cur_plus = DN_PCG_DEFAULT_INCREMENT_64; @@ -6050,7 +6050,7 @@ DN_API void DN_PCG32Advance(DN_PCG32 *rng, DN_U64 delta) } // Default values recommended by: http://isthe.com/chongo/tech/comp/fnv/ -DN_API DN_U32 DN_FNV1AHashU32FromBytes(void const *bytes, DN_USize count, DN_U32 hash) +DN_API DN_U32 DN_Fnv1aHashU32FromBytes(void const *bytes, DN_USize count, DN_U32 hash) { auto buffer = DN_Cast(DN_U8 const *)bytes; for (DN_USize i = 0; i < count; i++) @@ -6058,7 +6058,7 @@ DN_API DN_U32 DN_FNV1AHashU32FromBytes(void const *bytes, DN_USize count, DN_U32 return hash; } -DN_API DN_U64 DN_FNV1AHashU64FromBytes(void const *bytes, DN_USize count, DN_U64 hash) +DN_API DN_U64 DN_Fnv1aHashU64FromBytes(void const *bytes, DN_USize count, DN_U64 hash) { auto buffer = DN_Cast(DN_U8 const *)bytes; for (DN_USize i = 0; i < count; i++) @@ -6295,67 +6295,67 @@ DN_API DN_U32 DN_Murmur3HashU32FromBytesX64(void const *bytes, int len, DN_U32 s return result; } -DN_API DN_Str8x32 DN_Str8x32FromANSIColourCodeU8RGB(DN_ANSIColourMode mode, DN_U8 r, DN_U8 g, DN_U8 b) +DN_API DN_Str8x32 DN_Str8x32FromAnsiColourCodeU8Rgb(DN_AnsiColourMode mode, DN_U8 r, DN_U8 g, DN_U8 b) { DN_Str8x32 result = DN_Str8x32FromFmt("\x1b[%d;2;%u;%u;%um", - mode == DN_ANSIColourMode_Fg ? 38 : 48, + mode == DN_AnsiColourMode_Fg ? 38 : 48, r, g, b); return result; } -DN_API DN_Str8x32 DN_Str8x32FromANSIColourCodeV3F32RGB255(DN_ANSIColourMode mode, DN_V3F32 rgb_255) +DN_API DN_Str8x32 DN_Str8x32FromAnsiColourCodeV3F32Rgb255(DN_AnsiColourMode mode, DN_V3F32 rgb_255) { - DN_Str8x32 result = DN_Str8x32FromANSIColourCodeU8RGB(mode, DN_Cast(DN_U8)rgb_255.r, DN_Cast(DN_U8)rgb_255.g, DN_Cast(DN_U8)rgb_255.b); + DN_Str8x32 result = DN_Str8x32FromAnsiColourCodeU8Rgb(mode, DN_Cast(DN_U8)rgb_255.r, DN_Cast(DN_U8)rgb_255.g, DN_Cast(DN_U8)rgb_255.b); return result; } -DN_API DN_Str8x32 DN_Str8x32FromANSIColourCodeU32RGB(DN_ANSIColourMode mode, DN_U32 value) +DN_API DN_Str8x32 DN_Str8x32FromAnsiColourCodeU32Rgb(DN_AnsiColourMode mode, DN_U32 value) { DN_U8 r = DN_Cast(DN_U8)(value >> 24); DN_U8 g = DN_Cast(DN_U8)(value >> 16); DN_U8 b = DN_Cast(DN_U8)(value >> 8); - DN_Str8x32 result = DN_Str8x32FromANSIColourCodeU8RGB(mode, r, g, b); + DN_Str8x32 result = DN_Str8x32FromAnsiColourCodeU8Rgb(mode, r, g, b); return result; } -DN_API DN_Str8 DN_Str8FromStr8ANSIColourU8RGBArena(DN_ANSIColourMode mode, DN_Str8 str8, DN_U8 r, DN_U8 g, DN_U8 b, DN_Arena *arena) +DN_API DN_Str8 DN_Str8FromStr8AnsiColourU8RgbArena(DN_AnsiColourMode mode, DN_Str8 str8, DN_U8 r, DN_U8 g, DN_U8 b, DN_Arena *arena) { - DN_Str8x32 ansi = DN_Str8x32FromANSIColourCodeU8RGB(mode, r, g, b); - DN_Str8 result = DN_Str8FromFmtArena(arena, "%.*s%.*s%s", DN_Str8PrintFmt(ansi), DN_Str8PrintFmt(str8), DN_ANSICodeResetLit); + DN_Str8x32 ansi = DN_Str8x32FromAnsiColourCodeU8Rgb(mode, r, g, b); + DN_Str8 result = DN_Str8FmtArena(arena, "%.*s%.*s%s", DN_Str8PrintFmt(ansi), DN_Str8PrintFmt(str8), DN_AnsiCodeResetLit); return result; } -DN_API DN_Str8 DN_Str8FromStr8ANSIColourV3F32RGB255Arena(DN_ANSIColourMode mode, DN_Str8 str8, DN_V3F32 rgb_255, DN_Arena *arena) +DN_API DN_Str8 DN_Str8FromStr8AnsiColourV3F32Rgb255Arena(DN_AnsiColourMode mode, DN_Str8 str8, DN_V3F32 rgb_255, DN_Arena *arena) { - DN_Str8 result = DN_Str8FromStr8ANSIColourU8RGBArena(mode, str8, DN_Cast(DN_U8)rgb_255.r, DN_Cast(DN_U8)rgb_255.g, DN_Cast(DN_U8)rgb_255.b, arena); + DN_Str8 result = DN_Str8FromStr8AnsiColourU8RgbArena(mode, str8, DN_Cast(DN_U8)rgb_255.r, DN_Cast(DN_U8)rgb_255.g, DN_Cast(DN_U8)rgb_255.b, arena); return result; } -DN_API DN_Str8 DN_Str8ANSIColourU8RGBFromFmtVArena(DN_ANSIColourMode mode, DN_U8 r, DN_U8 g, DN_U8 b, DN_Arena *arena, char const *fmt, va_list args) +DN_API DN_Str8 DN_Str8AnsiColourU8RgbFromFmtVArena(DN_AnsiColourMode mode, DN_U8 r, DN_U8 g, DN_U8 b, DN_Arena *arena, char const *fmt, va_list args) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); - DN_Str8 string = DN_Str8FromFmtVArena(&scratch.arena, fmt, args); - DN_Str8 result = DN_Str8FromStr8ANSIColourU8RGBArena(mode, string, r, g, b, arena); - DN_TCScratchEnd(&scratch); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); + DN_Str8 string = DN_Str8FmtVArena(&scratch.arena, fmt, args); + DN_Str8 result = DN_Str8FromStr8AnsiColourU8RgbArena(mode, string, r, g, b, arena); + DN_TcScratchEnd(&scratch); return result; } -DN_API DN_Str8 DN_Str8FromFmtANSIColourU8RGBArena(DN_ANSIColourMode mode, DN_U8 r, DN_U8 g, DN_U8 b, DN_Arena *arena, char const *fmt, ...) +DN_API DN_Str8 DN_Str8FmtAnsiColourU8RgbArena(DN_AnsiColourMode mode, DN_U8 r, DN_U8 g, DN_U8 b, DN_Arena *arena, char const *fmt, ...) { va_list args; va_start(args, fmt); - DN_Str8 result = DN_Str8ANSIColourU8RGBFromFmtVArena(mode, r, g, b, arena, fmt, args); + DN_Str8 result = DN_Str8AnsiColourU8RgbFromFmtVArena(mode, r, g, b, arena, fmt, args); va_end(args); return result; } -DN_API DN_Str8 DN_Str8FromFmtANSIColourV3F32RGB255Arena(DN_ANSIColourMode mode, DN_V3F32 rgb_255, DN_Arena *arena, char const *fmt, ...) +DN_API DN_Str8 DN_Str8FmtAnsiColourV3F32Rgb255Arena(DN_AnsiColourMode mode, DN_V3F32 rgb_255, DN_Arena *arena, char const *fmt, ...) { va_list args; va_start(args, fmt); - DN_Str8 result = DN_Str8ANSIColourU8RGBFromFmtVArena(mode, DN_Cast(DN_U8)rgb_255.r, DN_Cast(DN_U8)rgb_255.g, DN_Cast(DN_U8)rgb_255.b, arena, fmt, args); + DN_Str8 result = DN_Str8AnsiColourU8RgbFromFmtVArena(mode, DN_Cast(DN_U8)rgb_255.r, DN_Cast(DN_U8)rgb_255.g, DN_Cast(DN_U8)rgb_255.b, arena, fmt, args); va_end(args); return result; } @@ -6381,13 +6381,13 @@ DN_API DN_LogPrefixSize DN_LogMakePrefix(DN_LogStyle style, DN_LogTypeParam type DN_Str8 bold_esc = {}; DN_Str8 reset_esc = {}; if (style.colour) { - bold_esc = DN_Str8Lit(DN_ANSICodeBoldLit); - reset_esc = DN_Str8Lit(DN_ANSICodeResetLit); - colour_esc = DN_Str8x32FromANSIColourCodeU8RGB(DN_ANSIColourMode_Fg, style.r, style.g, style.b); + bold_esc = DN_Str8Lit(DN_AnsiCodeBoldLit); + reset_esc = DN_Str8Lit(DN_AnsiCodeResetLit); + colour_esc = DN_Str8x32FromAnsiColourCodeU8Rgb(DN_AnsiColourMode_Fg, style.r, style.g, style.b); } DN_Str8 file_name = DN_Str8FileNameFromPath(call_site.file); - int size = DN_SNPrintF(dest, + int size = DN_Snprintf(dest, DN_Cast(int)dest_size, "%04u-%02u-%02uT%02u:%02u:%02u" // date "%.*s" // colour @@ -7345,7 +7345,7 @@ DN_API DN_V4F32 DN_V4F32Lerp(DN_V4F32 lhs, DN_F32 t01, DN_V4F32 rhs) return result; } -DN_API bool DN_V4F32RGBA01IsValid(DN_V4F32 rgba01) +DN_API bool DN_V4F32Rgba01IsValid(DN_V4F32 rgba01) { bool result = rgba01.r >= 0 && rgba01.r <= 1.f && rgba01.g >= 0 && rgba01.g <= 1.f && @@ -7354,58 +7354,58 @@ DN_API bool DN_V4F32RGBA01IsValid(DN_V4F32 rgba01) return result; } -DN_API DN_V4F32 DN_V4F32RGBA01FromRGBU32(DN_U32 u32) +DN_API DN_V4F32 DN_V4F32Rgba01FromRgbU32(DN_U32 u32) { DN_U8 r = (DN_U8)((u32 & 0x00FF0000) >> 16); DN_U8 g = (DN_U8)((u32 & 0x0000FF00) >> 8); DN_U8 b = (DN_U8)((u32 & 0x000000FF) >> 0); - DN_V4F32 result = DN_V4F32RGBA01FromRGBU8(r, g, b); + DN_V4F32 result = DN_V4F32Rgba01FromRgbU8(r, g, b); return result; } -DN_API DN_V4F32 DN_V4F32RGBA01FromRGBAU32(DN_U32 u32) +DN_API DN_V4F32 DN_V4F32Rgba01FromRgbaU32(DN_U32 u32) { DN_U8 r = (DN_U8)((u32 & 0xFF000000) >> 24); DN_U8 g = (DN_U8)((u32 & 0x00FF0000) >> 16); DN_U8 b = (DN_U8)((u32 & 0x0000FF00) >> 8); DN_U8 a = (DN_U8)((u32 & 0x000000FF) >> 0); - DN_V4F32 result = DN_V4F32RGBA01FromRGBAU8(r, g, b, a); + DN_V4F32 result = DN_V4F32Rgba01FromRgbaU8(r, g, b, a); return result; } -#define DN_SRGB_COEFFICIENT_F32 2.2f -DN_API DN_V4F32 DN_V4F32Linear01FromSRGB01(DN_V4F32 srgb01) +#define DN_Srgb_COEFFICIENT_F32 2.2f +DN_API DN_V4F32 DN_V4F32Linear01FromSrgb01(DN_V4F32 srgb01) { DN_Assert(srgb01.x >= 0.f && srgb01.x <= 1.f); DN_Assert(srgb01.y >= 0.f && srgb01.y <= 1.f); DN_Assert(srgb01.z >= 0.f && srgb01.z <= 1.f); DN_Assert(srgb01.a >= 0.f && srgb01.a <= 1.f); DN_V4F32 result = {}; - result.r = DN_PowF32(srgb01.r, DN_SRGB_COEFFICIENT_F32); - result.g = DN_PowF32(srgb01.g, DN_SRGB_COEFFICIENT_F32); - result.b = DN_PowF32(srgb01.b, DN_SRGB_COEFFICIENT_F32); + result.r = DN_PowF32(srgb01.r, DN_Srgb_COEFFICIENT_F32); + result.g = DN_PowF32(srgb01.g, DN_Srgb_COEFFICIENT_F32); + result.b = DN_PowF32(srgb01.b, DN_Srgb_COEFFICIENT_F32); result.a = srgb01.a; return result; } DN_API DN_V4F32 DN_V4F32Linear01Desaturate(DN_V4F32 linear01, DN_F32 t01) { - DN_F32 luminance = (linear01.r * DN_V3F32_RGB_LUMINANCE.r) + (linear01.g * DN_V3F32_RGB_LUMINANCE.g) + (linear01.b * DN_V3F32_RGB_LUMINANCE.b); + DN_F32 luminance = (linear01.r * DN_V3F32_Rgb_LUMINANCE.r) + (linear01.g * DN_V3F32_Rgb_LUMINANCE.g) + (linear01.b * DN_V3F32_Rgb_LUMINANCE.b); DN_V4F32 result = linear01; result.rgb = DN_V3F32Lerp(result.rgb, t01, DN_V3F32From1N(luminance)); return result; } -DN_API DN_V4F32 DN_V4F32SRGB01FromLinear01(DN_V4F32 linear01) +DN_API DN_V4F32 DN_V4F32Srgb01FromLinear01(DN_V4F32 linear01) { DN_Assert(linear01.x >= 0.f && linear01.x <= 1.f); DN_Assert(linear01.y >= 0.f && linear01.y <= 1.f); DN_Assert(linear01.z >= 0.f && linear01.z <= 1.f); DN_Assert(linear01.a >= 0.f && linear01.a <= 1.f); DN_V4F32 result = {}; - result.r = DN_PowF32(linear01.r, 1.f / DN_SRGB_COEFFICIENT_F32); - result.g = DN_PowF32(linear01.g, 1.f / DN_SRGB_COEFFICIENT_F32); - result.b = DN_PowF32(linear01.b, 1.f / DN_SRGB_COEFFICIENT_F32); + result.r = DN_PowF32(linear01.r, 1.f / DN_Srgb_COEFFICIENT_F32); + result.g = DN_PowF32(linear01.g, 1.f / DN_Srgb_COEFFICIENT_F32); + result.b = DN_PowF32(linear01.b, 1.f / DN_Srgb_COEFFICIENT_F32); result.a = linear01.a; return result; } @@ -9449,7 +9449,7 @@ DN_API void DN_TestGroupBeginF(DN_TestCore *test, char const *fmt, ...) // NOTE: Set up the group va_list args; va_start(args, fmt); - group->name = DN_Str8FromFmtVArena(test->arena, fmt, args); + group->name = DN_Str8FmtVArena(test->arena, fmt, args); va_end(args); // NOTE: Mark as active @@ -9478,7 +9478,7 @@ DN_API void DN_TestBeginF(DN_TestCore *test, char const *fmt, ...) // NOTE: Fill in test entry va_list args; va_start(args, fmt); - entry->name = DN_Str8FromFmtVArena(test->arena, fmt, args); + entry->name = DN_Str8FmtVArena(test->arena, fmt, args); va_end(args); // NOTE: Mark as active @@ -9504,11 +9504,11 @@ DN_API void DN_TestEnd(DN_TestCore *test) DN_API DN_Str8 DN_Str8FromTestCore(DN_TestCore const *test, DN_Arena *arena, DN_Str8FromTestCoreFlags flags) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_USize padding_count = 100; DN_Str8 padding_line = DN_Str8FillF(&scratch.arena, padding_count, "."); if (flags & DN_Str8FromTestCoreFlags_Colour) - padding_line = DN_Str8FromFmtANSIColourU8RGBArena(DN_ANSIColourMode_Fg, 64, 64, 64, &scratch.arena, "%.*s", DN_Str8PrintFmt(padding_line)); + padding_line = DN_Str8FmtAnsiColourU8RgbArena(DN_AnsiColourMode_Fg, 64, 64, 64, &scratch.arena, "%.*s", DN_Str8PrintFmt(padding_line)); DN_V3F32 const good_colour = DN_V3F32From3N(0, 255, 0); DN_V3F32 const bad_colour = DN_V3F32From3N(255, 0, 0); @@ -9530,7 +9530,7 @@ DN_API DN_Str8 DN_Str8FromTestCore(DN_TestCore const *test, DN_Arena *arena, DN_ group_successes++; // NOTE: Extract the test name and pad the line with dots (.) - DN_Str8 test_prefix = DN_Str8FromFmtArena(&scratch.arena, " [%zu/%zu] %.*s ", entry_it.index + 1, group->entries_count, DN_Str8PrintFmt(entry->name)); + DN_Str8 test_prefix = DN_Str8FmtArena(&scratch.arena, " [%zu/%zu] %.*s ", entry_it.index + 1, group->entries_count, DN_Str8PrintFmt(entry->name)); if (test_prefix.count < padding_line.count) { DN_USize remaining = padding_line.count - test_prefix.count; DN_Str8 padder = DN_Str8Subset(padding_line, 0, remaining); @@ -9541,9 +9541,9 @@ DN_API DN_Str8 DN_Str8FromTestCore(DN_TestCore const *test, DN_Arena *arena, DN_ DN_Str8 outcome_str8 = entry->failed ? DN_Str8Lit("FAILED") : DN_Str8Lit("OK"); if (flags & DN_Str8FromTestCoreFlags_Colour) { if (entry->failed) - outcome_str8 = DN_Str8FromFmtANSIColourV3F32RGB255Arena(DN_ANSIColourMode_Fg, bad_colour, &scratch.arena, "%.*s", DN_Str8PrintFmt(outcome_str8)); + outcome_str8 = DN_Str8FmtAnsiColourV3F32Rgb255Arena(DN_AnsiColourMode_Fg, bad_colour, &scratch.arena, "%.*s", DN_Str8PrintFmt(outcome_str8)); else - outcome_str8 = DN_Str8FromFmtANSIColourV3F32RGB255Arena(DN_ANSIColourMode_Fg, good_colour, &scratch.arena, "%.*s", DN_Str8PrintFmt(outcome_str8)); + outcome_str8 = DN_Str8FmtAnsiColourV3F32Rgb255Arena(DN_AnsiColourMode_Fg, good_colour, &scratch.arena, "%.*s", DN_Str8PrintFmt(outcome_str8)); } DN_F64 elapsed_ms = DN_OS_PerfCounterMs(entry->ts_begin, entry->ts_end); @@ -9572,7 +9572,7 @@ DN_API DN_Str8 DN_Str8FromTestCore(DN_TestCore const *test, DN_Arena *arena, DN_ DN_Str8 file_name = DN_Str8FileNameFromPath(row->call_site.file); rows_str8[row_index++] = row->expr; rows_str8[row_index++] = row->invariant; - rows_str8[row_index++] = DN_Str8FromFmtArena(&scratch.arena, "%.*s:%u", DN_Str8PrintFmt(file_name), row->call_site.line); + rows_str8[row_index++] = DN_Str8FmtArena(&scratch.arena, "%.*s:%u", DN_Str8PrintFmt(file_name), row->call_site.line); DN_Str8 table = DN_Str8Table(rows_str8, row_count, col_count, table_flags, &scratch.arena); table = DN_Str8PadNewLinesArena(table, DN_Str8Lit(" "), &scratch.arena); @@ -9590,13 +9590,13 @@ DN_API DN_Str8 DN_Str8FromTestCore(DN_TestCore const *test, DN_Arena *arena, DN_ DN_MSVC_WARNING_PUSH DN_MSVC_WARNING_DISABLE(6067) // _Param_(3) in call to 'DN_Str8BuilderAppendF' must be the address of a string. Actual type: 'const unsigned __int64'. DN_MSVC_WARNING_DISABLE(6271) // Extra argument passed to 'DN_Str8BuilderAppendF'. - DN_Str8 group_prefix = DN_Str8FromFmtArena(&scratch.arena, "%'zu/%'zu test%s", group_successes, group->entries_count, group_successes > 1 ? "s" :""); + DN_Str8 group_prefix = DN_Str8FmtArena(&scratch.arena, "%'zu/%'zu test%s", group_successes, group->entries_count, group_successes > 1 ? "s" :""); DN_MSVC_WARNING_POP if (flags & DN_Str8FromTestCoreFlags_Colour) { if (group_failures == 0) - group_prefix = DN_Str8FromFmtANSIColourV3F32RGB255Arena(DN_ANSIColourMode_Fg, good_colour, &scratch.arena, "%.*s", DN_Str8PrintFmt(group_prefix)); + group_prefix = DN_Str8FmtAnsiColourV3F32Rgb255Arena(DN_AnsiColourMode_Fg, good_colour, &scratch.arena, "%.*s", DN_Str8PrintFmt(group_prefix)); else - group_prefix = DN_Str8FromFmtANSIColourV3F32RGB255Arena(DN_ANSIColourMode_Fg, bad_colour, &scratch.arena, "%.*s", DN_Str8PrintFmt(group_prefix)); + group_prefix = DN_Str8FmtAnsiColourV3F32Rgb255Arena(DN_AnsiColourMode_Fg, bad_colour, &scratch.arena, "%.*s", DN_Str8PrintFmt(group_prefix)); } DN_Str8BuilderAppendF(&builder, "\n %.*s passed in [%.*s] %.3fms (%zu failed)\n", DN_Str8PrintFmt(group_prefix), DN_Str8PrintFmt(group->name), elapsed_ms, group_failures); } @@ -9619,7 +9619,7 @@ DN_API DN_TestDiagnosticRow *DN_TestVerifySetupFmtV(DN_TestCore *test, DN_CallSi result = DN_PArrayMakeZ(entry->diagnostics, &entry->diagnostics_count, entry->diagnostics_max); result->expr = expr; result->call_site = call_site; - result->message = DN_Str8FromFmtVArena(test->arena, fmt, args); + result->message = DN_Str8FmtVArena(test->arena, fmt, args); } return result; } @@ -9631,7 +9631,7 @@ DN_API void DN_TestVerifyExprF_(DN_TestCore *test, DN_CallSite call_site, DN_Str DN_TestDiagnosticRow *row = DN_TestVerifySetupFmtV(test, call_site, expr, /*verify_failed=*/ !expr_result, fmt, args); va_end(args); if (row) - row->invariant = DN_Str8FromFmtArena(test->arena, "%s (expected %s)", expr_result ? "true" : "false", expr_result ? "false" : "true"); + row->invariant = DN_Str8FmtArena(test->arena, "%s (expected %s)", expr_result ? "true" : "false", expr_result ? "false" : "true"); } DN_API void DN_TestVerifyF64Fmt(DN_TestCore *test, DN_CallSite call_site, DN_Str8 val_str8, DN_Str8 expect_str8, DN_F64 val, DN_F64 expect, DN_TestLogic logic, char const *fmt, ...) @@ -9652,8 +9652,8 @@ DN_API void DN_TestVerifyF64Fmt(DN_TestCore *test, DN_CallSite call_site, DN_Str DN_TestDiagnosticRow *row = DN_TestVerifySetupFmtV(test, call_site, /*expr=*/ DN_Str8Lit(""), verify_failed, fmt, args); va_end(args); if (row) { - row->expr = DN_Str8FromFmtArena(test->arena, "%.*s %.*s %.*s", DN_Str8PrintFmt(val_str8), DN_Str8PrintFmt(logic_str8), DN_Str8PrintFmt(expect_str8)); - row->invariant = DN_Str8FromFmtArena(test->arena, "%f %.*s %f (expected)", val, DN_Str8PrintFmt(logic_inv_str8), expect); + row->expr = DN_Str8FmtArena(test->arena, "%.*s %.*s %.*s", DN_Str8PrintFmt(val_str8), DN_Str8PrintFmt(logic_str8), DN_Str8PrintFmt(expect_str8)); + row->invariant = DN_Str8FmtArena(test->arena, "%f %.*s %f (expected)", val, DN_Str8PrintFmt(logic_inv_str8), expect); } } @@ -9675,12 +9675,12 @@ DN_API void DN_TestVerifyISizeF(DN_TestCore *test, DN_CallSite call_site, DN_Str DN_TestDiagnosticRow *row = DN_TestVerifySetupFmtV(test, call_site, /*expr=*/ DN_Str8Lit(""), verify_failed, fmt, args); va_end(args); if (row) { - row->expr = DN_Str8FromFmtArena(test->arena, "%.*s %.*s %.*s", DN_Str8PrintFmt(val_str8), DN_Str8PrintFmt(logic_str8), DN_Str8PrintFmt(expect_str8)); + row->expr = DN_Str8FmtArena(test->arena, "%.*s %.*s %.*s", DN_Str8PrintFmt(val_str8), DN_Str8PrintFmt(logic_str8), DN_Str8PrintFmt(expect_str8)); DN_MSVC_WARNING_PUSH - DN_MSVC_WARNING_DISABLE(6067) // _Param_(4) in call to 'DN_Str8FromFmtArena' must be the address of a string. Actual type: 'int'. - DN_MSVC_WARNING_DISABLE(6328) // Size mismatch: '__int64' passed as _Param_(3) when 'unsigned int' is required in call to 'DN_Str8FromFmtArena' - DN_MSVC_WARNING_DISABLE(6271) // Extra argument passed to 'DN_Str8FromFmtArena'. - row->invariant = DN_Str8FromFmtArena(test->arena, "%'zd %.*s %'zd (expected)", val, DN_Str8PrintFmt(logic_inv_str8), expect); + DN_MSVC_WARNING_DISABLE(6067) // _Param_(4) in call to 'DN_Str8FmtArena' must be the address of a string. Actual type: 'int'. + DN_MSVC_WARNING_DISABLE(6328) // Size mismatch: '__int64' passed as _Param_(3) when 'unsigned int' is required in call to 'DN_Str8FmtArena' + DN_MSVC_WARNING_DISABLE(6271) // Extra argument passed to 'DN_Str8FmtArena'. + row->invariant = DN_Str8FmtArena(test->arena, "%'zd %.*s %'zd (expected)", val, DN_Str8PrintFmt(logic_inv_str8), expect); DN_MSVC_WARNING_POP } } @@ -9703,12 +9703,12 @@ DN_API void DN_TestVerifyUSizeF(DN_TestCore *test, DN_CallSite call_site, DN_Str DN_TestDiagnosticRow *row = DN_TestVerifySetupFmtV(test, call_site, /*expr=*/ DN_Str8Lit(""), verify_failed, fmt, args); va_end(args); if (row) { - row->expr = DN_Str8FromFmtArena(test->arena, "%.*s %.*s %.*s", DN_Str8PrintFmt(val_str8), DN_Str8PrintFmt(logic_str8), DN_Str8PrintFmt(expect_str8)); + row->expr = DN_Str8FmtArena(test->arena, "%.*s %.*s %.*s", DN_Str8PrintFmt(val_str8), DN_Str8PrintFmt(logic_str8), DN_Str8PrintFmt(expect_str8)); DN_MSVC_WARNING_PUSH - DN_MSVC_WARNING_DISABLE(6067) // _Param_(4) in call to 'DN_Str8FromFmtArena' must be the address of a string. Actual type: 'int'. - DN_MSVC_WARNING_DISABLE(6328) // Size mismatch: '__int64' passed as _Param_(3) when 'unsigned int' is required in call to 'DN_Str8FromFmtArena' - DN_MSVC_WARNING_DISABLE(6271) // Extra argument passed to 'DN_Str8FromFmtArena'. - row->invariant = DN_Str8FromFmtArena(test->arena, "%'zu %.*s %'zu (expected)", val, DN_Str8PrintFmt(logic_inv_str8), expect); + DN_MSVC_WARNING_DISABLE(6067) // _Param_(4) in call to 'DN_Str8FmtArena' must be the address of a string. Actual type: 'int'. + DN_MSVC_WARNING_DISABLE(6328) // Size mismatch: '__int64' passed as _Param_(3) when 'unsigned int' is required in call to 'DN_Str8FmtArena' + DN_MSVC_WARNING_DISABLE(6271) // Extra argument passed to 'DN_Str8FmtArena'. + row->invariant = DN_Str8FmtArena(test->arena, "%'zu %.*s %'zu (expected)", val, DN_Str8PrintFmt(logic_inv_str8), expect); DN_MSVC_WARNING_POP } } @@ -9727,9 +9727,9 @@ DN_API void DN_TestVerifyStr8F(DN_TestCore *test, DN_CallSite call_site, DN_Str8 va_end(args); if (row) { if (expect_eq) - row->invariant = DN_Str8FromFmtArena(test->arena, "\"%.*s\" != \"%.*s\"", DN_Str8PrintFmt(str8), DN_Str8PrintFmt(expect)); + row->invariant = DN_Str8FmtArena(test->arena, "\"%.*s\" != \"%.*s\"", DN_Str8PrintFmt(str8), DN_Str8PrintFmt(expect)); else - row->invariant = DN_Str8FromFmtArena(test->arena, "\"%.*s\" == \"%.*s\"", DN_Str8PrintFmt(str8), DN_Str8PrintFmt(expect)); + row->invariant = DN_Str8FmtArena(test->arena, "\"%.*s\" == \"%.*s\"", DN_Str8PrintFmt(str8), DN_Str8PrintFmt(expect)); } } @@ -9749,9 +9749,9 @@ DN_API void DN_TestVerifyBytesF(DN_TestCore *test, DN_CallSite call_site, DN_Str DN_Str8 bytes_hex = DN_Str8HexFromStr8BytesArena(bytes, test->arena, DN_TrimLeadingZero_No); DN_Str8 expect_hex = DN_Str8HexFromStr8BytesArena(expect, test->arena, DN_TrimLeadingZero_No); if (expect_eq) - row->invariant = DN_Str8FromFmtArena(test->arena, "\"%.*s\" != \"%.*s\"", DN_Str8PrintFmt(bytes_hex), DN_Str8PrintFmt(expect_hex)); + row->invariant = DN_Str8FmtArena(test->arena, "\"%.*s\" != \"%.*s\"", DN_Str8PrintFmt(bytes_hex), DN_Str8PrintFmt(expect_hex)); else - row->invariant = DN_Str8FromFmtArena(test->arena, "\"%.*s\" == \"%.*s\"", DN_Str8PrintFmt(bytes_hex), DN_Str8PrintFmt(expect_hex)); + row->invariant = DN_Str8FmtArena(test->arena, "\"%.*s\" == \"%.*s\"", DN_Str8PrintFmt(bytes_hex), DN_Str8PrintFmt(expect_hex)); } } @@ -9834,7 +9834,7 @@ struct DN_RefImplCPUReport { bool SYSCALL(void) const { return isIntel_ && f_81_EDX_ & (1 << 11); } bool MMXEXT(void) const { return isAMD_ && f_81_EDX_ & (1 << 22); } - bool RDTSCP(void) const { return f_81_EDX_ & (1 << 27); } + bool RDTscP(void) const { return f_81_EDX_ & (1 << 27); } bool _3DNOWEXT(void) const { return isAMD_ && f_81_EDX_ & (1 << 30); } bool _3DNOW(void) const { return isAMD_ && f_81_EDX_ & (1 << 31); } }; @@ -10035,7 +10035,7 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) DN_TestVerifyExpr(&result, DN_CPUHasFeature(&cpu_report, DN_CPUFeature_POPCNT) == ref_cpu_report.POPCNT()); DN_TestVerifyExpr(&result, DN_CPUHasFeature(&cpu_report, DN_CPUFeature_RDRAND) == ref_cpu_report.RDRAND()); DN_TestVerifyExpr(&result, DN_CPUHasFeature(&cpu_report, DN_CPUFeature_RDSEED) == ref_cpu_report.RDSEED()); - DN_TestVerifyExpr(&result, DN_CPUHasFeature(&cpu_report, DN_CPUFeature_RDTSCP) == ref_cpu_report.RDTSCP()); + DN_TestVerifyExpr(&result, DN_CPUHasFeature(&cpu_report, DN_CPUFeature_RDTscP) == ref_cpu_report.RDTscP()); DN_TestVerifyExpr(&result, DN_CPUHasFeature(&cpu_report, DN_CPUFeature_SHA) == ref_cpu_report.SHA()); DN_TestVerifyExpr(&result, DN_CPUHasFeature(&cpu_report, DN_CPUFeature_SSE) == ref_cpu_report.SSE()); DN_TestVerifyExpr(&result, DN_CPUHasFeature(&cpu_report, DN_CPUFeature_SSE2) == ref_cpu_report.SSE2()); @@ -10104,8 +10104,8 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) DN_TestVerifyExprF(&result, a == b, "a: %" PRId64 ", b: %" PRId64, a, b); } - for (DN_TestScopeF(&result, "[Intrinsics] CPUGetTSC compile check")) { - DN_CPUGetTSC(); + for (DN_TestScopeF(&result, "[Intrinsics] CPUGetTsc compile check")) { + DN_CPUGetTsc(); } for (DN_TestScopeF(&result, "[Intrinsics] CompilerReadBarrierAndCPUReadFence compile check")) { @@ -10203,8 +10203,8 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) // NOTE: Hex/Bytes { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena_, 1); - DN_DEFER { DN_TCScratchEnd(&scratch); }; + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena_, 1); + DN_DEFER { DN_TcScratchEnd(&scratch); }; for (DN_TestScopeF(&result, "[Hex/Bytes] Convert 0x123")) { uint64_t val = DN_U64FromHexStr8Unsafe(DN_Str8Lit("0x123")); @@ -10642,11 +10642,11 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) } for (DN_TestScopeF(&result, "[OS] Query executable directory")) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena_, 1); - DN_Str8 os_result = DN_OS_EXEDir(&scratch.arena); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena_, 1); + DN_Str8 os_result = DN_OS_ExeDir(&scratch.arena); DN_TestVerifyExpr(&result, os_result.count > 0); DN_TestVerifyExprF(&result, DN_OS_PathIsDir(os_result), "result(%zu): %.*s", os_result.count, DN_Str8PrintFmt(os_result)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } for (DN_TestScopeF(&result, "[OS] DN_OS_PerfCounterNow")) { @@ -10688,7 +10688,7 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) DN_TestVerifyExpr(&result, write_result); DN_TestVerifyExpr(&result, DN_OS_PathIsFile(SRC_FILE)); - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena_, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena_, 1); DN_Str8 read_file = DN_OS_FileReadAllArena(&scratch.arena, SRC_FILE, nullptr); DN_TestVerifyExprF(&result, read_file.count > 0, "Failed to load file"); DN_TestVerifyExprF(&result, read_file.count == 4, "File read wrong amount of bytes (%zu)", read_file.count); @@ -10714,7 +10714,7 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) DN_B32 delete_non_existent_moved_file = DN_OS_PathDelete(MOVE_FILE); DN_TestVerifyExpr(&result, delete_non_existent_moved_file == false); DN_TestVerifyExpr(&result, delete_non_existent_src_file == false); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } for (DN_TestScopeF(&result, "[OS] Wait timeout")) { @@ -10880,7 +10880,7 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) for (DN_TestScopeF(&result, "[Strings] Format from arena")) { DN_MemList mem = DN_MemListFromBuffer(arena_base, sizeof(arena_base), DN_MemFlags_Nil); DN_Arena arena = DN_ArenaFromMemList(&mem); - DN_Str8 str8 = DN_Str8FromFmtArena(&arena, "Foo Bar %d", 5); + DN_Str8 str8 = DN_Str8FmtArena(&arena, "Foo Bar %d", 5); DN_Str8 expect = DN_Str8Lit("Foo Bar 5"); DN_TestVerifyStr8EqF(&result, str8, expect, "str8=%.*s", DN_Str8PrintFmt(str8), DN_Str8PrintFmt(expect)); } @@ -10889,7 +10889,7 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) DN_MemList mem = DN_MemListFromBuffer(arena_base, sizeof(arena_base), DN_MemFlags_Nil); DN_Arena arena = DN_ArenaFromMemList(&mem); DN_Pool pool = DN_PoolFromArena(&arena, 0); - DN_Str8 str8 = DN_Str8FromFmtPool(&pool, "Foo Bar %d", 5); + DN_Str8 str8 = DN_Str8FmtPool(&pool, "Foo Bar %d", 5); DN_Str8 expect = DN_Str8Lit("Foo Bar 5"); DN_TestVerifyStr8EqF(&result, str8, expect, "str8=%.*s", DN_Str8PrintFmt(str8), DN_Str8PrintFmt(expect)); } @@ -10901,24 +10901,24 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) } for (DN_TestScopeF(&result, "[Strings] Initialise with format string")) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena_, 1); - DN_Str8 string = DN_Str8FromFmtArena(&scratch.arena, "%s", "AB"); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena_, 1); + DN_Str8 string = DN_Str8FmtArena(&scratch.arena, "%s", "AB"); DN_TestVerifyUSizeEqF(&result, string.count, 2, "size: %zu", string.count); DN_TestVerifyExprF(&result, string.data[0] == 'A', "string[0]: %c", string.data[0]); DN_TestVerifyExprF(&result, string.data[1] == 'B', "string[1]: %c", string.data[1]); DN_TestVerifyExprF(&result, string.data[2] == 0, "string[2]: %c", string.data[2]); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } for (DN_TestScopeF(&result, "[Strings] Copy string")) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena_, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena_, 1); DN_Str8 string = DN_Str8Lit("AB"); DN_Str8 copy = DN_Str8FromStr8Arena(string, &scratch.arena); DN_TestVerifyUSizeEqF(&result, copy.count, 2, "size: %zu", copy.count); DN_TestVerifyExprF(&result, copy.data[0] == 'A', "copy[0]: %c", copy.data[0]); DN_TestVerifyExprF(&result, copy.data[1] == 'B', "copy[1]: %c", copy.data[1]); DN_TestVerifyExprF(&result, copy.data[2] == 0, "copy[2]: %c", copy.data[2]); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } for (DN_TestScopeF(&result, "[Strings] Trim whitespace around string")) { @@ -10927,10 +10927,10 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) } for (DN_TestScopeF(&result, "[Strings] Allocate string from arena")) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena_, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena_, 1); DN_Str8 string = DN_Str8AllocArena(2, DN_ZMem_No, &scratch.arena); DN_TestVerifyUSizeEqF(&result, string.count, 2, "size: %zu", string.count); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } for (DN_TestScopeF(&result, "[Strings] Trim prefix with matching prefix")) { @@ -11255,7 +11255,7 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) } for (DN_TestScopeF(&result, "[Strings] TruncMiddle: Arena wrapper allocates and truncates correctly")) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena_, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena_, 1); DN_Str8 str = DN_Str8Lit("HelloBeautifulWorld"); DN_Str8 trunc = DN_Str8Lit("..."); DN_Str8TruncResult res = DN_Str8TruncMiddle(str, 5, trunc, &scratch.arena); @@ -11263,14 +11263,14 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) DN_TestVerifyUSizeEq(&result, res.count_req, 13); DN_TestVerifyStr8EqF(&result, res.str8, DN_Str8Lit("Hello...World"), "%.*s", DN_Str8PrintFmt(res.str8)); DN_TestVerifyExpr(&result, res.str8.data[res.str8.count] == '\0'); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } } // NOTE: Win #if defined(DN_PLATFORM_WIN32) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena_, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena_, 1); DN_Str8 input8 = DN_Str8Lit("String"); DN_Str16 input16 = DN_Str16{(wchar_t *)(L"String"), sizeof(L"String") / sizeof(L"String"[0]) - 1}; @@ -11308,7 +11308,7 @@ DN_API DN_TestCore DN_TestSuite(DN_Arena *arena_) DN_TestVerifyExpr(&result, DN_Memcmp(EXPECTED, string8.data, sizeof(EXPECTED)) == 0); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } #endif // DN_PLATFORM_WIN32 @@ -11616,16 +11616,16 @@ DN_API void DN_OS_LoggerSetFilePath(DN_OSLogger *logger, DN_Pool *pool, DN_Str8 static void DN_OS_DoLogFileSetupAndRotation_(DN_OSLogger *logger) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str8 error = {}; DN_TicketMutexBegin(&logger->file_mutex); if (logger->flags & DN_OSLoggerFlags_File) { // NOTE: Set a default file path to log to if it's not been set yet if (logger->file_path.count == 0) { - DN_Str8 exe_dir = DN_OS_EXEDir(&scratch.arena); + DN_Str8 exe_dir = DN_OS_ExeDir(&scratch.arena); DN_Str8 default_file_path = DN_OS_PathFmtArena(&scratch.arena, "%.*s/dn.log", DN_Str8PrintFmt(exe_dir)); - DN_OS_LoggerSetFilePathNoMutex_(logger, DN_TCMainPool(), default_file_path); + DN_OS_LoggerSetFilePathNoMutex_(logger, DN_TcMainPool(), default_file_path); } // NOTE Rotate the log file if the criteria is met @@ -11648,7 +11648,7 @@ static void DN_OS_DoLogFileSetupAndRotation_(DN_OSLogger *logger) DN_OSPathInfo recheck_file_info = DN_OS_PathInfo(logger->file_path); if (recheck_file_info.size >= logger->rotate_every_n_bytes) { logger->flags |= DN_OSLoggerFlags_FileError; - error = DN_Str8FromFmtArena(&scratch.arena, "Rotating of log files failed at (%.*s). Logging to disk is disabled", DN_Str8PrintFmt(logger->file_path)); + error = DN_Str8FmtArena(&scratch.arena, "Rotating of log files failed at (%.*s). Logging to disk is disabled", DN_Str8PrintFmt(logger->file_path)); } } } @@ -11659,7 +11659,7 @@ static void DN_OS_DoLogFileSetupAndRotation_(DN_OSLogger *logger) DN_OSPathInfo file_path_info = DN_OS_PathInfo(logger->file_path); if (file_path_info.exists && file_path_info.type != DN_OSPathInfoType_File) { logger->flags |= DN_OSLoggerFlags_FileError; - error = DN_Str8FromFmtArena(&scratch.arena, "File path to log to (%.*s) exists but is not a writable file. Logging to disk is disabled.", DN_Str8PrintFmt(logger->file_path)); + error = DN_Str8FmtArena(&scratch.arena, "File path to log to (%.*s) exists but is not a writable file. Logging to disk is disabled.", DN_Str8PrintFmt(logger->file_path)); } if (DN_BitIsNotSet(logger->flags, DN_OSLoggerFlags_FileError)) @@ -11672,7 +11672,7 @@ static void DN_OS_DoLogFileSetupAndRotation_(DN_OSLogger *logger) if (DN_BitIsNotSet(logger->flags, DN_OSLoggerFlags_FileError)) { if (logger->file.error) { logger->flags |= DN_OSLoggerFlags_FileError; - error = DN_Str8FromFmtArena(&scratch.arena, "Failed to open file (%.*s) for logging. Logging to disk is disabled", DN_Str8PrintFmt(logger->file_path)); + error = DN_Str8FmtArena(&scratch.arena, "Failed to open file (%.*s) for logging. Logging to disk is disabled", DN_Str8PrintFmt(logger->file_path)); } } } @@ -11681,7 +11681,7 @@ static void DN_OS_DoLogFileSetupAndRotation_(DN_OSLogger *logger) // NOTE: Error is logged outside of the mutex since logging will recurse back into the OS logger if (error.count) DN_LogWarningF("%.*s", DN_Str8PrintFmt(error)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } DN_API void DN_OS_LoggerFV(DN_OSLogger *logger, DN_LogTypeParam type, DN_CallSite call_site, DN_LogFlags flags, DN_FMT_ATTRIB char const *fmt, va_list args) @@ -11846,18 +11846,17 @@ DN_API DN_Str8x32 DN_OS_DateLocalTimeStr8Now(char date_separator, char hms_separ return result; } -// NOTE: Other -DN_API DN_Str8 DN_OS_EXEDir(DN_Arena *arena) +DN_API DN_Str8 DN_OS_ExeDir(DN_Arena *arena) { DN_Str8 result = {}; if (!arena) return result; - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); - DN_Str8 exe_path = DN_OS_EXEPath(&scratch.arena); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); + DN_Str8 exe_path = DN_OS_ExePath(&scratch.arena); DN_Str8 separators[] = {DN_Str8Lit("/"), DN_Str8Lit("\\")}; DN_Str8BSplitResult split = DN_Str8BSplitLastArray(exe_path, separators, DN_ArrayCountU(separators)); result = DN_Str8FromStr8Arena(split.lhs, arena); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -11930,17 +11929,17 @@ DN_API DN_F64 DN_OS_TimerNs(DN_OSTimer timer) return result; } -DN_API uint64_t DN_OS_EstimateTSCPerSecond(uint64_t duration_ms_to_gauge_tsc_frequency) +DN_API uint64_t DN_OS_EstimateTscPerSecond(uint64_t duration_ms_to_gauge_tsc_frequency) { uint64_t os_frequency = DN_OS_PerfCounterFrequency(); uint64_t os_target_elapsed = duration_ms_to_gauge_tsc_frequency * os_frequency / 1000ULL; - uint64_t tsc_begin = DN_CPUGetTSC(); + uint64_t tsc_begin = DN_CPUGetTsc(); uint64_t result = 0; if (tsc_begin) { uint64_t os_elapsed = 0; for (uint64_t os_begin = DN_OS_PerfCounterNow(); os_elapsed < os_target_elapsed;) os_elapsed = DN_OS_PerfCounterNow() - os_begin; - uint64_t tsc_end = DN_CPUGetTSC(); + uint64_t tsc_end = DN_CPUGetTsc(); uint64_t tsc_elapsed = tsc_end - tsc_begin; result = tsc_elapsed / os_elapsed * os_frequency; } @@ -11960,14 +11959,14 @@ DN_API bool DN_OS_FileRotate(DN_Str8 base_file_path, DN_USize rotate_count, DN_S if (DN_BitIsNotSet(flags, DN_OSFileRotateFlags_KeepBaseFile)) DN_OS_PathDelete(base_file_path); } else { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); for (DN_USize offset = 0; offset < (rotate_count - 1); offset++) { DN_USize const file_index = rotate_count - (offset + 1); bool last_file_index = file_index - 1 == 0; DN_AssertF(file_index != 0, "This index should never hits zero, we iterate in reverse and stop 1 before the last one"); - DN_Str8 file_path = DN_Str8FromFmtArena(&scratch.arena, "%.*s%.*s%zu", DN_Str8PrintFmt(base_file_path), DN_Str8PrintFmt(suffix), file_index); - DN_Str8 prev_file_path = last_file_index ? base_file_path : DN_Str8FromFmtArena(&scratch.arena, "%.*s%.*s%zu", DN_Str8PrintFmt(base_file_path), DN_Str8PrintFmt(suffix), file_index - 1); + DN_Str8 file_path = DN_Str8FmtArena(&scratch.arena, "%.*s%.*s%zu", DN_Str8PrintFmt(base_file_path), DN_Str8PrintFmt(suffix), file_index); + DN_Str8 prev_file_path = last_file_index ? base_file_path : DN_Str8FmtArena(&scratch.arena, "%.*s%.*s%zu", DN_Str8PrintFmt(base_file_path), DN_Str8PrintFmt(suffix), file_index - 1); DN_OSPathInfo file_path_info = DN_OS_PathInfo(file_path); DN_OSPathInfo prev_file_path_info = DN_OS_PathInfo(prev_file_path); @@ -11983,7 +11982,7 @@ DN_API bool DN_OS_FileRotate(DN_Str8 base_file_path, DN_USize rotate_count, DN_S result &= DN_OS_FileMove(prev_file_path, file_path, /*overwrite=*/true, nullptr); } } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } } return result; @@ -12112,10 +12111,10 @@ DN_API bool DN_OS_FileWriteAll(DN_Str8 path, DN_Str8 buffer, DN_ErrSink *error) DN_API bool DN_OS_FileWriteAllFV(DN_Str8 file_path, DN_ErrSink *error, DN_FMT_ATTRIB char const *fmt, va_list args) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); - DN_Str8 buffer = DN_Str8FromFmtVArena(&scratch.arena, fmt, args); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); + DN_Str8 buffer = DN_Str8FmtVArena(&scratch.arena, fmt, args); bool result = DN_OS_FileWriteAll(file_path, buffer, error); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -12130,30 +12129,30 @@ DN_API bool DN_OS_FileWriteAllF(DN_Str8 file_path, DN_ErrSink *error, DN_FMT_ATT DN_API bool DN_OS_FileWriteAllSafe(DN_Str8 path, DN_Str8 buffer, DN_ErrSink *error) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); - DN_Str8 tmp_path = DN_Str8FromFmtArena(&scratch.arena, "%.*s.tmp", DN_Str8PrintFmt(path)); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); + DN_Str8 tmp_path = DN_Str8FmtArena(&scratch.arena, "%.*s.tmp", DN_Str8PrintFmt(path)); if (!DN_OS_FileWriteAll(tmp_path, buffer, error)) { - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return false; } if (!DN_OS_FileCopy(tmp_path, path, true /*overwrite*/, error)) { - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return false; } if (!DN_OS_PathDelete(tmp_path)) { - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return false; } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return true; } DN_API bool DN_OS_FileWriteAllSafeFV(DN_Str8 path, DN_ErrSink *error, DN_FMT_ATTRIB char const *fmt, va_list args) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); - DN_Str8 buffer = DN_Str8FromFmtVArena(&scratch.arena, fmt, args); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); + DN_Str8 buffer = DN_Str8FmtVArena(&scratch.arena, fmt, args); bool result = DN_OS_FileWriteAllSafe(path, buffer, error); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -12238,7 +12237,7 @@ DN_API bool DN_OS_PathAddF(DN_Arena *arena, DN_OSPath *fs_path, DN_FMT_ATTRIB ch { va_list args; va_start(args, fmt); - DN_Str8 path = DN_Str8FromFmtVArena(arena, fmt, args); + DN_Str8 path = DN_Str8FmtVArena(arena, fmt, args); va_end(args); bool result = DN_OS_PathAddRef(arena, fs_path, path); return result; @@ -12308,38 +12307,38 @@ DN_API DN_Str8 DN_OS_PathToArena(DN_Arena *arena, DN_Str8 path, DN_Str8 path_sep DN_API DN_Str8 DN_OS_PathToPool(DN_Pool *pool, DN_Str8 path, DN_Str8 path_separator) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&pool->arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&pool->arena, 1); DN_OSPath fs_path = {}; DN_OS_PathAddRef(&scratch.arena, &fs_path, path); DN_Allocator allocator = DN_AllocatorFromPool(pool); DN_Str8 result = DN_OS_PathBuildWithSeparatorAllocator(allocator, &fs_path, path_separator); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } DN_API DN_Str8 DN_OS_PathToFmtArena(DN_Arena *arena, DN_Str8 path_separator, DN_FMT_ATTRIB char const *fmt, ...) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); va_list args; va_start(args, fmt); - DN_Str8 path = DN_Str8FromFmtVArena(&scratch.arena, fmt, args); + DN_Str8 path = DN_Str8FmtVArena(&scratch.arena, fmt, args); va_end(args); DN_Str8 result = DN_OS_PathToArena(arena, path, path_separator); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } DN_API DN_Str8 DN_OS_PathToFmtPool(DN_Pool *pool, DN_Str8 path_separator, DN_FMT_ATTRIB char const *fmt, ...) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&pool->arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&pool->arena, 1); va_list args; va_start(args, fmt); - DN_Str8 path = DN_Str8FromFmtVArena(&scratch.arena, fmt, args); + DN_Str8 path = DN_Str8FmtVArena(&scratch.arena, fmt, args); va_end(args); DN_Str8 result = DN_OS_PathToPool(pool, path, path_separator); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -12357,38 +12356,45 @@ DN_API DN_Str8 DN_OS_PathPool(DN_Pool *pool, DN_Str8 path) DN_API DN_Str8 DN_OS_PathFmtArena(DN_Arena *arena, DN_FMT_ATTRIB char const *fmt, ...) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); va_list args; va_start(args, fmt); - DN_Str8 path = DN_Str8FromFmtVArena(&scratch.arena, fmt, args); + DN_Str8 path = DN_Str8FmtVArena(&scratch.arena, fmt, args); va_end(args); DN_Str8 result = DN_OS_PathArena(arena, path); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } DN_API DN_Str8 DN_OS_PathFmtPool(DN_Pool *pool, DN_FMT_ATTRIB char const *fmt, ...) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&pool->arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&pool->arena, 1); va_list args; va_start(args, fmt); - DN_Str8 path = DN_Str8FromFmtVArena(&scratch.arena, fmt, args); + DN_Str8 path = DN_Str8FmtVArena(&scratch.arena, fmt, args); va_end(args); DN_Str8 result = DN_OS_PathPool(pool, path); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } -DN_API DN_OSExecResult DN_OS_Exec(DN_Str8Slice cmd_line, DN_OSExecArgs *args, DN_Arena *arena, DN_ErrSink *error) +DN_API DN_OSExecArgs DN_OS_ExecArgsDefault() +{ + DN_OSExecArgs result = {}; + result.flags |= DN_OSExecFlags_SaveOutput; + return result; +} + +DN_API DN_OSExecResult DN_OS_Exec(DN_Str8Slice cmd_line, DN_OSExecArgs args, DN_Arena *arena, DN_ErrSink *error) { DN_OSExecAsyncHandle async_handle = DN_OS_ExecAsync(cmd_line, args, error); DN_OSExecResult result = DN_OS_ExecWait(async_handle, arena, error); return result; } -DN_API DN_OSExecResult DN_OS_ExecOrAbort(DN_Str8Slice cmd_line, DN_OSExecArgs *args, DN_Arena *arena) +DN_API DN_OSExecResult DN_OS_ExecOrAbort(DN_Str8Slice cmd_line, DN_OSExecArgs args, DN_Arena *arena) { - DN_ErrSink *error = DN_TCErrSinkBegin(DN_ErrSinkMode_Nil); + DN_ErrSink *error = DN_TcErrSinkBegin(DN_ErrSinkMode_Nil); DN_OSExecResult result = DN_OS_Exec(cmd_line, args, arena, error); if (result.os_error_code) DN_ErrSinkEndExitIfErrorF(error, result.os_error_code, "OS failed to execute the requested command returning the error code %u", result.os_error_code); @@ -12412,7 +12418,7 @@ static void DN_OS_ThreadExecute_(void *user_context) DN_OS_SemaphoreWait(&thread->thread_exec_wait_for_thread_id_sem, DN_OS_SEMAPHORE_INFINITE_TIMEOUT); // NOTE: Setup thread context (TLS) _after_ thread ID is setup. - DN_TCInitFromHeap(&thread->context, thread->thread_id, thread->tc_init_args, DN_OS_HeapInitDefault()); + DN_TcInitFromHeap(&thread->context, thread->thread_id, thread->tc_init_args, DN_OS_HeapInitDefault()); // NOTE: Once all initialisation is done, if the thread is to be detached, make a copy of the // thread pointer because the caller is not guaranteeing to keep the thread pointer alive (they @@ -12425,9 +12431,9 @@ static void DN_OS_ThreadExecute_(void *user_context) // NOTE: Equip the pointers into TLS only _after_ the thread context is copied (if it was // detached) to avoid potential dangling ref in the TLS. - DN_TCEquip(&thread->context); + DN_TcEquip(&thread->context); if (thread->is_lane_set) { - DN_OS_TCThreadLaneEquip(thread->lane); + DN_OS_TcThreadLaneEquip(thread->lane); DN_OS_ThreadSetNameFmt("L%02zu/%02zu T%zu", thread->lane.index, thread->lane.count, thread->thread_id); } else { DN_OS_ThreadSetNameFmt("T%zu", thread->lane.index, thread->lane.count, thread->thread_id); @@ -12449,7 +12455,7 @@ static void DN_OS_ThreadExecute_(void *user_context) // up ourselves. DN_OS_SemaphoreDeinit(&thread->join_done_sem); #endif - DN_TCDeinit(&thread->context, DN_TCDeinitArenas_Yes); + DN_TcDeinit(&thread->context, DN_TcDeinitArenas_Yes); } else { #if !defined(DN_PLATFORM_WIN32) DN_OS_SemaphoreIncrement(&thread->join_done_sem, 1); // NOTE: Signal for DN_OS_ThreadJoin waits on this. @@ -12503,7 +12509,7 @@ static void DN_OS_ThreadPostInit_(DN_OSThread *thread, bool result) DN_API DN_OSThreadInitArgs DN_OS_ThreadInitArgsDefault() { DN_OSThreadInitArgs result = {}; - result.tc_args = DN_TCInitArgsDefault(); + result.tc_args = DN_TcInitArgsDefault(); return result; } @@ -12515,7 +12521,7 @@ DN_API bool DN_OS_ThreadInit(DN_OSThread *thread, DN_OSThreadFunc *func, DN_OSTh DN_API void DN_OS_ThreadSetNameFmt(char const *fmt, ...) { - DN_TCCore *tls = DN_TCGet(); + DN_TcCore *tls = DN_TcGet(); va_list args; va_start(args, fmt); tls->name = DN_Str8x64FromFmtV(fmt, args); @@ -12615,29 +12621,29 @@ DN_API void DN_OS_ThreadLanewayDispatch(DN_OSThreadLaneway *laneway, DN_OSThread } } -DN_API void DN_OS_ThreadLanewayJoin(DN_OSThreadLaneway *laneway, DN_U32 timeout_ms, DN_TCDeinitArenas deinit_arenas) +DN_API void DN_OS_ThreadLanewayJoin(DN_OSThreadLaneway *laneway, DN_U32 timeout_ms, DN_TcDeinitArenas deinit_arenas) { for (DN_ForItSize(it, DN_OSThread, laneway->threads, laneway->threads_count)) DN_OS_ThreadJoin(it.data, timeout_ms, deinit_arenas); DN_OS_BarrierDeinit(&laneway->barrier); } -DN_API DN_OSThreadLane *DN_OS_TCThreadLane() +DN_API DN_OSThreadLane *DN_OS_TcThreadLane() { - DN_TCCore *tc = DN_TCGet(); + DN_TcCore *tc = DN_TcGet(); DN_OSThreadLane *result = tc ? DN_Cast(DN_OSThreadLane *) tc->lane_opaque : nullptr; return result; } -DN_API void DN_OS_TCThreadLaneSync(void **ptr_to_share) +DN_API void DN_OS_TcThreadLaneSync(void **ptr_to_share) { - DN_OSThreadLane *lane = DN_OS_TCThreadLane(); + DN_OSThreadLane *lane = DN_OS_TcThreadLane(); DN_OS_ThreadLaneSync(lane, ptr_to_share); } -DN_API DN_OSThreadLane DN_OS_TCThreadLaneEquip(DN_OSThreadLane lane) +DN_API DN_OSThreadLane DN_OS_TcThreadLaneEquip(DN_OSThreadLane lane) { - DN_TCCore *tc = DN_TCGet(); + DN_TcCore *tc = DN_TcGet(); DN_OSThreadLane *curr = DN_Cast(DN_OSThreadLane *) tc->lane_opaque; DN_StaticAssert(sizeof(tc->lane_opaque) >= sizeof(DN_OSThreadLane)); DN_OSThreadLane result = *curr; @@ -12702,7 +12708,7 @@ DN_API void DN_OS_AsyncDeinit(DN_OSAsyncCore *async) DN_AtomicSetValue32(&async->join_threads, true); DN_OS_SemaphoreIncrement(&async->worker_sem, async->thread_count); for (DN_ForItSize(it, DN_OSThread, async->threads, async->thread_count)) - DN_OS_ThreadJoin(it.data, UINT32_MAX, DN_TCDeinitArenas_Yes); + DN_OS_ThreadJoin(it.data, UINT32_MAX, DN_TcDeinitArenas_Yes); } static bool DN_OS_AsyncQueueTask_(DN_OSAsyncCore *async, DN_OSAsyncTask const *task, DN_U64 wait_time_ms) { @@ -12822,10 +12828,10 @@ DN_API void DN_OS_Print(DN_OSPrintDest dest, DN_Str8 string) unsigned long bytes_written = 0; (void)bytes_written; if (print_to_console) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str16 string16 = DN_OS_W32Str8ToStr16(&scratch.arena, string); WriteConsoleW(print_handle, string16.data, DN_Cast(unsigned long) string16.count, &bytes_written, nullptr); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } else { WriteFile(print_handle, string.data, DN_Cast(unsigned long) string.count, &bytes_written, nullptr); } @@ -12854,14 +12860,14 @@ DN_API void DN_OS_PrintStyle(DN_OSPrintDest dest, DN_LogStyle style, DN_Str8 str { if (string.data && string.count) { if (style.colour) { - DN_Str8x32 colour = DN_Str8x32FromANSIColourCodeU8RGB(DN_ANSIColourMode_Fg, style.r, style.g, style.b); + DN_Str8x32 colour = DN_Str8x32FromAnsiColourCodeU8Rgb(DN_AnsiColourMode_Fg, style.r, style.g, style.b); DN_OS_Print(dest, DN_Str8FromStruct(&colour)); } if (style.bold == DN_LogBold_Yes) - DN_OS_Print(dest, DN_Str8Lit(DN_ANSICodeBoldLit)); + DN_OS_Print(dest, DN_Str8Lit(DN_AnsiCodeBoldLit)); DN_OS_Print(dest, string); if (style.colour || style.bold == DN_LogBold_Yes) - DN_OS_Print(dest, DN_Str8Lit(DN_ANSICodeResetLit)); + DN_OS_Print(dest, DN_Str8Lit(DN_AnsiCodeResetLit)); } } @@ -12887,14 +12893,14 @@ DN_API void DN_OS_PrintFVStyle(DN_OSPrintDest dest, DN_LogStyle style, DN_FMT_AT { if (fmt) { if (style.colour) { - DN_Str8x32 colour = DN_Str8x32FromANSIColourCodeU8RGB(DN_ANSIColourMode_Fg, style.r, style.g, style.b); + DN_Str8x32 colour = DN_Str8x32FromAnsiColourCodeU8Rgb(DN_AnsiColourMode_Fg, style.r, style.g, style.b); DN_OS_Print(dest, DN_Str8FromStruct(&colour)); } if (style.bold == DN_LogBold_Yes) - DN_OS_Print(dest, DN_Str8Lit(DN_ANSICodeBoldLit)); + DN_OS_Print(dest, DN_Str8Lit(DN_AnsiCodeBoldLit)); DN_OS_PrintFV(dest, fmt, args); if (style.colour || style.bold == DN_LogBold_Yes) - DN_OS_Print(dest, DN_Str8Lit(DN_ANSICodeResetLit)); + DN_OS_Print(dest, DN_Str8Lit(DN_AnsiCodeResetLit)); } } @@ -12956,10 +12962,10 @@ DN_API DN_StackTrace DN_StackTraceFromAllocator(DN_Allocator allocator, DN_U16 l w32->sym_initialised = true; SymSetOptions(SYMOPT_LOAD_LINES); if (!SymInitialize(result.process, nullptr /*UserSearchPath*/, true /*fInvadeProcess*/)) { - DN_TCScratch scratch = DN_TCScratchBeginAllocator(&allocator, 1); + DN_TcScratch scratch = DN_TcScratchBeginAllocator(&allocator, 1); DN_OSW32Error error = DN_OS_W32LastError(&scratch.arena); DN_LogErrorF("SymInitialize failed, stack trace can not be generated (%lu): %.*s\n", error.code, DN_Str8PrintFmt(error.msg)); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } } @@ -13046,11 +13052,11 @@ DN_API DN_Str8 DN_Str8FromStackTraceAllocator(DN_Allocator allocator, DN_StackTr if (!trace) return result; - DN_TCScratch scratch = DN_TCScratchBeginAllocator(&allocator, 1); + DN_TcScratch scratch = DN_TcScratchBeginAllocator(&allocator, 1); DN_Str8Builder builder = DN_Str8BuilderFromArena(&scratch.arena); DN_StackTraceAddToStr8Builder_(trace, &builder, skip); result = DN_Str8FromStr8BuilderAllocator(&builder, allocator); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -13060,20 +13066,20 @@ DN_API DN_Str8 DN_Str8FromStackTraceArena(DN_Arena *arena, DN_StackTrace const * if (!trace || !arena) return result; - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_Str8Builder builder = DN_Str8BuilderFromArena(&scratch.arena); DN_StackTraceAddToStr8Builder_(trace, &builder, skip); result = DN_Str8FromStr8BuilderArena(&builder, arena); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } DN_API DN_Str8 DN_Str8FromStackTraceNowAllocator(DN_Allocator allocator, DN_U16 limit, DN_U16 skip) { - DN_TCScratch scratch = DN_TCScratchBeginArena(DN_Cast(DN_Arena **) & allocator.context, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(DN_Cast(DN_Arena **) & allocator.context, 1); DN_StackTrace walk = DN_StackTraceFromArena(&scratch.arena, limit); DN_Str8 result = DN_Str8FromStackTraceAllocator(allocator, &walk, skip); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -13100,7 +13106,7 @@ DN_API DN_StackTraceFrameSlice DN_StackTraceGetFrames(DN_Arena *arena, DN_U16 li if (!arena) return result; - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_StackTrace walk = DN_StackTraceFromArena(&scratch.arena, limit); if (walk.size) { if (DN_ISliceAllocArena(&result, walk.size, DN_ZMem_No, arena)) { @@ -13109,7 +13115,7 @@ DN_API DN_StackTraceFrameSlice DN_StackTraceGetFrames(DN_Arena *arena, DN_U16 li result.data[slice_index++] = DN_StackTraceRawFrameToFrame(arena, it.raw_frame); } } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -13162,13 +13168,13 @@ DN_API DN_StackTraceFrame DN_StackTraceRawFrameToFrame(DN_Arena *arena, DN_Stack DN_API void DN_StackTracePrint(DN_U16 limit) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_StackTraceFrameSlice stack_trace = DN_StackTraceGetFrames(&scratch.arena, limit); for (DN_ForItSize(it, DN_StackTraceFrame, stack_trace.data, stack_trace.count)) { DN_StackTraceFrame frame = *it.data; DN_OS_PrintErrLnF("%.*s(%I64u): %.*s", DN_Str8PrintFmt(frame.file_name), frame.line_number, DN_Str8PrintFmt(frame.function_name)); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } DN_API void DN_StackTraceReloadSymbols() @@ -13249,7 +13255,7 @@ bool DN_NET_ResponseIsReady(DN_NETResponse const* resp) DN_Str8 DN_NET_Str8DiagnosticFromResponse(DN_NETResponse const* resp, DN_Arena *arena) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&arena, 1); + DN_TcScratch scratch = DN_TcScratchBeginArena(&arena, 1); DN_Str8Builder builder = DN_Str8BuilderFromArena(&scratch.arena); DN_Str8BuilderAppendF(&builder, "Request (%s", resp->type == DN_NETRequestType_HTTP ? "HTTP" : "WS"); if (resp->type == DN_NETRequestType_HTTP) { @@ -13265,7 +13271,7 @@ DN_Str8 DN_NET_Str8DiagnosticFromResponse(DN_NETResponse const* resp, DN_Arena * DN_Str8BuilderAppendF(&builder, "%s%.*s", resp->body.count ? ". " : "", DN_Str8PrintFmt(resp->error_str8)); } DN_Str8 result = DN_Str8FromStr8BuilderArena(&builder, arena); - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); return result; } @@ -13439,7 +13445,7 @@ static int32_t DN_NET_CurlThreadEntryPoint_(DN_OSThread *thread) DN_OS_ThreadSetNameFmt("%.*s", DN_Str8PrintFmt(curl->thread.name)); while (!curl->kill_thread) { - DN_TCScratch tmem = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch tmem = DN_TcScratchBeginArena(nullptr, 0); // NOTE: Handle events sitting in the ring queue for (bool dequeue_ring = true; dequeue_ring;) { @@ -13596,13 +13602,13 @@ static int32_t DN_NET_CurlThreadEntryPoint_(DN_OSThread *thread) req->response.state = DN_NETResponseState_WSOpen; } } else { - req->response.error_str8 = DN_Str8FromFmtArena(&req->start_response_arena, "Failed to get HTTP response status (CURL %d): %s", msg->data.result, curl_easy_strerror(get_result)); + req->response.error_str8 = DN_Str8FmtArena(&req->start_response_arena, "Failed to get HTTP response status (CURL %d): %s", msg->data.result, curl_easy_strerror(get_result)); req->response.state = DN_NETResponseState_Error; } } else { DN_USize curl_extended_error_size = DN_CStr8Count(curl_req->error); req->response.state = DN_NETResponseState_Error; - req->response.error_str8 = DN_Str8FromFmtArena(&req->start_response_arena, + req->response.error_str8 = DN_Str8FmtArena(&req->start_response_arena, "HTTP request '%.*s' failed (CURL %d): %s%s%s%s", DN_Str8PrintFmt(req->url), msg->data.result, @@ -13725,7 +13731,7 @@ static int32_t DN_NET_CurlThreadEntryPoint_(DN_OSThread *thread) } else if (receive_result != CURLE_OK) { DN_USize curl_extended_error_size = DN_CStr8Count(curl_req->error); req->response.state = DN_NETResponseState_Error; - req->response.error_str8 = DN_Str8FromFmtArena(&req->start_response_arena, + req->response.error_str8 = DN_Str8FmtArena(&req->start_response_arena, "Websocket receive '%.*s' failed (CURL %d): %s%s%s%s", DN_Str8PrintFmt(req->url), receive_result, @@ -13745,7 +13751,7 @@ static int32_t DN_NET_CurlThreadEntryPoint_(DN_OSThread *thread) DN_I32 sleep_time_ms = ws_count > 0 ? 16 : INT32_MAX; curl_multi_poll(curl->thread_curlm, nullptr, 0, sleep_time_ms, nullptr); - DN_TCScratchEnd(&tmem); + DN_TcScratchEnd(&tmem); } return 0; @@ -13789,7 +13795,7 @@ void DN_NET_CurlDeinit(DN_NETCore *net) DN_NETCurlCore *curl = DN_Cast(DN_NETCurlCore *) net->context; curl->kill_thread = true; curl_multi_wakeup(curl->thread_curlm); - DN_OS_ThreadJoin(&curl->thread, UINT32_MAX, DN_TCDeinitArenas_Yes); + DN_OS_ThreadJoin(&curl->thread, UINT32_MAX, DN_TcDeinitArenas_Yes); } static DN_NETRequestHandle DN_NET_CurlDoRequest_(DN_NETCore *net, DN_Str8 url, DN_Str8 method, DN_NETDoHTTPArgs const *args, DN_NETRequestType type) @@ -14204,7 +14210,7 @@ static bool DN_NET_EmcWSOnClose(int eventType, EmscriptenWebSocketCloseEvent con DN_NETCore *net = DN_Cast(DN_NETCore *) req->context[0]; DN_NETEmcWSEvent *net_event = DN_NET_EmcAllocWSEvent_(req); net_event->state = DN_NETResponseState_WSClose; - net_event->payload = DN_Str8FromFmtArena(&req->start_response_arena, + net_event->payload = DN_Str8FmtArena(&req->start_response_arena, "Websocket closed '%.*s': (%u) %s (was %s close)", DN_Str8PrintFmt(req->url), event->code, diff --git a/Source/dn.h b/Source/dn.h index 3aa6dbc..ba4ad3c 100644 --- a/Source/dn.h +++ b/Source/dn.h @@ -29,7 +29,7 @@ int main(int argc, char **argv) { DN_Core core = {}; - DN_Init(&core, DN_InitFlags_Nil, DN_TCInitArgsDefault()); + DN_Init(&core, DN_InitFlags_Nil, DN_TcInitArgsDefault()); return 0; } */ @@ -724,7 +724,7 @@ typedef DN_I32 DN_B32; #define DN_CountLeadingZerosU64(value) __lzcnt64(value) #define DN_CountLeadingZerosU32(value) __lzcnt(value) - #define DN_CPUGetTSC() __rdtsc() + #define DN_CPUGetTsc() __rdtsc() #define DN_CompilerReadBarrierAndCPUReadFence _ReadBarrier(); _mm_lfence() #define DN_CompilerWriteBarrierAndCPUWriteFence _WriteBarrier(); _mm_sfence() #elif defined(DN_COMPILER_GCC) || defined(DN_COMPILER_CLANG) @@ -749,9 +749,9 @@ typedef DN_I32 DN_B32; #define DN_CountLeadingZerosU32(value) __builtin_clzl(value) #if defined(DN_COMPILER_GCC) - #define DN_CPUGetTSC() __rdtsc() + #define DN_CPUGetTsc() __rdtsc() #else - #define DN_CPUGetTSC() __builtin_readcyclecounter() + #define DN_CPUGetTsc() __builtin_readcyclecounter() #endif #if defined(DN_PLATFORM_EMSCRIPTEN) @@ -884,7 +884,7 @@ struct DN_CPUIDArgs { int eax; int ecx; }; DN_CPU_FEAT_XENTRY(POPCNT) \ DN_CPU_FEAT_XENTRY(RDRAND) \ DN_CPU_FEAT_XENTRY(RDSEED) \ - DN_CPU_FEAT_XENTRY(RDTSCP) \ + DN_CPU_FEAT_XENTRY(RDTscP) \ DN_CPU_FEAT_XENTRY(SHA) \ DN_CPU_FEAT_XENTRY(SSE) \ DN_CPU_FEAT_XENTRY(SSE2) \ @@ -893,7 +893,7 @@ struct DN_CPUIDArgs { int eax; int ecx; }; DN_CPU_FEAT_XENTRY(SSE42) \ DN_CPU_FEAT_XENTRY(SSE4A) \ DN_CPU_FEAT_XENTRY(SSSE3) \ - DN_CPU_FEAT_XENTRY(TSC) \ + DN_CPU_FEAT_XENTRY(Tsc) \ DN_CPU_FEAT_XENTRY(TscInvariant) \ DN_CPU_FEAT_XENTRY(VAES) \ DN_CPU_FEAT_XENTRY(VPCMULQDQ) @@ -1384,7 +1384,7 @@ typedef DN_U32 DN_CodepointCountFlags; enum DN_CodepointCountFlags_ { DN_CodepointCountFlags_Nil = 0, - DN_CodepointCountFlags_SkipANSICode = 1 << 0, + DN_CodepointCountFlags_SkipAnsiCode = 1 << 0, }; typedef struct DN_NibbleFromU8Result DN_NibbleFromU8Result; @@ -1588,7 +1588,7 @@ struct DN_ProfilerAnchorArray DN_USize count; }; -typedef DN_U64 (DN_ProfilerTSCNowFunc)(); +typedef DN_U64 (DN_ProfilerTscNowFunc)(); typedef struct DN_Profiler DN_Profiler; struct DN_Profiler { @@ -1598,7 +1598,7 @@ struct DN_Profiler DN_USize anchors_per_frame; DN_U16 parent_zone; bool paused; - DN_ProfilerTSCNowFunc *tsc_now; + DN_ProfilerTscNowFunc *tsc_now; DN_U64 tsc_frequency; DN_ProfilerZone frame_zone; DN_F64 frame_avg_tsc; @@ -1674,25 +1674,25 @@ struct DN_ErrSink DN_USize stack_size; }; -typedef struct DN_TCScratch DN_TCScratch; -struct DN_TCScratch +typedef struct DN_TcScratch DN_TcScratch; +struct DN_TcScratch { DN_Arena arena; DN_B32 destructed; }; #if defined(__cplusplus) -typedef struct DN_TCScratchCpp DN_TCScratchCpp; -struct DN_TCScratchCpp +typedef struct DN_TcScratchCpp DN_TcScratchCpp; +struct DN_TcScratchCpp { - DN_TCScratchCpp(DN_Arena **conflicts, DN_USize count); - ~DN_TCScratchCpp(); - DN_TCScratch data; + DN_TcScratchCpp(DN_Arena **conflicts, DN_USize count); + ~DN_TcScratchCpp(); + DN_TcScratch data; }; #endif -typedef struct DN_TCInitArgs DN_TCInitArgs; -struct DN_TCInitArgs +typedef struct DN_TcInitArgs DN_TcInitArgs; +struct DN_TcInitArgs { DN_U64 main_reserve; DN_U64 main_commit; @@ -1703,8 +1703,8 @@ struct DN_TCInitArgs DN_U64 err_sink_commit; }; -typedef struct DN_TCCore DN_TCCore; -struct DN_TCCore // (T)hread (C)ontext sitting in thread-local storage +typedef struct DN_TcCore DN_TcCore; +struct DN_TcCore // (T)hread (C)ontext sitting in thread-local storage { DN_Str8x64 name; DN_U64 thread_id; @@ -1722,13 +1722,13 @@ struct DN_TCCore // (T)hread (C)ontext sitting in thread-local storage DN_Arena* frame_arena; }; -typedef enum DN_TCDeinitArenas { - DN_TCDeinitArenas_No, - DN_TCDeinitArenas_Yes, -} DN_TCDeinitArenas; +typedef enum DN_TcDeinitArenas { + DN_TcDeinitArenas_No, + DN_TcDeinitArenas_Yes, +} DN_TcDeinitArenas; -typedef struct DN_PCG32 DN_PCG32; -struct DN_PCG32 { DN_U64 state; }; +typedef struct DN_Pcg32 DN_Pcg32; +struct DN_Pcg32 { DN_U64 state; }; typedef struct DN_Murmur3 DN_Murmur3; struct DN_Murmur3 { DN_U64 e[2]; }; @@ -1762,10 +1762,10 @@ struct DN_LogTypeParam DN_Str8 str8; }; -typedef enum DN_ANSIColourMode { - DN_ANSIColourMode_Fg, - DN_ANSIColourMode_Bg, -} DN_ANSIColourMode; +typedef enum DN_AnsiColourMode { + DN_AnsiColourMode_Fg, + DN_AnsiColourMode_Bg, +} DN_AnsiColourMode; typedef struct DN_LogDate DN_LogDate; struct DN_LogDate @@ -2472,7 +2472,7 @@ struct DN_OSThreadInitArgs { // NOTE: Customise much memory the thread's TLS context will be initialised with which contains // persistent/temporary allocators and misc facilities that each thread has exclusive access to. - DN_TCInitArgs tc_args; + DN_TcInitArgs tc_args; // NOTE: Set how much stack space in bytes the thread will have. Leave this value to 0 to defer // to the OS's default stack size. @@ -2503,7 +2503,7 @@ struct DN_OSThread { DN_OSThreadFlags flags; DN_Str8x64 name; - DN_TCCore context; + DN_TcCore context; DN_OSThreadLane lane; bool is_lane_set; void *handle; @@ -2515,7 +2515,7 @@ struct DN_OSThread #if !defined(DN_PLATFORM_WIN32) DN_OSSemaphore join_done_sem; #endif - DN_TCInitArgs tc_init_args; + DN_TcInitArgs tc_init_args; }; typedef DN_U32 DN_OSLogFlags; @@ -2523,7 +2523,7 @@ enum DN_OSLoggerFlags_ { DN_OSLoggerFlags_Nil = 0, DN_OSLoggerFlags_File = 1 << 0, // Write the log to disk - DN_OSLoggerFlags_NoColour = 1 << 2, // Prevent outputting logs with ANSI colour codes (note: logs written to disk never use colour) + DN_OSLoggerFlags_NoColour = 1 << 2, // Prevent outputting logs with Ansi colour codes (note: logs written to disk never use colour) DN_OSLoggerFlags_NoOutput = 1 << 3, // Prevent outputting to the terminal // NOTE: Internal flags, do not use @@ -2629,7 +2629,7 @@ typedef struct DN_Core DN_Core; struct DN_Core { DN_InitFlags init_flags; - DN_TCCore main_tc; + DN_TcCore main_tc; DN_USize mem_allocs_frame; DN_LeakTracker leak; @@ -2660,10 +2660,10 @@ struct DN_Core // optionally call `DN_BeginFrame` which resets some metrics that are counted for example it // tracks the number of memory allocations for the current frame and that counter can be reset. // -// For convenience you can opt into some sane defaults for the `DN_TCInitArgs` which customises -// how thread-local storage is setup with `DN_TCInitArgsDefault()` which produces a -// `DN_TCInitArgs` object you can pass in by value. -DN_API void DN_Init (DN_Core *dn, DN_InitFlags flags, DN_TCInitArgs args); +// For convenience you can opt into some sane defaults for the `DN_TcInitArgs` which customises +// how thread-local storage is setup with `DN_TcInitArgsDefault()` which produces a +// `DN_TcInitArgs` object you can pass in by value. +DN_API void DN_Init (DN_Core *dn, DN_InitFlags flags, DN_TcInitArgs args); DN_API void DN_Set (DN_Core *dn); DN_API DN_Core* DN_Get (); DN_API void DN_BeginFrame (); @@ -2671,10 +2671,10 @@ DN_API void DN_BeginFrame DN_API bool DN_VerifyArgsF (DN_VerifyType type, bool expr, DN_CallSite call_site, DN_Str8 expr_str8, char const *fmt, ...); DN_API bool DN_VerifyArgs (DN_VerifyType type, bool expr, DN_CallSite call_site, DN_Str8 expr_str8); -#define DN_SPrintF(...) STB_SPRINTF_DECORATE(sprintf)(__VA_ARGS__) -#define DN_SNPrintF(...) STB_SPRINTF_DECORATE(snprintf)(__VA_ARGS__) -#define DN_VSPrintF(...) STB_SPRINTF_DECORATE(vsprintf)(__VA_ARGS__) -#define DN_VSNPrintF(...) STB_SPRINTF_DECORATE(vsnprintf)(__VA_ARGS__) +#define DN_Sprintf(...) STB_SPRINTF_DECORATE(sprintf)(__VA_ARGS__) +#define DN_Snprintf(...) STB_SPRINTF_DECORATE(snprintf)(__VA_ARGS__) +#define DN_Vsprintf(...) STB_SPRINTF_DECORATE(vsprintf)(__VA_ARGS__) +#define DN_Vsnprintf(...) STB_SPRINTF_DECORATE(vsnprintf)(__VA_ARGS__) DN_API bool DN_MemStartsWith (void const *lhs, DN_USize lhs_count, void const *rhs, DN_USize rhs_count); DN_API bool DN_MemEq (void const *lhs, DN_USize lhs_count, void const *rhs, DN_USize rhs_count); @@ -2742,7 +2742,7 @@ DN_API void DN_BitSetInplace DN_API bool DN_BitIsSet (DN_USize bits, DN_USize bits_to_set); DN_API bool DN_BitIsNotSet (DN_USize bits, DN_USize bits_to_check); DN_API bool DN_BitIsAny (DN_USize bits, DN_USize bits_to_check); -#define DN_BitClearNextLSB(value) (value) & ((value) - 1) +#define DN_BitClearNextLsb(value) (value) & ((value) - 1) DN_API DN_I64 DN_SafeAddI64 (DN_I64 a, DN_I64 b); DN_API DN_I64 DN_SafeMulI64 (DN_I64 a, DN_I64 b); @@ -2971,24 +2971,24 @@ DN_API void DN_ErrSinkAppendFV_ DN_API void DN_ErrSinkAppendF_ (DN_ErrSink *err, DN_U32 error_code, DN_CallSite call_site, DN_FMT_ATTRIB char const *fmt, ...); #define DN_ErrSinkAppendF(error, error_code, fmt, ...) DN_ErrSinkAppendF_(error, error_code, DN_CallSiteNow, fmt, ##__VA_ARGS__) -DN_API DN_TCInitArgs DN_TCInitArgsDefault (); -DN_API void DN_TCInit (DN_TCCore *tc, DN_U64 thread_id, DN_Arena *main_arena, DN_Arena *temp_arenas, DN_USize temp_arenas_count, DN_Arena *err_sink_arena); -DN_API void DN_TCInitFromHeap (DN_TCCore *tc, DN_U64 thread_id, DN_TCInitArgs args, DN_Heap heap); -DN_API void DN_TCDeinit (DN_TCCore *tc, DN_TCDeinitArenas deinit_arenas); -DN_API void DN_TCEquip (DN_TCCore *tc); -DN_API DN_TCCore* DN_TCGet (); -DN_API DN_Arena* DN_TCMainArena (); -DN_API DN_Pool* DN_TCMainPool (); -DN_API DN_Arena DN_TCTempArenaFromAllocator (DN_Allocator *conflicts, DN_USize count); -DN_API DN_Arena DN_TCTempArenaFromArena (DN_Arena **conflicts, DN_USize count); -DN_API DN_TCScratch DN_TCScratchBeginAllocator (DN_Allocator *conflicts, DN_USize count); -DN_API DN_TCScratch DN_TCScratchBeginArena (DN_Arena **conflicts, DN_USize count); -DN_API void DN_TCScratchEnd (DN_TCScratch *scratch); -DN_API void DN_TCSetFrameArena (DN_Arena *arena); -DN_API DN_Arena* DN_TCFrameArena (); -DN_API DN_ErrSink* DN_TCErrSink (); -#define DN_TCErrSinkBegin(mode) DN_ErrSinkBegin(DN_TCErrSink(), mode) -#define DN_TCErrSinkBeginDefault() DN_ErrSinkBeginDefault(DN_TCErrSink()) +DN_API DN_TcInitArgs DN_TcInitArgsDefault (); +DN_API void DN_TcInit (DN_TcCore *tc, DN_U64 thread_id, DN_Arena *main_arena, DN_Arena *temp_arenas, DN_USize temp_arenas_count, DN_Arena *err_sink_arena); +DN_API void DN_TcInitFromHeap (DN_TcCore *tc, DN_U64 thread_id, DN_TcInitArgs args, DN_Heap heap); +DN_API void DN_TcDeinit (DN_TcCore *tc, DN_TcDeinitArenas deinit_arenas); +DN_API void DN_TcEquip (DN_TcCore *tc); +DN_API DN_TcCore* DN_TcGet (); +DN_API DN_Arena* DN_TcMainArena (); +DN_API DN_Pool* DN_TcMainPool (); +DN_API DN_Arena DN_TcTempArenaFromAllocator (DN_Allocator *conflicts, DN_USize count); +DN_API DN_Arena DN_TcTempArenaFromArena (DN_Arena **conflicts, DN_USize count); +DN_API DN_TcScratch DN_TcScratchBeginAllocator (DN_Allocator *conflicts, DN_USize count); +DN_API DN_TcScratch DN_TcScratchBeginArena (DN_Arena **conflicts, DN_USize count); +DN_API void DN_TcScratchEnd (DN_TcScratch *scratch); +DN_API void DN_TcSetFrameArena (DN_Arena *arena); +DN_API DN_Arena* DN_TcFrameArena (); +DN_API DN_ErrSink* DN_TcErrSink (); +#define DN_TcErrSinkBegin(mode) DN_ErrSinkBegin(DN_TcErrSink(), mode) +#define DN_TcErrSinkBeginDefault() DN_ErrSinkBeginDefault(DN_TcErrSink()) DN_API bool DN_CharIsAlphabet (char ch); DN_API bool DN_CharIsDigit (char ch); @@ -3062,12 +3062,12 @@ DN_API DN_Str8 DN_Str8FromPtrPool DN_API DN_Str8 DN_Str8FromStr8Allocator (DN_Str8 string, DN_Allocator allocator); DN_API DN_Str8 DN_Str8FromStr8Arena (DN_Str8 string, DN_Arena *arena); DN_API DN_Str8 DN_Str8FromStr8Pool (DN_Str8 string, DN_Pool *pool); -DN_API DN_Str8 DN_Str8FromFmtVAllocator (DN_Allocator allocator, DN_FMT_ATTRIB char const *fmt, va_list args); -DN_API DN_Str8 DN_Str8FromFmtVArena (DN_Arena *arena, DN_FMT_ATTRIB char const *fmt, va_list args); -DN_API DN_Str8 DN_Str8FromFmtAllocator (DN_Allocator allocator, DN_FMT_ATTRIB char const *fmt, ...); -DN_API DN_Str8 DN_Str8FromFmtArena (DN_Arena *arena, DN_FMT_ATTRIB char const *fmt, ...); -DN_API DN_Str8 DN_Str8FromFmtVPool (DN_Pool *pool, DN_FMT_ATTRIB char const *fmt, va_list args); -DN_API DN_Str8 DN_Str8FromFmtPool (DN_Pool *pool, DN_FMT_ATTRIB char const *fmt, ...); +DN_API DN_Str8 DN_Str8FmtVAllocator (DN_Allocator allocator, DN_FMT_ATTRIB char const *fmt, va_list args); +DN_API DN_Str8 DN_Str8FmtVArena (DN_Arena *arena, DN_FMT_ATTRIB char const *fmt, va_list args); +DN_API DN_Str8 DN_Str8FmtAllocator (DN_Allocator allocator, DN_FMT_ATTRIB char const *fmt, ...); +DN_API DN_Str8 DN_Str8FmtArena (DN_Arena *arena, DN_FMT_ATTRIB char const *fmt, ...); +DN_API DN_Str8 DN_Str8FmtVPool (DN_Pool *pool, DN_FMT_ATTRIB char const *fmt, va_list args); +DN_API DN_Str8 DN_Str8FmtPool (DN_Pool *pool, DN_FMT_ATTRIB char const *fmt, ...); DN_API DN_Str8x16 DN_Str8x16FromFmt (DN_FMT_ATTRIB char const *fmt, ...); DN_API DN_Str8x16 DN_Str8x16FromFmtV (DN_FMT_ATTRIB char const *fmt, va_list args); @@ -3285,8 +3285,8 @@ DN_API DN_Str8x32 DN_Str8x32FromByteCountU64 // API // DN_ProfilerInit // You can set `tsc_now` to NULL to use the default timer mechanic which relies on -// DN_CPUGetTSC() which essentially uses __rdtsc. `tsc_frequency` must however always be -// provided, for, DN_CPUGetTSC() you can use `DN_OS_EstimateTSCPerSecond()` to calculate the +// DN_CPUGetTsc() which essentially uses __rdtsc. `tsc_frequency` must however always be +// provided, for, DN_CPUGetTsc() you can use `DN_OS_EstimateTscPerSecond()` to calculate the // frequency of `__rdtsc`. // DN_ProfilerNewFrame // Always call `DN_ProfilerNewFrame` at-least once using the `Zone` family of functions as it @@ -3305,7 +3305,7 @@ DN_API DN_Str8x32 DN_Str8x32FromByteCountU64 DN_ProfilerEndZone(DN_UniqueName(zone_)), DN_UniqueName(dummy_).begin_tsc = 1 #define DN_ProfilerZoneLoopAuto(prof, name) DN_ProfilerZoneLoop(prof, name, __COUNTER__ + 1) -DN_API DN_Profiler DN_ProfilerInit (DN_ProfilerAnchor *anchors, DN_USize count, DN_USize anchors_per_frame, DN_ProfilerTSCNowFunc *tsc_now, DN_U64 tsc_frequency); +DN_API DN_Profiler DN_ProfilerInit (DN_ProfilerAnchor *anchors, DN_USize count, DN_USize anchors_per_frame, DN_ProfilerTscNowFunc *tsc_now, DN_U64 tsc_frequency); DN_API DN_ProfilerZone DN_ProfilerBeginZone (DN_Profiler *profiler, DN_Str8 name, DN_U16 anchor_index); #define DN_ProfilerBeginZoneAuto(prof, name) DN_ProfilerBeginZone(prof, DN_Str8Lit(name), __COUNTER__ + 1) DN_API void DN_ProfilerEndZone (DN_ProfilerZone zone); @@ -3316,8 +3316,8 @@ DN_API void DN_ProfilerNewFrame DN_API DN_USize DN_ProfilerFmtAnchor (DN_ProfilerAnchor anchor, DN_U64 tsc_frequency, char *buffer, DN_USize count); DN_API DN_Str8 DN_ProfilerFmtAnchorStr8 (DN_ProfilerAnchor anchor, DN_U64 tsc_frequency, DN_Arena *arena); DN_API void DN_ProfilerFmtToStdout (DN_Profiler *profiler); -DN_API DN_F64 DN_ProfilerSecFromTSC (DN_Profiler *profiler, DN_U64 duration_tsc); -DN_API DN_F64 DN_ProfilerMsFromTSC (DN_Profiler *profiler, DN_U64 duration_tsc); +DN_API DN_F64 DN_ProfilerSecFromTsc (DN_Profiler *profiler, DN_U64 duration_tsc); +DN_API DN_F64 DN_ProfilerMsFromTsc (DN_Profiler *profiler, DN_U64 duration_tsc); DN_API void DN_QSort (void *array, DN_USize array_size, DN_USize elem_size, void *user_context, DN_QSortCompareFunc *compare); DN_API bool DN_QSortCompareStr8NaturalAsc (void const* lhs, void const *rhs, void *user_context); @@ -3340,24 +3340,24 @@ DN_API DN_BSearchResult DN_BSearchUSize DN_API DN_BSearchResult DN_BSearchU64 (DN_U64 const *array, DN_USize count, DN_U64 find, DN_BSearchType type); DN_API DN_BSearchResult DN_BSearchU32 (DN_U32 const *array, DN_USize count, DN_U32 find, DN_BSearchType type); -DN_API DN_PCG32 DN_PCG32Init (DN_U64 seed); -DN_API DN_U32 DN_PCG32Next (DN_PCG32 *rng); -DN_API DN_U64 DN_PCG32Next64 (DN_PCG32 *rng); -DN_API DN_U32 DN_PCG32Range (DN_PCG32 *rng, DN_U32 low, DN_U32 high); -DN_API DN_F32 DN_PCG32NextF32 (DN_PCG32 *rng); -DN_API DN_F64 DN_PCG32NextF64 (DN_PCG32 *rng); -DN_API void DN_PCG32Advance (DN_PCG32 *rng, DN_U64 delta); +DN_API DN_Pcg32 DN_Pcg32Init (DN_U64 seed); +DN_API DN_U32 DN_Pcg32Next (DN_Pcg32 *rng); +DN_API DN_U64 DN_Pcg32Next64 (DN_Pcg32 *rng); +DN_API DN_U32 DN_Pcg32Range (DN_Pcg32 *rng, DN_U32 low, DN_U32 high); +DN_API DN_F32 DN_Pcg32NextF32 (DN_Pcg32 *rng); +DN_API DN_F64 DN_Pcg32NextF64 (DN_Pcg32 *rng); +DN_API void DN_Pcg32Advance (DN_Pcg32 *rng, DN_U64 delta); -#if !defined(DN_FNV1A32_SEED) - #define DN_FNV1A32_SEED 2166136261U +#if !defined(DN_Fnv1a32_SEED) + #define DN_Fnv1a32_SEED 2166136261U #endif -#if !defined(DN_FNV1A64_SEED) - #define DN_FNV1A64_SEED 14695981039346656037ULL +#if !defined(DN_Fnv1a64_SEED) + #define DN_Fnv1a64_SEED 14695981039346656037ULL #endif -DN_API DN_U32 DN_FNV1AHashU32FromBytes (void const *bytes, DN_USize count, DN_U32 seed); -DN_API DN_U64 DN_FNV1AHashU64FromBytes (void const *bytes, DN_USize count, DN_U64 seed); +DN_API DN_U32 DN_Fnv1aHashU32FromBytes (void const *bytes, DN_USize count, DN_U32 seed); +DN_API DN_U64 DN_Fnv1aHashU64FromBytes (void const *bytes, DN_USize count, DN_U64 seed); DN_API DN_U32 DN_Murmur3HashU32FromBytesX86 (void const *bytes, int len, DN_U32 seed); DN_API DN_Murmur3 DN_Murmur3HashU128FromBytesX64 (void const *bytes, int len, DN_U32 seed); @@ -3370,15 +3370,15 @@ DN_API DN_U32 DN_Murmur3HashU32FromBytesX64 #define DN_Murmur3HashU32FromBytes(bytes, len, seed) DN_Murmur3HashU32FromBytesX86(bytes, len, seed) #endif -#define DN_ANSICodeBoldLit "\x1b[1m" -#define DN_ANSICodeResetLit "\x1b[0m" -DN_API DN_Str8x32 DN_Str8x32FromANSIColourCodeU8RGB (DN_ANSIColourMode mode, DN_U8 r, DN_U8 g, DN_U8 b); -DN_API DN_Str8x32 DN_Str8x32FromANSIColourCodeV3F32RGB255 (DN_ANSIColourMode mode, DN_V3F32 rgb_255); -DN_API DN_Str8x32 DN_Str8x32FromANSIColourCodeU32RGB (DN_ANSIColourMode mode, DN_U32 value); -DN_API DN_Str8 DN_Str8FromStr8ANSIColourU8RGBArena (DN_ANSIColourMode mode, DN_Str8 str8, DN_U8 r, DN_U8 g, DN_U8 b, DN_Arena *arena); -DN_API DN_Str8 DN_Str8FromStr8ANSIColourV3F32RGB255Arena (DN_ANSIColourMode mode, DN_Str8 str8, DN_V3F32 rgb_255, DN_Arena *arena); -DN_API DN_Str8 DN_Str8FromFmtANSIColourU8RGBArena (DN_ANSIColourMode mode, DN_U8 r, DN_U8 g, DN_U8 b, DN_Arena *arena, char const *fmt, ...); -DN_API DN_Str8 DN_Str8FromFmtANSIColourV3F32RGB255Arena (DN_ANSIColourMode mode, DN_V3F32 rgb_255, DN_Arena *arena, char const *fmt, ...); +#define DN_AnsiCodeBoldLit "\x1b[1m" +#define DN_AnsiCodeResetLit "\x1b[0m" +DN_API DN_Str8x32 DN_Str8x32FromAnsiColourCodeU8Rgb (DN_AnsiColourMode mode, DN_U8 r, DN_U8 g, DN_U8 b); +DN_API DN_Str8x32 DN_Str8x32FromAnsiColourCodeV3F32Rgb255 (DN_AnsiColourMode mode, DN_V3F32 rgb_255); +DN_API DN_Str8x32 DN_Str8x32FromAnsiColourCodeU32Rgb (DN_AnsiColourMode mode, DN_U32 value); +DN_API DN_Str8 DN_Str8FromStr8AnsiColourU8RgbArena (DN_AnsiColourMode mode, DN_Str8 str8, DN_U8 r, DN_U8 g, DN_U8 b, DN_Arena *arena); +DN_API DN_Str8 DN_Str8FromStr8AnsiColourV3F32Rgb255Arena (DN_AnsiColourMode mode, DN_Str8 str8, DN_V3F32 rgb_255, DN_Arena *arena); +DN_API DN_Str8 DN_Str8FmtAnsiColourU8RgbArena (DN_AnsiColourMode mode, DN_U8 r, DN_U8 g, DN_U8 b, DN_Arena *arena, char const *fmt, ...); +DN_API DN_Str8 DN_Str8FmtAnsiColourV3F32Rgb255Arena (DN_AnsiColourMode mode, DN_V3F32 rgb_255, DN_Arena *arena, char const *fmt, ...); // NOTE: Create log printable lines with a date prefix, severity and message. The platform // implementation should call `SetPrintFunc` to intercept the log messages and output to the desired @@ -3580,7 +3580,7 @@ DN_API DN_F32 DN_V2F32Area // NOTE: Grayscale co-efficients from: // https://github.com/EpicGames/UnrealEngine/blob/260bb2e1c5610b31c63a36206eedd289409c5f11/Engine/Source/Runtime/Core/Private/Math/Color.cpp#L304 -DN_V3F32 static const DN_V3F32_RGB_LUMINANCE = DN_V3F32From3N(0.3f, 0.59f, 0.11f); +DN_V3F32 static const DN_V3F32_Rgb_LUMINANCE = DN_V3F32From3N(0.3f, 0.59f, 0.11f); DN_API bool operator== (DN_V3F32 lhs, DN_V3F32 rhs); DN_API bool operator!= (DN_V3F32 lhs, DN_V3F32 rhs); @@ -3613,16 +3613,16 @@ DN_API DN_V3F32 DN_V3F32Normalise #define DN_V4F32From1N(x) DN_Literal(DN_V4F32){{(DN_F32)(x), (DN_F32)(x), (DN_F32)(x), (DN_F32)(x)}} #define DN_V4F32From4N(x, y, z, w) DN_Literal(DN_V4F32){{(DN_F32)(x), (DN_F32)(y), (DN_F32)(z), (DN_F32)(w)}} #define DN_V4F32FromV3And1N(xyz, w) DN_Literal(DN_V4F32){{xyz.x, xyz.y, xyz.z, w}} -#define DN_V4F32RGBA01FromRGBAU8(r, g, b, a) DN_Literal(DN_V4F32){{r / 255.f, g / 255.f, b / 255.f, a / 255.f}} -#define DN_V4F32RGBA01FromRGBU8(r, g, b) DN_Literal(DN_V4F32){{r / 255.f, g / 255.f, b / 255.f, 1.f}} +#define DN_V4F32Rgba01FromRgbaU8(r, g, b, a) DN_Literal(DN_V4F32){{r / 255.f, g / 255.f, b / 255.f, a / 255.f}} +#define DN_V4F32Rgba01FromRgbU8(r, g, b) DN_Literal(DN_V4F32){{r / 255.f, g / 255.f, b / 255.f, 1.f}} DN_API DN_V4F32 DN_V4F32Lerp (DN_V4F32 lhs, DN_F32 t01, DN_V4F32 rhs); -DN_API bool DN_V4F32RGBA01IsValid (DN_V4F32 rgba01); -DN_API DN_V4F32 DN_V4F32RGBA01FromRGBU32 (DN_U32 u32); -DN_API DN_V4F32 DN_V4F32RGBA01FromRGBAU32 (DN_U32 u32); -DN_API DN_V4F32 DN_V4F32Linear01FromSRGB01 (DN_V4F32 rgb01); -DN_API DN_V4F32 DN_V4F32Linear01Desaturate (DN_V4F32 linear01, DN_F32 t01); -DN_API DN_V4F32 DN_V4F32SRGB01FromLinear01 (DN_V4F32 linear01); +DN_API bool DN_V4F32Rgba01IsValid (DN_V4F32 rgba01); +DN_API DN_V4F32 DN_V4F32Rgba01FromRgbU32 (DN_U32 u32); +DN_API DN_V4F32 DN_V4F32Rgba01FromRgbaU32 (DN_U32 u32); +DN_API DN_V4F32 DN_V4F32Linear01FromSrgb01 (DN_V4F32 rgb01); +DN_API DN_V4F32 DN_V4F32Linear01Desaturate (DN_V4F32 linear01, DN_F32 t01); +DN_API DN_V4F32 DN_V4F32Srgb01FromLinear01 (DN_V4F32 linear01); #define DN_V4F32FromV4Alpha(v4, alpha) DN_V4F32FromV3And1N(v4.xyz, alpha) @@ -4608,8 +4608,8 @@ DN_API DN_U64 DN_OS_DateLocalUnixTimeSFromUnixTimeS (D DN_API void DN_OS_GenBytesSecure (void *buffer, DN_U32 size); DN_API bool DN_OS_SetEnvVar (DN_Str8 name, DN_Str8 value); DN_API DN_OSDiskSpace DN_OS_DiskSpace (DN_Str8 path); -DN_API DN_Str8 DN_OS_EXEPath (DN_Arena *arena); -DN_API DN_Str8 DN_OS_EXEDir (DN_Arena *arena); +DN_API DN_Str8 DN_OS_ExePath (DN_Arena *arena); +DN_API DN_Str8 DN_OS_ExeDir (DN_Arena *arena); DN_API void DN_OS_SleepMs (DN_UInt milliseconds); DN_API DN_U64 DN_OS_PerfCounterNow (); @@ -4624,7 +4624,7 @@ DN_API DN_F64 DN_OS_TimerS (D DN_API DN_F64 DN_OS_TimerMs (DN_OSTimer timer); DN_API DN_F64 DN_OS_TimerUs (DN_OSTimer timer); DN_API DN_F64 DN_OS_TimerNs (DN_OSTimer timer); -DN_API DN_U64 DN_OS_EstimateTSCPerSecond (uint64_t duration_ms_to_gauge_tsc_frequency); +DN_API DN_U64 DN_OS_EstimateTscPerSecond (uint64_t duration_ms_to_gauge_tsc_frequency); // NOTE: OS File // Overview @@ -4715,11 +4715,12 @@ DN_API DN_Str8 DN_OS_PathFmtPool (D #define DN_OS_PathBuild(allocator, fs_path) DN_OS_PathBuildWithSeparatorAllocator(allocator, fs_path, DN_OSPathSeparatorStr8) DN_API void DN_OS_Exit (int32_t exit_code); +DN_API DN_OSExecArgs DN_OS_ExecArgsDefault (); DN_API DN_OSExecResult DN_OS_ExecPump (DN_OSExecAsyncHandle handle, char *stdout_buffer, size_t *stdout_size, char *stderr_buffer, size_t *stderr_size, DN_U32 timeout_ms, DN_ErrSink *err); DN_API DN_OSExecResult DN_OS_ExecWait (DN_OSExecAsyncHandle handle, DN_Arena *arena, DN_ErrSink *err); -DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync (DN_Str8Slice cmd_line, DN_OSExecArgs *args, DN_ErrSink *err); -DN_API DN_OSExecResult DN_OS_Exec (DN_Str8Slice cmd_line, DN_OSExecArgs *args, DN_Arena *arena, DN_ErrSink *err); -DN_API DN_OSExecResult DN_OS_ExecOrAbort (DN_Str8Slice cmd_line, DN_OSExecArgs *args, DN_Arena *arena); +DN_API DN_OSExecAsyncHandle DN_OS_ExecAsync (DN_Str8Slice cmd_line, DN_OSExecArgs args, DN_ErrSink *err); +DN_API DN_OSExecResult DN_OS_Exec (DN_Str8Slice cmd_line, DN_OSExecArgs args, DN_Arena *arena, DN_ErrSink *err); +DN_API DN_OSExecResult DN_OS_ExecOrAbort (DN_Str8Slice cmd_line, DN_OSExecArgs args, DN_Arena *arena); DN_API DN_OSSemaphore DN_OS_SemaphoreInit (DN_U32 initial_count); DN_API void DN_OS_SemaphoreDeinit (DN_OSSemaphore *semaphore); @@ -4755,7 +4756,7 @@ DN_API void DN_OS_ConditionVariableBroadcast (D // // `tc_init_args` customises how much memory is allocated for the thread's TLS context which // contains allocators that are exclusively owned by the thread. You may use -// DN_TCInitArgsDefault() for sensible default values. +// DN_TcInitArgsDefault() for sensible default values. // // Note not all fields in the thread will be initialised until the thread has itself run its // initialisation code which is entirely dependent on the OS scheduler, scheduling the thread to @@ -4780,7 +4781,7 @@ DN_API void DN_OS_ConditionVariableBroadcast (D // waiting for the thread to join. DN_API bool DN_OS_ThreadInitLane (DN_OSThread *thread, DN_OSThreadFunc *func, DN_OSThreadLane *lane, DN_OSThreadInitArgs init_args, void *user_context); DN_API bool DN_OS_ThreadInit (DN_OSThread *thread, DN_OSThreadFunc *func, DN_OSThreadInitArgs init_args, void *user_context); -DN_API bool DN_OS_ThreadJoin (DN_OSThread *thread, DN_U32 timeout_ms, DN_TCDeinitArenas deinit_arenas); +DN_API bool DN_OS_ThreadJoin (DN_OSThread *thread, DN_U32 timeout_ms, DN_TcDeinitArenas deinit_arenas); DN_API DN_U32 DN_OS_ThreadID (); DN_API DN_OSThreadInitArgs DN_OS_ThreadInitArgsDefault (); DN_API void DN_OS_ThreadSetNameFmt (char const *fmt, ...); @@ -4815,12 +4816,12 @@ DN_API void DN_OS_ThreadSetNameFmt (c // to broadcast the pointer must have a non-null pointer, all other lanes must pass in a // non-null pointer. A typical use case might look like: /* - DN_OSThreadLane *lane = DN_OS_TCThreadLane(); // Get lane from current (t)hread (c)context + DN_OSThreadLane *lane = DN_OS_TcThreadLane(); // Get lane from current (t)hread (c)context // NOTE: Allocate buffer in lane 0 DN_U8 *buffer = nullptr; if (lane->index == 0) - buffer = DN_ArenaNewArray(DN_TCMainArena(), DN_U8, DN_Gigabytes(1), DN_ZMem_No); + buffer = DN_ArenaNewArray(DN_TcMainArena(), DN_U8, DN_Gigabytes(1), DN_ZMem_No); // NOTE: Lane 0 broadcasts the `buffer` pointer to lane 1..N DN_OS_ThreadLaneSync(lane, &buffer); @@ -4854,11 +4855,11 @@ DN_API DN_V2USize DN_OS_ThreadLaneRange (D DN_API DN_OSThreadLaneway DN_OS_ThreadLanewayFromArgs (DN_OSThread* threads, DN_USize threads_count, DN_UPtr* shared_mem); DN_API DN_OSThreadLaneway DN_OS_ThreadLanewayFromArena (DN_USize threads_count, DN_Arena* arena); DN_API void DN_OS_ThreadLanewayDispatch (DN_OSThreadLaneway *laneway, DN_OSThreadFunc *entry_point, DN_OSThreadInitArgs init_args, void *user_context); -DN_API void DN_OS_ThreadLanewayJoin (DN_OSThreadLaneway *laneway, DN_U32 timeout_ms, DN_TCDeinitArenas deinit_arenas); +DN_API void DN_OS_ThreadLanewayJoin (DN_OSThreadLaneway *laneway, DN_U32 timeout_ms, DN_TcDeinitArenas deinit_arenas); -DN_API DN_OSThreadLane* DN_OS_TCThreadLane (); -DN_API void DN_OS_TCThreadLaneSync (void **ptr_to_share); -DN_API DN_OSThreadLane DN_OS_TCThreadLaneEquip (DN_OSThreadLane lane); +DN_API DN_OSThreadLane* DN_OS_TcThreadLane (); +DN_API void DN_OS_TcThreadLaneSync (void **ptr_to_share); +DN_API DN_OSThreadLane DN_OS_TcThreadLaneEquip (DN_OSThreadLane lane); DN_API void DN_OS_AsyncInit (DN_OSAsyncCore *async, char *base, DN_USize base_size, DN_OSThread *threads, DN_U32 threads_size); DN_API void DN_OS_AsyncDeinit (DN_OSAsyncCore *async); diff --git a/Source/dn_tests.cpp b/Source/dn_tests.cpp index dbf63e3..6211377 100644 --- a/Source/dn_tests.cpp +++ b/Source/dn_tests.cpp @@ -27,9 +27,9 @@ DN_MSVC_WARNING_DISABLE(6262) // Function uses '29804' bytes of stack. Consider int main(int, char**) { DN_Core dn = {}; - DN_Init(&dn, DN_InitFlags_LogAllFeatures | DN_InitFlags_OS, DN_TCInitArgsDefault()); + DN_Init(&dn, DN_InitFlags_LogAllFeatures | DN_InitFlags_OS, DN_TcInitArgsDefault()); - DN_Arena* arena = DN_TCMainArena(); + DN_Arena* arena = DN_TcMainArena(); DN_TestCore dn_test = DN_TestSuite(arena); DN_TestCore sha3_test = DN_SHA3_TestSuite(arena); DN_Str8 dn_str8 = DN_Str8FromTestCore(&dn_test, arena, DN_Str8FromTestCoreFlags_Colour); diff --git a/single_header_generator.cpp b/single_header_generator.cpp index e57d3ed..3dd3fcf 100644 --- a/single_header_generator.cpp +++ b/single_header_generator.cpp @@ -26,8 +26,8 @@ struct File static void AppendCppFileLineByLine(DN_Str8Builder *dest, DN_Str8 cpp_path) { - DN_TCScratch scratch = DN_TCScratchBeginArena(&dest->arena, 1); - DN_ErrSink *err = DN_TCErrSinkBeginDefault(); + DN_TcScratch scratch = DN_TcScratchBeginArena(&dest->arena, 1); + DN_ErrSink *err = DN_TcErrSinkBeginDefault(); DN_Str8 buffer = DN_OS_FileReadAllArena(&scratch.arena, cpp_path, err); DN_ErrSinkEndExitIfErrorF(err, -1, "Failed to load file from '%S' for appending", cpp_path); @@ -44,7 +44,7 @@ static void AppendCppFileLineByLine(DN_Str8Builder *dest, DN_Str8 cpp_path) if (!inside_clangd_preprocessor_block) { DN_Str8FindResult find = DN_Str8FindStr8(line, DN_Str8Lit("#if defined(_CLANGD)"), DN_Str8EqCase_Sensitive); if (find.found) { - line = DN_Str8FromFmtArena(&scratch.arena, "%S// DN: Single header generator commented out => %S", find.start_to_before_match, DN_Str8TrimWhitespaceAround(find.match_to_end_of_buffer)); + line = DN_Str8FmtArena(&scratch.arena, "%S// DN: Single header generator commented out => %S", find.start_to_before_match, DN_Str8TrimWhitespaceAround(find.match_to_end_of_buffer)); commented_out = true; inside_clangd_preprocessor_block = true; } @@ -62,7 +62,7 @@ static void AppendCppFileLineByLine(DN_Str8Builder *dest, DN_Str8 cpp_path) if (!ignore.found) { DN_Str8FindResult find = DN_Str8FindStr8(line, DN_Str8Lit("#include \""), DN_Str8EqCase_Sensitive); if (find.found) { - line = DN_Str8FromFmtArena(&scratch.arena, "%S// DN: Single header generator commented out => %S", find.start_to_before_match, DN_Str8TrimWhitespaceAround(find.match_to_end_of_buffer)); + line = DN_Str8FmtArena(&scratch.arena, "%S// DN: Single header generator commented out => %S", find.start_to_before_match, DN_Str8TrimWhitespaceAround(find.match_to_end_of_buffer)); DN_Str8 rel_include_path = DN_Str8TrimWhitespaceAround(find.after_match_to_end_of_buffer); DN_Str8 root_dir = DN_Str8FileDirectoryFromPath(cpp_path); extra_include_path = DN_OS_PathFmtArena(&scratch.arena, "%S/%S", root_dir, DN_Str8TrimSuffixSensitive(rel_include_path, DN_Str8Lit("\""))); @@ -73,7 +73,7 @@ static void AppendCppFileLineByLine(DN_Str8Builder *dest, DN_Str8 cpp_path) // NOTE: Detect if we're at the end of the CLAND block if (inside_clangd_preprocessor_block) { if (!commented_out) - line = DN_Str8FromFmtArena(&scratch.arena, "// %S", line); + line = DN_Str8FmtArena(&scratch.arena, "// %S", line); if (DN_Str8FindStr8(line, DN_Str8Lit("#endif"), DN_Str8EqCase_Sensitive).found) inside_clangd_preprocessor_block = false; } @@ -84,13 +84,13 @@ static void AppendCppFileLineByLine(DN_Str8Builder *dest, DN_Str8 cpp_path) if (extra_include_path.count) AppendCppFileLineByLine(dest, extra_include_path); } - DN_TCScratchEnd(&scratch); + DN_TcScratchEnd(&scratch); } int main(int argc, char **argv) { DN_Core dn = {}; - DN_Init(&dn, DN_InitFlags_OS, DN_TCInitArgsDefault()); + DN_Init(&dn, DN_InitFlags_OS, DN_TcInitArgsDefault()); if (argc != 3) { DN_OS_PrintErrF("USAGE: %s ", argv[0]); @@ -109,7 +109,7 @@ int main(int argc, char **argv) }; for (DN_ForIndexU(type, FileType_Count)) { - DN_TCScratch scratch = DN_TCScratchBeginArena(nullptr, 0); + DN_TcScratch scratch = DN_TcScratchBeginArena(nullptr, 0); DN_Str8Builder builder = DN_Str8BuilderFromArena(&scratch.arena); DN_Str8 suffix = type == FileType_Header ? DN_Str8Lit("h") : DN_Str8Lit("cpp"); for (DN_ForItCArray(it, DN_Str8 const, REL_FILE_PATHS)) { @@ -122,7 +122,7 @@ int main(int argc, char **argv) DN_Str8 buffer = DN_Str8TrimWhitespaceAround(DN_Str8FromStr8BuilderArena(&builder, &scratch.arena)); DN_Str8 single_header_path = DN_OS_PathFmtArena(&scratch.arena, "%S/dn_single_header.%S", output_dir, suffix); - DN_ErrSink *err = DN_TCErrSinkBeginDefault(); + DN_ErrSink *err = DN_TcErrSinkBeginDefault(); DN_OS_FileWriteAllSafe(single_header_path, buffer, err); DN_ErrSinkEndExitIfErrorF(err, -1, "Failed to write Single header file '%S'", single_header_path); }