From 580b8a68827aeb480f46bb21a1970eacd930e541 Mon Sep 17 00:00:00 2001 From: doyle Date: Wed, 5 Jul 2023 22:39:43 +1000 Subject: [PATCH] dqn: Add table of contents to each file --- dqn_containers.cpp | 6 +---- dqn_containers.h | 48 +++++++++++++++++---------------------- dqn_core.cpp | 8 ++----- dqn_core.h | 44 +++++++++++++++++------------------- dqn_hash.cpp | 8 ++----- dqn_hash.h | 11 +++++---- dqn_math.cpp | 4 +--- dqn_math.h | 6 ++++- dqn_memory.cpp | 16 ++++--------- dqn_memory.h | 22 +++++++++--------- dqn_misc.cpp | 17 ++++---------- dqn_misc.h | 51 ++++++++++++++++++++--------------------- dqn_platform.cpp | 24 +++++--------------- dqn_platform.h | 36 ++++++++++++++--------------- dqn_print.cpp | 8 ++----- dqn_print.h | 11 +++++---- dqn_strings.cpp | 32 +++++++------------------- dqn_strings.h | 56 ++++++++++++++++++---------------------------- 18 files changed, 165 insertions(+), 243 deletions(-) diff --git a/dqn_containers.cpp b/dqn_containers.cpp index 1b49f5b..6d7d85f 100644 --- a/dqn_containers.cpp +++ b/dqn_containers.cpp @@ -1,7 +1,5 @@ #if !defined(DQN_NO_DSMAP) -// ================================================================================================= -// [$DMAP] Dqn_DSMap | DQN_NO_DSMAP | Hashtable, 70% max load, PoT size, linear probe, chain repair -// ================================================================================================= +// NOTE: [$DMAP] Dqn_DSMap ========================================================================= DQN_API Dqn_DSMapKey Dqn_DSMap_KeyU64NoHash(uint64_t u64) { Dqn_DSMapKey result = {}; @@ -31,6 +29,4 @@ DQN_API bool operator==(Dqn_DSMapKey lhs, Dqn_DSMapKey rhs) bool result = Dqn_DSMap_KeyEquals(lhs, rhs); return result; } - #endif // !defined(DQN_NO_DSMAP) - diff --git a/dqn_containers.h b/dqn_containers.h index 4a0e647..9794854 100644 --- a/dqn_containers.h +++ b/dqn_containers.h @@ -1,8 +1,14 @@ +// NOTE: Table Of Contents ========================================================================= +// Index | Disable #define | Description +// ================================================================================================= +// [$VARR] Dqn_VArray | DQN_NO_VARRAY | Array backed by virtual memory arena +// [$FARR] Dqn_FArray | DQN_NO_FARRAY | Fixed-size arrays +// [$DMAP] Dqn_DSMap | DQN_NO_DSMAP | Hashtable, 70% max load, PoT size, linear probe, chain repair +// [$LIST] Dqn_List | DQN_NO_LIST | Chunked linked lists, append only +// ================================================================================================= + #if !defined(DQN_NO_VARRAY) -// ================================================================================================= -// [$VARR] Dqn_VArray | DQN_NO_VARRAY | Array backed by virtual memory arena -// ================================================================================================= -// +// NOTE: [$VARR] Dqn_VArray ======================================================================== // An array that is backed by virtual memory by reserving addressing space and // comitting pages as items are allocated in the array. This array never // reallocs, instead you should reserve the upper bound of the memory you will @@ -96,10 +102,7 @@ DQN_API template void Dqn_VArray_Reserve (Dqn_VArray< #endif // !defined(DQN_NO_VARRAY) #if !defined(DQN_NO_DSMAP) -// ================================================================================================= -// [$DMAP] Dqn_DSMap | DQN_NO_DSMAP | Hashtable, 70% max load, PoT size, linear probe, chain repair -// ================================================================================================= -// +// NOTE: [$DMAP] Dqn_DSMap ========================================================================= // A hash table configured using the presets recommended by Demitri Spanos // from the Handmade Network (HMN), // @@ -298,10 +301,8 @@ DQN_API bool Dqn_DSMap_KeyEquals (Dqn_DS DQN_API bool operator== (Dqn_DSMapKey lhs, Dqn_DSMapKey rhs); #endif // !defined(DQN_NO_DSMAP) -// ================================================================================================= -// [$FARR] Dqn_FArray | DQN_NO_FARRAY | Fixed-size arrays -// ================================================================================================= #if !defined(DQN_NO_FARRAY) +// NOTE: [$FARR] Dqn_FArray ======================================================================== template struct Dqn_FArray { T data[N]; ///< Pointer to the start of the array items in the block of memory @@ -327,10 +328,8 @@ DQN_API template void Dqn_FArray_EraseRang DQN_API template void Dqn_FArray_Clear (Dqn_FArray *array); #endif // !defined(DQN_NO_FARRAY) -// ================================================================================================= -// [$LIST] Dqn_List | | Chunked linked lists, append only -// ================================================================================================= -// +#if !defined(DQN_NO_LIST) +// NOTE: [$LIST] Dqn_List ========================================================================== // NOTE: API // // @proc Dqn_List_At @@ -389,11 +388,10 @@ DQN_API template bool Dqn_List_Iterate (Dqn_List *li // NOTE: Internal ================================================================================== DQN_API template T * Dqn_List_Make_ (DQN_LEAK_TRACE_FUNCTION Dqn_List *list, Dqn_usize count); DQN_API template T * Dqn_List_Add_ (DQN_LEAK_TRACE_FUNCTION Dqn_List *list, Dqn_usize count); +#endif // !defined(DQN_NO_LIST) #if !defined(DQN_NO_VARRAY) -// ================================================================================================= -// [$VARR] Dqn_VArray | | Array backed by virtual memory arena -// ================================================================================================= +// NOTE: [$VARR] Dqn_VArray ======================================================================== DQN_API template Dqn_VArray Dqn_VArray_InitByteSize(Dqn_Arena *arena, Dqn_usize byte_size) { Dqn_usize byte_size_64k_aligned = Dqn_PowerOfTwoAlign(byte_size, DQN_VMEM_RESERVE_GRANULARITY); @@ -501,9 +499,7 @@ DQN_API template void Dqn_VArray_Reserve(Dqn_VArray *array, Dqn_ #endif // !defined(DQN_NO_VARRAY) #if !defined(DQN_NO_DSMAP) -// ================================================================================================= -// [$DMAP] Dqn_DSMap | DQN_NO_DSMAP | Hashtable, 70% max load, PoT size, linear probe, chain repair -// ================================================================================================= +// NOTE: [$DMAP] Dqn_DSMap ========================================================================= uint32_t const DQN_DS_MAP_DEFAULT_HASH_SEED = 0x8a1ced49; uint32_t const DQN_DS_MAP_SENTINEL_SLOT = 0; @@ -855,9 +851,7 @@ DQN_API Dqn_DSMapKey Dqn_DSMap_KeyString8Copy(Dqn_DSMap const *map, Dqn_Alloc #endif // !defined(DQN_NO_DSMAP) #if !defined(DQN_NO_FARRAY) -// ================================================================================================= -// [$FARR] Dqn_FArray | DQN_NO_FARRAY | Fixed-size arrays -// ================================================================================================= +// NOTE: [$FARR] Dqn_FArray ======================================================================== DQN_API template Dqn_FArray Dqn_FArray_Init(T const *array, Dqn_usize count) { Dqn_FArray result = {}; @@ -948,9 +942,8 @@ DQN_API template void Dqn_FArray_Clear(Dqn_FArray DQN_API Dqn_List Dqn_List_InitWithArena(Dqn_Arena *arena, Dqn_usize chunk_size) { Dqn_List result = {}; @@ -1070,4 +1063,5 @@ template DQN_API T *Dqn_List_At(Dqn_List *list, Dqn_usize index, return result; } +#endif // !defined(DQN_NO_LIST) diff --git a/dqn_core.cpp b/dqn_core.cpp index 1150e6e..45f1917 100644 --- a/dqn_core.cpp +++ b/dqn_core.cpp @@ -1,6 +1,4 @@ -// ================================================================================================= -// [$INTR] Intrinsics | | Atomics, cpuid, ticket mutex -// ================================================================================================= +// NOTE: [$INTR] Intrinsics ======================================================================== #if !defined(DQN_OS_ARM64) #if defined(DQN_COMPILER_GCC) || defined(DQN_COMPILER_CLANG) #include @@ -20,9 +18,7 @@ Dqn_CPUIDRegisters Dqn_CPUID(int function_id) } #endif // !defined(DQN_OS_ARM64) -// ================================================================================================= -// [$TMUT] Dqn_TicketMutex | | Userland mutex via spinlocking atomics -// ================================================================================================= +// NOTE: [$TMUT] Dqn_TicketMutex =================================================================== DQN_API void Dqn_TicketMutex_Begin(Dqn_TicketMutex *mutex) { unsigned int ticket = Dqn_Atomic_AddU32(&mutex->ticket, 1); diff --git a/dqn_core.h b/dqn_core.h index 8cf759f..d089969 100644 --- a/dqn_core.h +++ b/dqn_core.h @@ -1,6 +1,17 @@ +// NOTE: Table Of Contents ========================================================================= +// Index | Disable #define | Description // ================================================================================================= -// [$CFGM] Config macros | | Compile time customisation of library -// ================================================================================================= +// [$CFGM] Config macros | | Compile time customisation of library +// [$CMAC] Compiler macros | | Macros for the compiler +// [$MACR] Macros | | Define macros used in the library +// [$TYPE] Typedefs | | Typedefs used in the library +// [$GSTR] Global Structs | | Forward declare useful structs +// [$INTR] Intrinsics | | Atomics, cpuid, ticket mutex +// [$TMUT] Dqn_TicketMutex | | Userland mutex via spinlocking atomics +// [$CALL] Dqn_CallSite | | Source code location/tracing +// ===================+=================+=========================================================== + +// NOTE: [$CFGM] Config macros ===================================================================== // #define DQN_IMPLEMENTATION // Define this in one and only one C++ file to enable the implementation // code of the header file @@ -46,9 +57,7 @@ // thread context. The thread context arena stats can be printed by using // Dqn_Library_DumpThreadContextArenaStat. // -// ================================================================================================= -// [$CMAC] Compiler macros | | Macros for the compiler -// ================================================================================================= +// NOTE: [$CMAC] Compiler macros =================================================================== // NOTE: Warning! Order is important here, clang-cl on Windows defines _MSC_VER #if defined(_MSC_VER) #if defined(__clang__) @@ -78,9 +87,7 @@ #endif #endif -// ================================================================================================= -// [$MACR] Macros | | Define macros used in the library -// ================================================================================================= +// NOTE: [$MACR] Macros ============================================================================ #define DQN_FOR_UINDEX(index, size) for (Dqn_usize index = 0; index < size; index++) #define DQN_FOR_IINDEX(index, size) for (Dqn_isize index = 0; index < size; index++) @@ -301,9 +308,7 @@ struct Dqn_DeferHelper DQN_UNIQUE_NAME(once); \ end, DQN_UNIQUE_NAME(once) = false) -// ================================================================================================= -// [$TYPE] Typedefs | | Typedefs used in the library -// ================================================================================================= +// NOTE: [$TYPE] Typedefs ========================================================================== typedef intptr_t Dqn_isize; typedef uintptr_t Dqn_usize; typedef intptr_t Dqn_isize; @@ -316,9 +321,7 @@ typedef int32_t Dqn_b32; #define DQN_ISIZE_MAX INTPTR_MAX #define DQN_ISIZE_MIN INTPTR_MIN -// ================================================================================================= -// [$GSTR] Global Structs | | Forward declare useful structs -// ================================================================================================= +// NOTE [$GSTR] Global Structs ===================================================================== struct Dqn_String8 ///< Pointer and length style UTF8 strings { char *data; ///< The UTF8 bytes of the string @@ -332,9 +335,7 @@ struct Dqn_String8 ///< Pointer and length style UTF8 strings #endif }; -// ================================================================================================= -// [$INTR] Intrinsics | | Atomics, cpuid, ticket mutex -// ================================================================================================= +// NOTE: [$INTR] Intrinsics ======================================================================== typedef enum Dqn_ZeroMem { Dqn_ZeroMem_No, ///< Memory can be handed out without zero-ing it out Dqn_ZeroMem_Yes, ///< Memory should be zero-ed out before giving to the callee @@ -424,9 +425,8 @@ struct Dqn_CPUIDRegisters Dqn_CPUIDRegisters Dqn_CPUID(int function_id); #endif // DQN_OS_ARM64 -// ================================================================================================= -// [$TMUT] Dqn_TicketMutex | | Userland mutex via spinlocking atomics -// ================================================================================================= +// NOTE: [$TMUT] Dqn_TicketMutex =================================================================== +// // A mutex implemented using an atomic compare and swap on tickets handed out // for each critical section. // @@ -476,9 +476,7 @@ Dqn_uint Dqn_TicketMutex_MakeTicket (Dqn_TicketMutex *mutex); void Dqn_TicketMutex_BeginTicket(Dqn_TicketMutex const *mutex, Dqn_uint ticket); bool Dqn_TicketMutex_CanLock (Dqn_TicketMutex const *mutex, Dqn_uint ticket); -// ================================================================================================= -// [$CALL] Dqn_CallSite | | Source code location/tracing -// ================================================================================================= +// NOTE: [$CALL] Dqn_CallSite ====================================================================== typedef struct Dqn_CallSite { Dqn_String8 file; Dqn_String8 function; diff --git a/dqn_hash.cpp b/dqn_hash.cpp index e0f3176..79af65f 100644 --- a/dqn_hash.cpp +++ b/dqn_hash.cpp @@ -1,6 +1,4 @@ -// ================================================================================================= -// [$FNV1] Dqn_FNV1A | | Hash(x) -> 32/64bit via FNV1a -// ================================================================================================= +// NOTE: [$FNV1] Dqn_FNV1A ========================================================================= // Default values recommended by: http://isthe.com/chongo/tech/comp/fnv/ DQN_API uint32_t Dqn_FNV1A32_Iterate(void const *bytes, Dqn_usize size, uint32_t hash) { @@ -30,9 +28,7 @@ DQN_API uint64_t Dqn_FNV1A64_Hash(void const *bytes, Dqn_usize size) return result; } -// ================================================================================================= -// [$MMUR] Dqn_MurmurHash3 | | Hash(x) -> 32/128bit via MurmurHash3 -// ================================================================================================= +// NOTE: [$MMUR] Dqn_MurmurHash3 =================================================================== #if defined(DQN_COMPILER_W32_MSVC) || defined(DQN_COMPILER_W32_CLANG) #define DQN_MMH3_ROTL32(x, y) _rotl(x, y) #define DQN_MMH3_ROTL64(x, y) _rotl64(x, y) diff --git a/dqn_hash.h b/dqn_hash.h index bd09395..8ab607b 100644 --- a/dqn_hash.h +++ b/dqn_hash.h @@ -1,6 +1,11 @@ +// NOTE: Table Of Contents ========================================================================= +// Index | Disable #define | Description // ================================================================================================= -// [$FNV1] Dqn_FNV1A | | Hash(x) -> 32/64bit via FNV1a +// [$FNV1] Dqn_FNV1A | | Hash(x) -> 32/64bit via FNV1a +// [$MMUR] Dqn_MurmurHash3 | | Hash(x) -> 32/128bit via MurmurHash3 // ================================================================================================= + +// NOTE: [$FNV1] Dqn_FNV1A ========================================================================= #ifndef DQN_FNV1A32_SEED #define DQN_FNV1A32_SEED 2166136261U #endif @@ -20,9 +25,7 @@ DQN_API uint64_t Dqn_FNV1A64_Hash (void const *bytes, Dqn_usize size); DQN_API uint32_t Dqn_FNV1A32_Iterate(void const *bytes, Dqn_usize size, uint32_t hash); DQN_API uint64_t Dqn_FNV1A64_Iterate(void const *bytes, Dqn_usize size, uint64_t hash); -// ================================================================================================= -// [$MMUR] Dqn_MurmurHash3 | | Hash(x) -> 32/128bit via MurmurHash3 -// ================================================================================================= +// NOTE: [$MMUR] Dqn_MurmurHash3 =================================================================== // MurmurHash3 was written by Austin Appleby, and is placed in the public // domain. The author (Austin Appleby) hereby disclaims copyright to this source // code. diff --git a/dqn_math.cpp b/dqn_math.cpp index 94e8f8a..e089d6f 100644 --- a/dqn_math.cpp +++ b/dqn_math.cpp @@ -1,7 +1,5 @@ #if !defined(DQN_NO_MATH) -// ================================================================================================= -// [$MATH] Math | DQN_NO_MATH | v2i, V2, V3, V4, Mat4, Rect, RectI32, Lerp -// ================================================================================================= +// NOTE: [$MATH] Math ============================================================================== DQN_API Dqn_V2I Dqn_V2ToV2I(Dqn_V2 a) { Dqn_V2I result = Dqn_V2I(DQN_CAST(int32_t)a.x, DQN_CAST(int32_t)a.y); diff --git a/dqn_math.h b/dqn_math.h index 558c6f5..422c9d7 100644 --- a/dqn_math.h +++ b/dqn_math.h @@ -1,7 +1,11 @@ +// NOTE: Table Of Contents ========================================================================= +// Index | Disable #define | Description // ================================================================================================= -// [$MATH] Math | DQN_NO_MATH | v2i, V2, V3, V4, Mat4, Rect, RectI32, Lerp +// [$MATH] Math | DQN_NO_MATH | v2i, V2, V3, V4, Mat4, Rect, RectI32, Lerp // ================================================================================================= + #if !defined(DQN_NO_MATH) +// NOTE: [$MATH] Math ============================================================================== struct Dqn_V2I { int32_t x, y; diff --git a/dqn_memory.cpp b/dqn_memory.cpp index 3dc2ccc..fc06679 100644 --- a/dqn_memory.cpp +++ b/dqn_memory.cpp @@ -1,6 +1,4 @@ -// ================================================================================================= -// [$ALLO] Dqn_Allocator | | Generic allocator interface -// ================================================================================================= +// NOTE: [$ALLO] Dqn_Allocator ===================================================================== DQN_API void *Dqn_Allocator_Alloc_(DQN_LEAK_TRACE_FUNCTION Dqn_Allocator allocator, size_t size, uint8_t align, Dqn_ZeroMem zero_mem) { void *result = NULL; @@ -23,9 +21,7 @@ DQN_API void Dqn_Allocator_Dealloc_(DQN_LEAK_TRACE_FUNCTION Dqn_Allocator alloca } } -// ================================================================================================= -// [$VMEM] Dqn_VMem | | Virtual memory allocation -// ================================================================================================= +// NOTE: [$VMEM] Dqn_VMem ========================================================================== DQN_FILE_SCOPE uint32_t Dqn_VMem_ConvertPageToOSFlags_(uint32_t protect) { DQN_ASSERT((protect & ~(Dqn_VMemPage_ReadWrite | Dqn_VMemPage_Guard)) == 0); @@ -151,9 +147,7 @@ DQN_API int Dqn_VMem_Protect(void *ptr, Dqn_usize size, uint32_t page_flags) return result; } -// ================================================================================================= -// [$AREN] Dqn_Arena | | Growing bump allocator -// ================================================================================================= +// NOTE: [$AREN] Dqn_Arena ========================================================================= DQN_API void Dqn_Arena_CommitFromBlock(Dqn_ArenaBlock *block, Dqn_usize size, Dqn_ArenaCommit commit) { Dqn_usize commit_size = 0; @@ -581,9 +575,7 @@ DQN_API void Dqn_Arena_Free_(DQN_LEAK_TRACE_FUNCTION Dqn_Arena *arena, Dqn_ZeroM arena->stats.blocks = 0; } -// ================================================================================================= -// [$ACAT] Dqn_ArenaCatalog | | Collate, create & manage arenas in a catalog -// ================================================================================================= +// NOTE: [$ACAT] Dqn_ArenaCatalog ================================================================== DQN_API void Dqn_ArenaCatalog_Init(Dqn_ArenaCatalog *catalog, Dqn_Arena *arena) { catalog->arena = arena; diff --git a/dqn_memory.h b/dqn_memory.h index 614cc9e..0a34cc0 100644 --- a/dqn_memory.h +++ b/dqn_memory.h @@ -1,6 +1,13 @@ +// NOTE: Table Of Contents ========================================================================= +// Index | Disable #define | Description // ================================================================================================= -// [$ALLO] Dqn_Allocator | | Generic allocator interface +// [$ALLO] Dqn_Allocator | | Generic allocator interface +// [$VMEM] Dqn_VMem | | Virtual memory allocation +// [$AREN] Dqn_Arena | | Growing bump allocator +// [$ACAT] Dqn_ArenaCatalog | | Collate, create & manage arenas in a catalog // ================================================================================================= + +// NOTE: [$ALLO] Dqn_Allocator ===================================================================== #if defined(DQN_LEAK_TRACING) #if defined(DQN_NO_DSMAP) #error "DSMap is required for allocation tracing" @@ -70,9 +77,7 @@ void Dqn_Allocator_Dealloc_(DQN_LEAK_TRACE_FUNCTION Dqn_Allocator allocator, voi #define Dqn_Allocator_NewArray(allocator, Type, count, zero_mem) (Type *)Dqn_Allocator_Alloc_(DQN_LEAK_TRACE allocator, sizeof(Type) * count, alignof(Type), zero_mem) #define Dqn_Allocator_New(allocator, Type, zero_mem) (Type *)Dqn_Allocator_Alloc_(DQN_LEAK_TRACE allocator, sizeof(Type), alignof(Type), zero_mem) -// ================================================================================================= -// [$VMEM] Dqn_VMem | | Virtual memory allocation -// ================================================================================================= +// NOTE: [$VMEM] Dqn_VMem ========================================================================== enum Dqn_VMemCommit { Dqn_VMemCommit_No, @@ -124,10 +129,7 @@ DQN_API void Dqn_VMem_Decommit(void *ptr, Dqn_usize size); DQN_API void Dqn_VMem_Release (void *ptr, Dqn_usize size); DQN_API int Dqn_VMem_Protect (void *ptr, Dqn_usize size, uint32_t page_flags); -// ================================================================================================= -// [$AREN] Dqn_Arena | | Growing bump allocator -// ================================================================================================= -// +// NOTE: [$AREN] Dqn_Arena ========================================================================= // A bump-allocator that can grow dynamically by chaining blocks of memory // together. The arena's memory is backed by virtual memory allowing the // allocator to reserve and commit physical pages as memory is given from @@ -314,9 +316,7 @@ DQN_API void Dqn_Arena_Free_ (DQN_LEAK_TRACE_FUNCTION DQN_API void * Dqn_Arena_CopyZ_ (DQN_LEAK_TRACE_FUNCTION Dqn_Arena *arena, void *src, Dqn_usize size, uint8_t alignment); DQN_API void Dqn_Arena_EndTempMemory_ (DQN_LEAK_TRACE_FUNCTION Dqn_ArenaTempMemory arena_temp_memory); -// ================================================================================================= -// [$ACAT] Dqn_ArenaCatalog | | Collate, create & manage arenas in a catalog -// ================================================================================================= +// NOTE: [$ACAT] Dqn_ArenaCatalog ================================================================== struct Dqn_ArenaCatalogItem { Dqn_Arena *arena; diff --git a/dqn_misc.cpp b/dqn_misc.cpp index 7e5cd50..c25240f 100644 --- a/dqn_misc.cpp +++ b/dqn_misc.cpp @@ -1,8 +1,5 @@ +// NOTE: [$DLIB] Dqn_Library ======================================================================= Dqn_Library dqn_library; - -// ================================================================================================= -// [$DLIB] Dqn_Library | | Library run-time behaviour configuration -// ================================================================================================= DQN_API Dqn_Library *Dqn_Library_Init(Dqn_Arena *arena) { Dqn_Library *result = &dqn_library; @@ -156,9 +153,7 @@ DQN_API void Dqn_Library_LeakTraceMarkFree(Dqn_CallSite call_site, void *ptr) } #endif /// defined(DQN_LEAK_TRACING) -// ================================================================================================= -// [$BITS] Dqn_Bit | | Bitset manipulation -// ================================================================================================= +// NOTE: [$BITS] Dqn_Bit =========================================================================== DQN_API void Dqn_Bit_UnsetInplace(uint64_t *flags, uint64_t bitfield) { *flags = (*flags & ~bitfield); @@ -181,9 +176,7 @@ DQN_API bool Dqn_Bit_IsNotSet(uint64_t bits, uint64_t bits_to_check) return result; } -// ================================================================================================= -// [$SAFE] Dqn_Safe | | Safe arithmetic, casts, asserts -// ================================================================================================= +// NOTE: [$SAFE] Dqn_Safe ========================================================================== DQN_API int64_t Dqn_Safe_AddI64(int64_t a, int64_t b) { int64_t result = DQN_CHECKF(a <= INT64_MAX - b, "a=%zd, b=%zd", a, b) ? (a + b) : INT64_MAX; @@ -505,9 +498,7 @@ DQN_API uint64_t Dqn_Safe_SaturateCastIntToU64(int val) return result; } -// ================================================================================================= -// [$TCTX] Dqn_ThreadContext | | Per-thread data structure e.g. temp arenas -// ================================================================================================= +// NOTE: [$TCTX] Dqn_ThreadContext ================================================================= Dqn_ThreadScratch::Dqn_ThreadScratch(DQN_LEAK_TRACE_FUNCTION Dqn_ThreadContext *context, uint8_t context_index) { index = context_index; diff --git a/dqn_misc.h b/dqn_misc.h index 7675b5d..e158c68 100644 --- a/dqn_misc.h +++ b/dqn_misc.h @@ -1,12 +1,18 @@ +// NOTE: Table Of Contents ========================================================================= +// Index | Disable #define | Description // ================================================================================================= -// [$DLIB] Dqn_Library | | Library run-time behaviour configuration +// [$DLIB] Dqn_Library | | Library run-time behaviour configuration +// [$BITS] Dqn_Bit | | Bitset manipulation +// [$SAFE] Dqn_Safe | | Safe arithmetic, casts, asserts +// [$TCTX] Dqn_ThreadContext | | Per-thread data structure e.g. temp arenas +// [$BSEA] Dqn_BinarySearch | | Binary search // ================================================================================================= -// + +// NOTE: [$DLIB] Dqn_Library ======================================================================= // Book-keeping data for the library and allow customisation of certain features // provided. // -// NOTE: API -// +// NOTE: API ======================================================================================= // @proc Dqn_Library_SetLogCallback // @desc Update the default logging function, all logging functions will run through // this callback @@ -70,27 +76,23 @@ DQN_API void Dqn_Library_LeakTraceMarkFree (Dqn_CallSite call_site, void #define Dqn_Library_LeakTraceMarkFree(...) #endif -// ================================================================================================= -// [$BITS] Dqn_Bit | | Bitset manipulation -// ================================================================================================= +// NOTE: [$BITS] Dqn_Bit =========================================================================== DQN_API void Dqn_Bit_UnsetInplace(uint32_t *flags, uint32_t bitfield); DQN_API void Dqn_Bit_SetInplace(uint32_t *flags, uint32_t bitfield); DQN_API bool Dqn_Bit_IsSet(uint32_t bits, uint32_t bits_to_set); DQN_API bool Dqn_Bit_IsNotSet(uint32_t bits, uint32_t bits_to_check); -// ================================================================================================= -// [$SAFE] Dqn_Safe | | Safe arithmetic, casts, asserts -// ================================================================================================= -/// Assert the expression given in debug, whilst in release- assertion is -/// removed and the expression is evaluated and returned. -/// -/// This function provides dual logic which allows handling of the condition -/// gracefully in release mode, but asserting in debug mode. This is an internal -/// function, prefer the @see DQN_CHECK macros. -/// -/// @param assertion_expr[in] Expressin to assert on -/// @param fmt[in] Format string for providing a message on assertion -/// @return True if the expression evaluated to true, false otherwise. +// NOTE: [$SAFE] Dqn_Safe ========================================================================== +// Assert the expression given in debug, whilst in release- assertion is +// removed and the expression is evaluated and returned. +// +// This function provides dual logic which allows handling of the condition +// gracefully in release mode, but asserting in debug mode. This is an internal +// function, prefer the @see DQN_CHECK macros. +// +// @param assertion_expr[in] Expressin to assert on +// @param fmt[in] Format string for providing a message on assertion +// @return True if the expression evaluated to true, false otherwise. DQN_API bool DQN_CHECKF_(bool assertion_expr, Dqn_CallSite call_site, char const *fmt, ...); // NOTE: Dqn_Safe Arithmetic @@ -335,10 +337,7 @@ DQN_API uint32_t Dqn_Safe_SaturateCastIntToU32(int val); /// out of the valid range when casted. DQN_API uint64_t Dqn_Safe_SaturateCastIntToU64(int val); -// ================================================================================================= -// [$TCTX] Dqn_ThreadContext | | Per-thread data structure e.g. temp arenas -// ================================================================================================= -// +// NOTE: [$TCTX] Dqn_ThreadContext ================================================================= // Each thread is assigned in their thread-local storage (TLS) scratch and // permanent arena allocators. These can be used for allocations with a lifetime // scoped to the lexical scope or for storing data permanently using the arena @@ -417,9 +416,7 @@ DQN_API uint32_t Dqn_Thread_GetID(); DQN_API Dqn_ThreadContext *Dqn_Thread_GetContext_(DQN_LEAK_TRACE_FUNCTION_NO_COMMA); DQN_API Dqn_ThreadScratch Dqn_Thread_GetScratch_(DQN_LEAK_TRACE_FUNCTION void const *conflict_arena); -// ================================================================================================= -// [$BSEA] Binary Search | | -// ================================================================================================= +// NOTE: [$BSEA] Dqn_BinarySearch ================================================================== template using Dqn_BinarySearchLessThanProc = bool(T const &lhs, T const &rhs); diff --git a/dqn_platform.cpp b/dqn_platform.cpp index f572e4b..78ddaec 100644 --- a/dqn_platform.cpp +++ b/dqn_platform.cpp @@ -1,7 +1,5 @@ #if defined(DQN_OS_WIN32) -// ================================================================================================= -// [$W32H] Win32 minimal header | DQN_NO_WIN32_MINIMAL_HEADER | Minimal windows.h subset -// ================================================================================================= +// NOTE: [$W32H] Win32 Min Header ================================================================== #pragma comment(lib, "bcrypt") #pragma comment(lib, "wininet") @@ -353,9 +351,7 @@ #include // access, gettid #endif -// ================================================================================================= -// [$FSYS] Dqn_Fs | | Filesystem helpers -// ================================================================================================= +// NOTE: [$FSYS] Dqn_Fs ============================================================================ #if defined(DQN_OS_WIN32) DQN_API uint64_t Dqn__WinFileTimeToSeconds(FILETIME const *time) { @@ -1141,9 +1137,7 @@ DQN_API Dqn_String8 Dqn_FsPath_BuildWithSeparator(Dqn_Arena *arena, Dqn_FsPath c return result; } -// ================================================================================================= -// [$DATE] Dqn_Date | | Date-time helpers -// ================================================================================================= +// NOTE: [$DATE] Dqn_Date ========================================================================== DQN_API Dqn_DateHMSTime Dqn_Date_HMSLocalTimeNow() { Dqn_DateHMSTime result = {}; @@ -1241,9 +1235,7 @@ DQN_API uint64_t Dqn_Date_EpochTime() } #if defined(DQN_OS_WIN32) -// ================================================================================================= -// [$WIND] Dqn_Win | | Windows OS helpers -// ================================================================================================= +// NOTE: [$WIND] Dqn_Win =========================================================================== DQN_API void Dqn_Win_LastErrorToBuffer(Dqn_WinErrorMsg *msg) { msg->code = GetLastError(); @@ -1564,9 +1556,7 @@ DQN_API bool Dqn_Win_FolderIterate(Dqn_String8 path, Dqn_Win_FolderIterator *it) } #if !defined(DQN_NO_WIN_NET) -// ================================================================================================= -// [$WINN] Dqn_WinNet | DQN_NO_WINNET | Windows internet download/query helpers -// ================================================================================================= +// NOTE: [$WINN] Dqn_WinNet ======================================================================== DQN_API Dqn_WinNetHandle Dqn_Win_NetHandleInitCString(char const *url, int url_size) { URL_COMPONENTSA components = {}; @@ -1961,9 +1951,7 @@ DQN_API Dqn_String8 Dqn_Win_NetHandlePumpToAllocString(Dqn_WinNetHandle *handle) #endif // !defined(DQN_NO_WINNET) #endif // defined(DQN_OS_WIN32) -// ================================================================================================= -// [$OSYS] Dqn_OS | DQN_NO_WIN | Operating-system APIs -// ================================================================================================= +// NOTE: [$OSYS] Dqn_OS ============================================================================ DQN_API bool Dqn_OS_SecureRNGBytes(void *buffer, uint32_t size) { if (!buffer || size < 0) diff --git a/dqn_platform.h b/dqn_platform.h index e3c7b4b..a9cbc53 100644 --- a/dqn_platform.h +++ b/dqn_platform.h @@ -1,6 +1,15 @@ +// NOTE: Table Of Contents ========================================================================= +// Index | Disable #define | Description // ================================================================================================= -// [$FSYS] Dqn_Fs | | Filesystem helpers +// [$FSYS] Dqn_Fs | | Filesystem helpers +// [$DATE] Dqn_Date | | Date-time helpers +// [$W32H] Win32 Min Header | DQN_NO_WIN32_MIN_HEADER | Minimal windows.h subset +// [$WIND] Dqn_Win | | Windows OS helpers +// [$WINN] Dqn_WinNet | DQN_NO_WINNET | Windows internet download/query helpers +// [$OSYS] Dqn_OS | DQN_NO_WIN | Operating-system APIs // ================================================================================================= + +// NOTE: [$FSYS] Dqn_Fs ============================================================================ enum Dqn_FsInfoType { Dqn_FsInfoType_Unknown, @@ -128,10 +137,7 @@ DQN_API Dqn_String8 Dqn_FsPath_ConvertString8 (Dqn_Arena *arena, Dqn_String8 #endif #endif - -// ================================================================================================= -// [$DATE] Dqn_Date | | Date-time helpers -// ================================================================================================= +// NOTE: [$DATE] Dqn_Date ========================================================================== struct Dqn_DateHMSTimeString { char date[DQN_ARRAY_UCOUNT("YYYY-MM-SS")]; @@ -160,11 +166,9 @@ DQN_API Dqn_DateHMSTimeString Dqn_Date_HMSLocalTimeString(Dqn_DateHMSTime time, // return: The time elapsed since Unix epoch (1970-01-01T00:00:00Z) in seconds DQN_API uint64_t Dqn_Date_EpochTime(); -// ================================================================================================= -// [$W32H] Win32 minimal header | DQN_NO_WIN32_MINIMAL_HEADER | Minimal windows.h subset -// ================================================================================================= +// NOTE: [$W32H] Win32 Min Header ================================================================== #if defined(DQN_OS_WIN32) -#if !defined(DQN_NO_WIN32_MINIMAL_HEADER) && !defined(_INC_WINDOWS) +#if !defined(DQN_NO_WIN32_MIN_HEADER) && !defined(_INC_WINDOWS) // Taken from Windows.h // typedef unsigned long DWORD; // typedef unsigned short WORD; @@ -185,11 +189,9 @@ DQN_API uint64_t Dqn_Date_EpochTime(); } u; uint64_t QuadPart; } LARGE_INTEGER; -#endif // !defined(DQN_NO_WIN32_MINIMAL_HEADER) && !defined(_INC_WINDOWS) +#endif // !defined(DQN_NO_WIN32_MIN_HEADER) && !defined(_INC_WINDOWS) -// ================================================================================================= -// [$WIND] Dqn_Win | | Windows OS helpers -// ================================================================================================= +// NOTE: [$WIND] Dqn_Win =========================================================================== struct Dqn_WinErrorMsg { unsigned long code; @@ -274,9 +276,7 @@ DQN_API bool Dqn_Win_FolderIterate(Dqn_String8 path, Dqn_Win_FolderIterator *it) DQN_API bool Dqn_Win_FolderWIterate(Dqn_String16 path, Dqn_Win_FolderIteratorW *it); #if !defined(DQN_NO_WINNET) -// ================================================================================================= -// [$WINN] Dqn_WinNet | DQN_NO_WINNET | Windows internet download/query helpers -// ================================================================================================= +// NOTE: [$WINN] Dqn_WinNet ======================================================================== enum Dqn_WinNetHandleState { Dqn_WinNetHandleState_Invalid, @@ -385,9 +385,7 @@ DQN_API Dqn_String8 Dqn_Win_NetHandlePumpToAllocString(Dqn_WinNetHandle *ha #endif // !defined(DQN_NO_WINNET) #endif // defined(DQN_OS_WIN32) -// ================================================================================================= -// [$OSYS] Dqn_OS | DQN_NO_WIN | Operating-system APIs -// ================================================================================================= +// NOTE: [$OSYS] Dqn_OS ============================================================================ /// Generate cryptographically secure bytes DQN_API bool Dqn_OS_SecureRNGBytes(void *buffer, uint32_t size); diff --git a/dqn_print.cpp b/dqn_print.cpp index 3e282f3..fe9d7f7 100644 --- a/dqn_print.cpp +++ b/dqn_print.cpp @@ -1,6 +1,4 @@ -// ================================================================================================= -// [$PRIN] Dqn_Print | | Printing -// ================================================================================================= +// NOTE: [$PRIN] Dqn_Print ========================================================================= DQN_API Dqn_PrintStyle Dqn_Print_StyleColour(uint8_t r, uint8_t g, uint8_t b, Dqn_PrintBold bold) { Dqn_PrintStyle result = {}; @@ -194,9 +192,7 @@ DQN_API Dqn_String8 Dqn_Print_ESCColourU32String(Dqn_PrintESCColour colour, uint return result; } -// ================================================================================================= -// [$LLOG] Dqn_Log | | Library logging -// ================================================================================================= +// NOTE: [$LLOG] Dqn_Log ========================================================================== DQN_API Dqn_String8 Dqn_Log_MakeString(Dqn_Allocator allocator, bool colour, Dqn_String8 type, diff --git a/dqn_print.h b/dqn_print.h index 8377391..aa75584 100644 --- a/dqn_print.h +++ b/dqn_print.h @@ -1,6 +1,11 @@ +// NOTE: Table Of Contents ========================================================================= +// Index | Disable #define | Description // ================================================================================================= -// [$PRIN] Dqn_Print | | Console printing +// [$PRIN] Dqn_Print | | Console printing +// [$LLOG] Dqn_Log | | Library logging // ================================================================================================= + +// NOTE: [$PRIN] Dqn_Print ========================================================================= enum Dqn_PrintStd { Dqn_PrintStd_Out, @@ -84,9 +89,7 @@ Dqn_String8 Dqn_Print_ESCColourU32String(Dqn_PrintESCColour colour, u #define Dqn_Print_ESCResetString DQN_STRING8(Dqn_Print_ESCReset) #define Dqn_Print_ESCBoldString DQN_STRING8(Dqn_Print_ESCBold) -// ================================================================================================= -// [$LLOG] Dqn_Log | | Library logging -// ================================================================================================= +// NOTE: [$LLOG] Dqn_Log ========================================================================== enum Dqn_LogType { Dqn_LogType_Debug, diff --git a/dqn_strings.cpp b/dqn_strings.cpp index eb1e4a5..d7390db 100644 --- a/dqn_strings.cpp +++ b/dqn_strings.cpp @@ -1,6 +1,4 @@ -// ================================================================================================= -// [$CSTR] Dqn_CString8 | | C-string helpers -// ================================================================================================= +// NOTE: [$CSTR] Dqn_CString8 ====================================================================== DQN_API Dqn_usize Dqn_CString8_FSize(char const *fmt, ...) { va_list args; @@ -41,9 +39,7 @@ DQN_API Dqn_usize Dqn_CString16_Size(wchar_t const *src) return result; } -// ================================================================================================= -// [$STR8] Dqn_String8 | | Pointer and length strings -// ================================================================================================= +// NOTE: [$STR8] Dqn_String8 ======================================================================= DQN_API Dqn_String8 Dqn_String8_InitCString8(char const *src) { Dqn_usize size = Dqn_CString8_Size(src); @@ -592,9 +588,7 @@ DQN_API Dqn_String8 Dqn_String8_Copy_(DQN_LEAK_TRACE_FUNCTION Dqn_Allocator allo return result; } -// ================================================================================================= -// [$STRB] Dqn_String8Builder | | -// ================================================================================================= +// NOTE: [$STRB] Dqn_String8Builder ================================================================ bool Dqn_String8Builder_AppendRef(Dqn_String8Builder *builder, Dqn_String8 string) { if (!builder || !string.data || string.size <= 0) @@ -667,9 +661,7 @@ Dqn_String8 Dqn_String8Builder_Build(Dqn_String8Builder const *builder, Dqn_Allo } #if !defined(DQN_NO_JSON_BUILDER) -// ================================================================================================= -// [$JSON] Dqn_JSONBuilder | DQN_NO_JSON_BUILDER | Construct json output -// ================================================================================================= +// NOTE: [$JSON] Dqn_JSONBuilder =================================================================== Dqn_JSONBuilder Dqn_JSONBuilder_Init(Dqn_Allocator allocator, int spaces_per_indent) { Dqn_JSONBuilder result = {}; @@ -827,9 +819,7 @@ void Dqn_JSONBuilder_BoolNamed(Dqn_JSONBuilder *builder, Dqn_String8 key, bool v } #endif // !defined(DQN_NO_JSON_BUILDER) -// ================================================================================================= -// [$CHAR] Dqn_Char | | Character ascii/digit.. helpers -// ================================================================================================= +// NOTE: [$CHAR] Dqn_Char ========================================================================== DQN_API bool Dqn_Char_IsAlphabet(char ch) { bool result = (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'); @@ -896,9 +886,7 @@ DQN_API char Dqn_Char_ToLower(char ch) return result; } -// ================================================================================================= -// [$UTFX] Dqn_UTF | | Unicode helpers -// ================================================================================================= +// NOTE: [$UTFX] Dqn_UTF =========================================================================== DQN_API int Dqn_UTF8_EncodeCodepoint(uint8_t utf8[4], uint32_t codepoint) { // NOTE: Table from https://www.reedbeta.com/blog/programmers-intro-to-unicode/ @@ -972,9 +960,7 @@ DQN_API int Dqn_UTF16_EncodeCodepoint(uint16_t utf16[2], uint32_t codepoint) } #if !defined(DQN_NO_HEX) -// ================================================================================================= -// [$BHEX] Dqn_Bin | DQN_NO_HEX | Binary <-> hex helpers -// ================================================================================================= +// NOTE: [$BHEX] Dqn_Bin =========================================================================== DQN_API char const *Dqn_Bin_HexBufferTrim0x(char const *hex, Dqn_usize size, Dqn_usize *real_size) { Dqn_String8 result = Dqn_String8_TrimWhitespaceAround(Dqn_String8_Init(hex, size)); @@ -1251,9 +1237,7 @@ DQN_API Dqn_U64String Dqn_U64ToString(uint64_t val, char separator) return result; } -// ================================================================================================= -// [$STBS] stb_sprintf | | Portable sprintf -// ================================================================================================= +// NOTE: [$STBS] stb_sprintf ======================================================================= #if !defined(DQN_STB_SPRINTF_HEADER_ONLY) #define STB_SPRINTF_IMPLEMENTATION #ifdef STB_SPRINTF_IMPLEMENTATION diff --git a/dqn_strings.h b/dqn_strings.h index 4532273..664100d 100644 --- a/dqn_strings.h +++ b/dqn_strings.h @@ -1,6 +1,18 @@ +// NOTE: Table Of Contents ========================================================================= +// Index | Disable #define | Description // ================================================================================================= -// [$CSTR] Dqn_CString8 | | C-string helpers +// [$CSTR] Dqn_CString8 | | C-string helpers +// [$STR8] Dqn_String8 | | Pointer and length strings +// [$FSTR] Dqn_FString8 | DQN_NO_FSTRING8 | Fixed-size strings +// [$STRB] Dqn_String8Builder | | +// [$JSON] Dqn_JSONBuilder | DQN_NO_JSON_BUILDER | Construct json output +// [$CHAR] Dqn_Char | | Character ascii/digit.. helpers +// [$UTFX] Dqn_UTF | | Unicode helpers +// [$BHEX] Dqn_Bin | DQN_NO_HEX | Binary <-> hex helpers +// [$STBS] stb_sprintf | DQN_STB_SPRINTF_HEADER_ONLY | Portable sprintf // ================================================================================================= + +// NOTE: [$CSTR] Dqn_CString8 ====================================================================== // @proc Dqn_CString8_ArrayCount // @desc Calculate the size of a cstring literal/array at compile time // @param literal The cstring literal/array to calculate the size for @@ -24,12 +36,8 @@ DQN_API Dqn_usize Dqn_CString8_FVSize (char DQN_API Dqn_usize Dqn_CString8_Size (char const *a); DQN_API Dqn_usize Dqn_CString16_Size (wchar_t const *a); -// ================================================================================================= -// [$STR8] Dqn_String8 | | Pointer and length strings -// ================================================================================================= -// +// NOTE: [$STR8] Dqn_String8 ======================================================================= // NOTE: API - // @proc Dqn_String8_Init // @desc Initialise a string from a pointer and length // The string is invalid (i.e. Dqn_String8_IsValid() returns false) if size is @@ -360,10 +368,7 @@ DQN_API Dqn_String8 Dqn_String8_CopyCString_ (DQN_LEAK_TRACE_FUNCTION Dq DQN_API Dqn_String8 Dqn_String8_Copy_ (DQN_LEAK_TRACE_FUNCTION Dqn_Allocator allocator, Dqn_String8 string); #if !defined(DQN_NO_FSTRING8) -// ================================================================================================= -// [$FSTR] Dqn_FString8 | DQN_NO_FSTRING8 | Fixed-size strings -// ================================================================================================= -// +// NOTE: [$FSTR] Dqn_FString8 ====================================================================== // NOTE: API // // @proc Dqn_FString8_InitF @@ -461,9 +466,7 @@ template bool Dqn_FString8_EqFString8 template bool Dqn_FString8_EqFString8Insensitive(Dqn_FString8 const *lhs, Dqn_FString8 const *rhs); #endif // !defined(DQN_NO_FSTRING8) -// ================================================================================================= -// [$STRB] Dqn_String8Builder | | -// ================================================================================================= +// NOTE: [$STRB] Dqn_String8Builder ================================================================ struct Dqn_String8Builder { Dqn_Allocator allocator; ///< Allocator to use to back the string list @@ -509,10 +512,8 @@ bool Dqn_String8Builder_AppendF(Dqn_String8Builder *builder, char const *fmt, .. /// invalid or memory allocation failure. Dqn_String8 Dqn_String8Builder_Build(Dqn_String8Builder const *builder, Dqn_Allocator allocator); -// ================================================================================================= -// [$JSON] Dqn_JSONBuilder | DQN_NO_JSON_BUILDER | Construct json output -// ================================================================================================= #if !defined(DQN_NO_JSON_BUILDER) +// NOTE: [$JSON] Dqn_JSONBuilder =================================================================== // TODO(dqn): We need to write tests for this enum Dqn_JSONBuilderItem { Dqn_JSONBuilderItem_Empty, @@ -625,10 +626,7 @@ void Dqn_JSONBuilder_BoolNamed(Dqn_JSONBuilder *builder, Dqn_String8 key, boo #define Dqn_JSONBuilder_Bool(builder, value) Dqn_JSONBuilder_BoolNamed(builder, DQN_STRING8(""), value) #endif // !defined(DQN_NO_JSON_BUIDLER) - -// ================================================================================================= -// [$CHAR] Dqn_Char | | Character ascii/digit.. helpers -// ================================================================================================= +// NOTE: [$CHAR] Dqn_Char ========================================================================== DQN_API bool Dqn_Char_IsAlphabet (char ch); DQN_API bool Dqn_Char_IsDigit (char ch); DQN_API bool Dqn_Char_IsAlphaNum (char ch); @@ -639,16 +637,12 @@ DQN_API char Dqn_Char_ToHex (char ch); DQN_API char Dqn_Char_ToHexUnchecked(char ch); DQN_API char Dqn_Char_ToLower (char ch); -// ================================================================================================= -// [$UTFX] Dqn_UTF | | Unicode helpers -// ================================================================================================= +// NOTE: [$UTFX] Dqn_UTF =========================================================================== DQN_API int Dqn_UTF8_EncodeCodepoint(uint8_t utf8[4], uint32_t codepoint); DQN_API int Dqn_UTF16_EncodeCodepoint(uint16_t utf16[2], uint32_t codepoint); #if !defined(DQN_NO_HEX) -// ================================================================================================= -// [$BHEX] Dqn_Bin | DQN_NO_HEX | Binary <-> hex helpers -// ================================================================================================= +// NOTE: [$BHEX] Dqn_Bin =========================================================================== // // NOTE: API // @@ -790,10 +784,7 @@ struct Dqn_U64String /// 0 if no separator is desired. DQN_API Dqn_U64String Dqn_U64ToString(uint64_t val, char separator); -// ================================================================================================= -// [$STBS] stb_sprintf | | Portable sprintf -// ================================================================================================= -/// @cond NO_DOXYYGEN +// NOTE: [$STBS] stb_sprintf ======================================================================= // stb_sprintf - v1.10 - public domain snprintf() implementation // originally by Jeff Roberts / RAD Game Tools, 2015/10/20 // http://github.com/nothings/stb @@ -1009,12 +1000,9 @@ STBSP__PUBLICDEC int STB_SPRINTF_DECORATE(snprintf)(char *buf, int count, char c STBSP__PUBLICDEC int STB_SPRINTF_DECORATE(vsprintfcb)(STBSP_SPRINTFCB *callback, void *user, char *buf, char const *fmt, va_list va); STBSP__PUBLICDEC void STB_SPRINTF_DECORATE(set_separators)(char comma, char period); #endif // STB_SPRINTF_H_INCLUDE -/// @endcond #if !defined(DQN_NO_FSTRING8) -// ================================================================================================= -// [$FSTR] Dqn_FString8 | DQN_NO_FSTRING8 | Fixed-size strings -// ================================================================================================= +// NOTE: [$FSTR] Dqn_FString8 ====================================================================== template Dqn_FString8 Dqn_FString8_InitF(char const *fmt, ...) { Dqn_FString8 result = {};