Fix Dqn_FixedArray name convention, fix Windows build
This commit is contained in:
		
							parent
							
								
									05fe604f5c
								
							
						
					
					
						commit
						9d0b0a2982
					
				
							
								
								
									
										129
									
								
								dqn.h
									
									
									
									
									
								
							
							
						
						
									
										129
									
								
								dqn.h
									
									
									
									
									
								
							| @ -18,6 +18,7 @@ | |||||||
| // #define DQN_WITH_JSON_WRITER    // Dqn_JsonWriter
 | // #define DQN_WITH_JSON_WRITER    // Dqn_JsonWriter
 | ||||||
| // #define DQN_WITH_MAP            // Dqn_Map
 | // #define DQN_WITH_MAP            // Dqn_Map
 | ||||||
| // #define DQN_WITH_MATH           // Dqn_V2/3/4/Mat4 and friends ...
 | // #define DQN_WITH_MATH           // Dqn_V2/3/4/Mat4 and friends ...
 | ||||||
|  | // #define DQN_WITH_WIN_NET        // Dqn_WinNet
 | ||||||
| //
 | //
 | ||||||
| // -----------------------------------------------------------------------------
 | // -----------------------------------------------------------------------------
 | ||||||
| // NOTE: Configuration
 | // NOTE: Configuration
 | ||||||
| @ -349,7 +350,12 @@ static_assert(sizeof(Dqn_f64) == 8,                 "Sanity check f64 is 8 bytes | |||||||
| // NOTE: Win32 Minimal Header
 | // NOTE: Win32 Minimal Header
 | ||||||
| // ------------------------------------------------------------------------------------------------
 | // ------------------------------------------------------------------------------------------------
 | ||||||
| #if defined(DQN_OS_WIN32) | #if defined(DQN_OS_WIN32) | ||||||
|     #if !defined(DQN_NO_WIN32_MINIMAL_HEADER) |     #if defined(DQN_NO_WIN32_MINIMAL_HEADER) | ||||||
|  |         #include <bcrypt.h> // Dqn_OSSecureRNGBytes -> BCryptOpenAlgorithmProvider ... etc | ||||||
|  |         #if defined(DQN_WITH_WIN_NET) | ||||||
|  |             #include <wininet.h> // Dqn_WinNet -> InternetConnect ... etc | ||||||
|  |         #endif // DQN_WITH_WIN_NET
 | ||||||
|  |     #else | ||||||
|         // Taken from Windows.h
 |         // Taken from Windows.h
 | ||||||
|         typedef unsigned long DWORD; |         typedef unsigned long DWORD; | ||||||
|         typedef unsigned short WORD; |         typedef unsigned short WORD; | ||||||
| @ -1240,16 +1246,15 @@ struct Dqn_Lib | |||||||
| 
 | 
 | ||||||
| #if defined(DQN_OS_WIN32) | #if defined(DQN_OS_WIN32) | ||||||
|     LARGE_INTEGER     win32_qpc_frequency; |     LARGE_INTEGER     win32_qpc_frequency; | ||||||
| 
 |  | ||||||
|     Dqn_TicketMutex   win32_bcrypt_rng_mutex; |     Dqn_TicketMutex   win32_bcrypt_rng_mutex; | ||||||
|     BCRYPT_ALG_HANDLE win32_bcrypt_rng_handle; |     void             *win32_bcrypt_rng_handle; | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #if defined(DQN_DEBUG_THREAD_CONTEXT) | #if defined(DQN_DEBUG_THREAD_CONTEXT) | ||||||
|     Dqn_TicketMutex thread_context_mutex; |     Dqn_TicketMutex thread_context_mutex; | ||||||
|     Dqn_ArenaStats  thread_context_arena_current_stats[256]; |     Dqn_ArenaStats  thread_context_arena_current_stats[256]; | ||||||
|     Dqn_ArenaStats  thread_context_arena_highest_stats[256]; |     Dqn_ArenaStats  thread_context_arena_highest_stats[256]; | ||||||
|     int             thread_context_arena_stats_size; |     Dqn_u8          thread_context_arena_stats_size; | ||||||
| #endif | #endif | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| @ -1354,27 +1359,27 @@ DQN_FIXED_ARRAY_TEMPLATE struct Dqn_FixedArray | |||||||
|     T const *operator+  (Dqn_isize i) const { DQN_ASSERT_MSG(i >= 0 && i <= size, "%I64d >= 0 && %I64d < %I64d", i, size); return data + i; } |     T const *operator+  (Dqn_isize i) const { DQN_ASSERT_MSG(i >= 0 && i <= size, "%I64d >= 0 && %I64d < %I64d", i, size); return data + i; } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| DQN_FIXED_ARRAY_TEMPLATE DQN_API DQN_FIXED_ARRAY_TEMPLATE_DECL     Dqn_FixedArray_Init(T const *item, int num); | DQN_FIXED_ARRAY_TEMPLATE DQN_API DQN_FIXED_ARRAY_TEMPLATE_DECL     Dqn_FixedArrayInit(T const *item, int num); | ||||||
| DQN_FIXED_ARRAY_TEMPLATE DQN_API Dqn_isize                         Dqn_FixedArray_Max(DQN_FIXED_ARRAY_TEMPLATE_DECL const *); | DQN_FIXED_ARRAY_TEMPLATE DQN_API Dqn_isize                         Dqn_FixedArrayMax(DQN_FIXED_ARRAY_TEMPLATE_DECL const *); | ||||||
| 
 | 
 | ||||||
| // Calculate the index of a item from the its pointer
 | // Calculate the index of a item from the its pointer
 | ||||||
| DQN_FIXED_ARRAY_TEMPLATE DQN_API Dqn_isize                         Dqn_FixedArray_GetIndex(DQN_FIXED_ARRAY_TEMPLATE_DECL const *a, T const *entry); | DQN_FIXED_ARRAY_TEMPLATE DQN_API Dqn_isize                         Dqn_FixedArrayGetIndex(DQN_FIXED_ARRAY_TEMPLATE_DECL const *a, T const *entry); | ||||||
| 
 | 
 | ||||||
| // return: The newly added item, nullptr if failed
 | // return: The newly added item, nullptr if failed
 | ||||||
| DQN_FIXED_ARRAY_TEMPLATE DQN_API T                                *Dqn_FixedArray_Add(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, T const *items, Dqn_isize num); | DQN_FIXED_ARRAY_TEMPLATE DQN_API T                                *Dqn_FixedArrayAdd(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, T const *items, Dqn_isize num); | ||||||
| DQN_FIXED_ARRAY_TEMPLATE DQN_API T                                *Dqn_FixedArray_Add(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, T const &item); | DQN_FIXED_ARRAY_TEMPLATE DQN_API T                                *Dqn_FixedArrayAdd(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, T const &item); | ||||||
| 
 | 
 | ||||||
| // Bump the size of the array and return a pointer to 'num' uninitialised elements
 | // Bump the size of the array and return a pointer to 'num' uninitialised elements
 | ||||||
| DQN_FIXED_ARRAY_TEMPLATE DQN_API T                                *Dqn_FixedArray_Make(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_isize num); | DQN_FIXED_ARRAY_TEMPLATE DQN_API T                                *Dqn_FixedArrayMake(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_isize num); | ||||||
| DQN_FIXED_ARRAY_TEMPLATE DQN_API void                              Dqn_FixedArray_Clear(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_ZeroMem zero_mem = Dqn_ZeroMem::No); | DQN_FIXED_ARRAY_TEMPLATE DQN_API void                              Dqn_FixedArrayClear(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_ZeroMem zero_mem = Dqn_ZeroMem::No); | ||||||
| DQN_FIXED_ARRAY_TEMPLATE DQN_API void                              Dqn_FixedArray_EraseStable(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_isize index); | DQN_FIXED_ARRAY_TEMPLATE DQN_API void                              Dqn_FixedArrayEraseStable(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_isize index); | ||||||
| DQN_FIXED_ARRAY_TEMPLATE DQN_API void                              Dqn_FixedArray_EraseUnstable(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_isize index); | DQN_FIXED_ARRAY_TEMPLATE DQN_API void                              Dqn_FixedArrayEraseUnstable(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_isize index); | ||||||
| DQN_FIXED_ARRAY_TEMPLATE DQN_API void                              Dqn_FixedArray_Pop(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_isize num = 1, Dqn_ZeroMem zero_mem = Dqn_ZeroMem::No); | DQN_FIXED_ARRAY_TEMPLATE DQN_API void                              Dqn_FixedArrayPop(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_isize num = 1, Dqn_ZeroMem zero_mem = Dqn_ZeroMem::No); | ||||||
| DQN_FIXED_ARRAY_TEMPLATE DQN_API T                                *Dqn_FixedArray_Peek(DQN_FIXED_ARRAY_TEMPLATE_DECL *a); | DQN_FIXED_ARRAY_TEMPLATE DQN_API T                                *Dqn_FixedArrayPeek(DQN_FIXED_ARRAY_TEMPLATE_DECL *a); | ||||||
| DQN_FIXED_ARRAY_TEMPLATE DQN_API T                                 Dqn_FixedArray_PeekCopy(DQN_FIXED_ARRAY_TEMPLATE_DECL const *a); | DQN_FIXED_ARRAY_TEMPLATE DQN_API T                                 Dqn_FixedArrayPeekCopy(DQN_FIXED_ARRAY_TEMPLATE_DECL const *a); | ||||||
| template <typename T, int MAX_, typename IsEqual> DQN_API T       *Dqn_FixedArray_Find(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, IsEqual IsEqualProc); | template <typename T, int MAX_, typename IsEqual> DQN_API T       *Dqn_FixedArrayFind(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, IsEqual IsEqualProc); | ||||||
| template <typename T, int MAX_, typename IsEqual> DQN_API Dqn_b32  Dqn_FixedArray_FindElseMake(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, T **entry, IsEqual IsEqualProc); | template <typename T, int MAX_, typename IsEqual> DQN_API Dqn_b32  Dqn_FixedArrayFindElseMake(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, T **entry, IsEqual IsEqualProc); | ||||||
| DQN_FIXED_ARRAY_TEMPLATE DQN_API T                                *Dqn_FixedArray_Find(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, T *find); | DQN_FIXED_ARRAY_TEMPLATE DQN_API T                                *Dqn_FixedArrayFind(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, T *find); | ||||||
| #endif // DQN_WITH_FIXED_ARRAY
 | #endif // DQN_WITH_FIXED_ARRAY
 | ||||||
| 
 | 
 | ||||||
| // -------------------------------------------------------------------------------------------------
 | // -------------------------------------------------------------------------------------------------
 | ||||||
| @ -1897,7 +1902,7 @@ DQN_API char *Dqn_U64ToTempStr(Dqn_u64 val, Dqn_b32 comma_sep = true); | |||||||
| struct Dqn_ThreadScratchData | struct Dqn_ThreadScratchData | ||||||
| { | { | ||||||
|     Dqn_Arena arena; |     Dqn_Arena arena; | ||||||
|     Dqn_i8             arena_stats_index; // Index into Dqn_Lib's thread context arena stats array
 |     Dqn_u8    arena_stats_index; // Index into Dqn_Lib's thread context arena stats array
 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| struct Dqn_ThreadContext | struct Dqn_ThreadContext | ||||||
| @ -2010,7 +2015,7 @@ DQN_API Dqn_WinErrorMsg Dqn_WinLastError    (); | |||||||
| DQN_API void        Dqn__WinDumpLastError(Dqn_String file, Dqn_String function, Dqn_uint line, char const *fmt, ...); | DQN_API void        Dqn__WinDumpLastError(Dqn_String file, Dqn_String function, Dqn_uint line, char const *fmt, ...); | ||||||
| 
 | 
 | ||||||
| // return: The size required not including the null-terminator
 | // return: The size required not including the null-terminator
 | ||||||
| int                 Dqn_WinUTF8ToWCharSizeRequired(Dqn_String src); | DQN_API int         Dqn_WinUTF8ToWCharSizeRequired(Dqn_String src); | ||||||
| 
 | 
 | ||||||
| // Converts the UTF8 string into a wide string. This function always
 | // Converts the UTF8 string into a wide string. This function always
 | ||||||
| // null-terminates the buffer. If you use the SizeRequired(...) function, this
 | // null-terminates the buffer. If you use the SizeRequired(...) function, this
 | ||||||
| @ -2051,6 +2056,7 @@ struct Dqn_WinFolderIterator | |||||||
| DQN_API bool Dqn_WinFolderIterate(Dqn_String path, Dqn_WinFolderIterator *it); | DQN_API bool Dqn_WinFolderIterate(Dqn_String path, Dqn_WinFolderIterator *it); | ||||||
| DQN_API bool Dqn_WinFolderWIterate(Dqn_StringW path, Dqn_WinFolderIteratorW *it); | DQN_API bool Dqn_WinFolderWIterate(Dqn_StringW path, Dqn_WinFolderIteratorW *it); | ||||||
| 
 | 
 | ||||||
|  | #if defined(DQN_WITH_WIN_NET) | ||||||
| enum struct Dqn_WinNetHandleState | enum struct Dqn_WinNetHandleState | ||||||
| { | { | ||||||
|     Invalid, |     Invalid, | ||||||
| @ -2107,19 +2113,20 @@ struct Dqn_WinNetHandle | |||||||
| // Initialise a new networking handle that is pointing to the specified URL.
 | // Initialise a new networking handle that is pointing to the specified URL.
 | ||||||
| // The URL string must be null-terminated because Windows is a C API and
 | // The URL string must be null-terminated because Windows is a C API and
 | ||||||
| // requires null-termination.
 | // requires null-termination.
 | ||||||
| Dqn_WinNetHandle Dqn_WinNetHandleInitCString(char const *url, int url_size); | DQN_API Dqn_WinNetHandle Dqn_WinNetHandleInitCString(char const *url, int url_size); | ||||||
| Dqn_WinNetHandle Dqn_WinNetHandleInitString(Dqn_String url); | DQN_API Dqn_WinNetHandle Dqn_WinNetHandleInitString(Dqn_String url); | ||||||
| 
 | 
 | ||||||
| void             Dqn_WinNetHandleFinish(Dqn_WinNetHandle *handle); | DQN_API void             Dqn_WinNetHandleFinish(Dqn_WinNetHandle *handle); | ||||||
| bool             Dqn_WinNetHandleIsValid(Dqn_WinNetHandle const *handle); | DQN_API bool             Dqn_WinNetHandleIsValid(Dqn_WinNetHandle const *handle); | ||||||
| void             Dqn_WinNetHandleSetUserAgentCString(Dqn_WinNetHandle *handle, char const *user_agent, int user_agent_size); | DQN_API void             Dqn_WinNetHandleSetUserAgentCString(Dqn_WinNetHandle *handle, char const *user_agent, int user_agent_size); | ||||||
| bool             Dqn_WinNetHandlePump(Dqn_WinNetHandle *handle, char const *http_verb, char *post_data, int post_data_size, char *dest, int dest_size, size_t *download_size); | DQN_API bool             Dqn_WinNetHandlePump(Dqn_WinNetHandle *handle, char const *http_verb, char *post_data, int post_data_size, char *dest, int dest_size, size_t *download_size); | ||||||
| char *           Dqn_WinNetHandlePumpToCString(Dqn_WinNetHandle *handle, char const *http_verb, char *post_data, int post_data_size, Dqn_Arena *arena, size_t *download_size); | DQN_API char *           Dqn_WinNetHandlePumpToCString(Dqn_WinNetHandle *handle, char const *http_verb, char *post_data, int post_data_size, Dqn_Arena *arena, size_t *download_size); | ||||||
| Dqn_String       Dqn_WinNetHandlePumpToString(Dqn_WinNetHandle *handle, char const *http_verb, char *post_data, int post_data_size, Dqn_Arena *arena); | DQN_API Dqn_String       Dqn_WinNetHandlePumpToString(Dqn_WinNetHandle *handle, char const *http_verb, char *post_data, int post_data_size, Dqn_Arena *arena); | ||||||
| 
 | 
 | ||||||
| void             Dqn_WinNetHandlePumpToCRTFile(Dqn_WinNetHandle *handle, char const *http_verb, char *post_data, int post_data_size, FILE *file); | DQN_API void             Dqn_WinNetHandlePumpToCRTFile(Dqn_WinNetHandle *handle, char const *http_verb, char *post_data, int post_data_size, FILE *file); | ||||||
| char            *Dqn_WinNetHandlePumpToMallocCString(Dqn_WinNetHandle *handle, char const *http_verb, char *post_data, int post_data_size, size_t *download_size); | DQN_API char            *Dqn_WinNetHandlePumpToMallocCString(Dqn_WinNetHandle *handle, char const *http_verb, char *post_data, int post_data_size, size_t *download_size); | ||||||
| Dqn_String       Dqn_WinNetHandlePumpToMallocString(Dqn_WinNetHandle *handle, char const *http_verb, char *post_data, int post_data_size); | DQN_API Dqn_String       Dqn_WinNetHandlePumpToMallocString(Dqn_WinNetHandle *handle, char const *http_verb, char *post_data, int post_data_size); | ||||||
|  | #endif // DQN_WITH_WIN_NET
 | ||||||
| #endif // DQN_OS_WIN32
 | #endif // DQN_OS_WIN32
 | ||||||
| 
 | 
 | ||||||
| // -------------------------------------------------------------------------------------------------
 | // -------------------------------------------------------------------------------------------------
 | ||||||
| @ -2584,7 +2591,7 @@ DQN_API Dqn_b32 Dqn_FixedStringAppend(Dqn_FixedString<MAX_> *str, Dqn_String src | |||||||
| template <Dqn_isize MAX_> | template <Dqn_isize MAX_> | ||||||
| DQN_API Dqn_String Dqn_FixedStringToString(Dqn_FixedString<MAX_> const *str) | DQN_API Dqn_String Dqn_FixedStringToString(Dqn_FixedString<MAX_> const *str) | ||||||
| { | { | ||||||
|     auto result = Dqn_String_Init(str->str, str->size); |     auto result = Dqn_StringInit(str->str, str->size); | ||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
| #endif // DQN_WITH_FIXED_STRING
 | #endif // DQN_WITH_FIXED_STRING
 | ||||||
| @ -2603,22 +2610,22 @@ template <typename T> void Dqn__EraseStableFromCArray(T *array, Dqn_isize size, | |||||||
| // NOTE: Dqn_FixedArray Template Implementation
 | // NOTE: Dqn_FixedArray Template Implementation
 | ||||||
| // -------------------------------------------------------------------------------------------------
 | // -------------------------------------------------------------------------------------------------
 | ||||||
| DQN_FIXED_ARRAY_TEMPLATE | DQN_FIXED_ARRAY_TEMPLATE | ||||||
| DQN_API DQN_FIXED_ARRAY_TEMPLATE_DECL Dqn_FixedArray_Init(T const *item, int num) | DQN_API DQN_FIXED_ARRAY_TEMPLATE_DECL Dqn_FixedArrayInit(T const *item, int num) | ||||||
| { | { | ||||||
|     DQN_FIXED_ARRAY_TEMPLATE_DECL result = {}; |     DQN_FIXED_ARRAY_TEMPLATE_DECL result = {}; | ||||||
|     Dqn_FixedArray_Add(&result, item, num); |     Dqn_FixedArrayAdd(&result, item, num); | ||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| DQN_FIXED_ARRAY_TEMPLATE | DQN_FIXED_ARRAY_TEMPLATE | ||||||
| DQN_API Dqn_isize Dqn_FixedArray_Max(DQN_FIXED_ARRAY_TEMPLATE_DECL const *) | DQN_API Dqn_isize Dqn_FixedArrayMax(DQN_FIXED_ARRAY_TEMPLATE_DECL const *) | ||||||
| { | { | ||||||
|     Dqn_isize result = MAX_; |     Dqn_isize result = MAX_; | ||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| DQN_FIXED_ARRAY_TEMPLATE | DQN_FIXED_ARRAY_TEMPLATE | ||||||
| DQN_API Dqn_isize Dqn_FixedArray_GetIndex(DQN_FIXED_ARRAY_TEMPLATE_DECL const *a, T const *entry) | DQN_API Dqn_isize Dqn_FixedArrayGetIndex(DQN_FIXED_ARRAY_TEMPLATE_DECL const *a, T const *entry) | ||||||
| { | { | ||||||
|     DQN_ASSERT(entry >= a->begin() && entry <= a->end()); |     DQN_ASSERT(entry >= a->begin() && entry <= a->end()); | ||||||
|     Dqn_isize result = a->end() - entry; |     Dqn_isize result = a->end() - entry; | ||||||
| @ -2626,7 +2633,7 @@ DQN_API Dqn_isize Dqn_FixedArray_GetIndex(DQN_FIXED_ARRAY_TEMPLATE_DECL const *a | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| DQN_FIXED_ARRAY_TEMPLATE | DQN_FIXED_ARRAY_TEMPLATE | ||||||
| DQN_API T *Dqn_FixedArray_Add(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, T const *items, Dqn_isize num) | DQN_API T *Dqn_FixedArrayAdd(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, T const *items, Dqn_isize num) | ||||||
| { | { | ||||||
|     DQN_ASSERT(a->size + num <= MAX_); |     DQN_ASSERT(a->size + num <= MAX_); | ||||||
|     T *result = static_cast<T *>(DQN_MEMCOPY(a->data + a->size, items, sizeof(T) * num)); |     T *result = static_cast<T *>(DQN_MEMCOPY(a->data + a->size, items, sizeof(T) * num)); | ||||||
| @ -2635,7 +2642,7 @@ DQN_API T *Dqn_FixedArray_Add(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, T const *items, | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| DQN_FIXED_ARRAY_TEMPLATE | DQN_FIXED_ARRAY_TEMPLATE | ||||||
| DQN_API T *Dqn_FixedArray_Add(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, T const &item) | DQN_API T *Dqn_FixedArrayAdd(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, T const &item) | ||||||
| { | { | ||||||
|     DQN_ASSERT(a->size < MAX_); |     DQN_ASSERT(a->size < MAX_); | ||||||
|     a->data[a->size++] = item; |     a->data[a->size++] = item; | ||||||
| @ -2643,7 +2650,7 @@ DQN_API T *Dqn_FixedArray_Add(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, T const &item) | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| DQN_FIXED_ARRAY_TEMPLATE | DQN_FIXED_ARRAY_TEMPLATE | ||||||
| DQN_API T *Dqn_FixedArray_Make(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_isize num) | DQN_API T *Dqn_FixedArrayMake(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_isize num) | ||||||
| { | { | ||||||
|     DQN_ASSERT(a->size + num <= MAX_); |     DQN_ASSERT(a->size + num <= MAX_); | ||||||
|     T *result = a->data + a->size; |     T *result = a->data + a->size; | ||||||
| @ -2652,20 +2659,20 @@ DQN_API T *Dqn_FixedArray_Make(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_isize num) | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| DQN_FIXED_ARRAY_TEMPLATE | DQN_FIXED_ARRAY_TEMPLATE | ||||||
| DQN_API void Dqn_FixedArray_Clear(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_ZeroMem zero_mem) | DQN_API void Dqn_FixedArrayClear(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_ZeroMem zero_mem) | ||||||
| { | { | ||||||
|     a->size = 0; |     a->size = 0; | ||||||
|     Dqn__ZeroMemBytes(a->data, sizeof(T) * MAX_, zero_mem); |     Dqn__ZeroMemBytes(a->data, sizeof(T) * MAX_, zero_mem); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| DQN_FIXED_ARRAY_TEMPLATE | DQN_FIXED_ARRAY_TEMPLATE | ||||||
| DQN_API void Dqn_FixedArray_EraseStable(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_isize index) | DQN_API void Dqn_FixedArrayEraseStable(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_isize index) | ||||||
| { | { | ||||||
|     Dqn__EraseStableFromCArray<T>(a->data, a->size--, MAX_, index); |     Dqn__EraseStableFromCArray<T>(a->data, a->size--, MAX_, index); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| DQN_FIXED_ARRAY_TEMPLATE | DQN_FIXED_ARRAY_TEMPLATE | ||||||
| DQN_API void Dqn_FixedArray_EraseUnstable(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_isize index) | DQN_API void Dqn_FixedArrayEraseUnstable(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_isize index) | ||||||
| { | { | ||||||
|     DQN_ASSERT(index >= 0 && index < a->size); |     DQN_ASSERT(index >= 0 && index < a->size); | ||||||
|     if (--a->size == 0) return; |     if (--a->size == 0) return; | ||||||
| @ -2673,7 +2680,7 @@ DQN_API void Dqn_FixedArray_EraseUnstable(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_ | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| DQN_FIXED_ARRAY_TEMPLATE | DQN_FIXED_ARRAY_TEMPLATE | ||||||
| DQN_API void Dqn_FixedArray_Pop(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_isize num, Dqn_ZeroMem zero_mem) | DQN_API void Dqn_FixedArrayPop(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_isize num, Dqn_ZeroMem zero_mem) | ||||||
| { | { | ||||||
|     DQN_ASSERT(a->size - num >= 0); |     DQN_ASSERT(a->size - num >= 0); | ||||||
|     a->size -= num; |     a->size -= num; | ||||||
| @ -2684,14 +2691,14 @@ DQN_API void Dqn_FixedArray_Pop(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, Dqn_isize num, | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| DQN_FIXED_ARRAY_TEMPLATE | DQN_FIXED_ARRAY_TEMPLATE | ||||||
| DQN_API T *Dqn_FixedArray_Peek(DQN_FIXED_ARRAY_TEMPLATE_DECL *a) | DQN_API T *Dqn_FixedArrayPeek(DQN_FIXED_ARRAY_TEMPLATE_DECL *a) | ||||||
| { | { | ||||||
|     T *result = (a->size == 0) ? nullptr : a->data + (a->size - 1); |     T *result = (a->size == 0) ? nullptr : a->data + (a->size - 1); | ||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| DQN_FIXED_ARRAY_TEMPLATE | DQN_FIXED_ARRAY_TEMPLATE | ||||||
| DQN_API T Dqn_FixedArray_PeekCopy(DQN_FIXED_ARRAY_TEMPLATE_DECL const *a) | DQN_API T Dqn_FixedArrayPeekCopy(DQN_FIXED_ARRAY_TEMPLATE_DECL const *a) | ||||||
| { | { | ||||||
|     DQN_ASSERT(a->size > 0); |     DQN_ASSERT(a->size > 0); | ||||||
|     T const *result = a->data + (a->size - 1); |     T const *result = a->data + (a->size - 1); | ||||||
| @ -2699,7 +2706,7 @@ DQN_API T Dqn_FixedArray_PeekCopy(DQN_FIXED_ARRAY_TEMPLATE_DECL const *a) | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template <typename T, int MAX_, typename IsEqual> | template <typename T, int MAX_, typename IsEqual> | ||||||
| DQN_API T *Dqn_FixedArray_Find(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, IsEqual IsEqualProc) | DQN_API T *Dqn_FixedArrayFind(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, IsEqual IsEqualProc) | ||||||
| { | { | ||||||
|     for (T &entry : (*a)) |     for (T &entry : (*a)) | ||||||
|     { |     { | ||||||
| @ -2709,16 +2716,16 @@ DQN_API T *Dqn_FixedArray_Find(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, IsEqual IsEqual | |||||||
|     return nullptr; |     return nullptr; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // return: True if the entry was found, false if not- the entry is made using Dqn_FixedArray_Make() in this case
 | // return: True if the entry was found, false if not- the entry is made using Dqn_FixedArrayMake() in this case
 | ||||||
| template <typename T, int MAX_, typename IsEqual> | template <typename T, int MAX_, typename IsEqual> | ||||||
| DQN_API Dqn_b32 Dqn_FixedArray_FindElseMake(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, T **entry, IsEqual IsEqualProc) | DQN_API Dqn_b32 Dqn_FixedArrayFindElseMake(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, T **entry, IsEqual IsEqualProc) | ||||||
| { | { | ||||||
|     Dqn_b32 result = true; |     Dqn_b32 result = true; | ||||||
|     T *search  = Dqn_FixedArray_Find(a, IsEqualProc); |     T *search  = Dqn_FixedArrayFind(a, IsEqualProc); | ||||||
|     if (!search) |     if (!search) | ||||||
|     { |     { | ||||||
|         result = false; |         result = false; | ||||||
|         search = Dqn_FixedArray_Make(a, 1); |         search = Dqn_FixedArrayMake(a, 1); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     *entry = search; |     *entry = search; | ||||||
| @ -2726,7 +2733,7 @@ DQN_API Dqn_b32 Dqn_FixedArray_FindElseMake(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, T | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| DQN_FIXED_ARRAY_TEMPLATE | DQN_FIXED_ARRAY_TEMPLATE | ||||||
| DQN_API T *Dqn_FixedArray_Find(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, T *find) | DQN_API T *Dqn_FixedArrayFind(DQN_FIXED_ARRAY_TEMPLATE_DECL *a, T *find) | ||||||
| { | { | ||||||
|     for (T &entry : (*a)) |     for (T &entry : (*a)) | ||||||
|     { |     { | ||||||
| @ -3010,9 +3017,6 @@ Dqn_b32 Dqn_ListIterate(Dqn_List<T> *list, Dqn_ListIterator<T> *iterator) | |||||||
|         // NOTE: GetModuleFileNameW
 |         // NOTE: GetModuleFileNameW
 | ||||||
|         #define ERROR_INSUFFICIENT_BUFFER 122L |         #define ERROR_INSUFFICIENT_BUFFER 122L | ||||||
| 
 | 
 | ||||||
|         // NOTE: BCrypt
 |  | ||||||
|         #define BCRYPT_RNG_ALGORITHM L"RNG" |  | ||||||
| 
 |  | ||||||
|         // NOTE: MoveFile
 |         // NOTE: MoveFile
 | ||||||
|         #define MOVEFILE_REPLACE_EXISTING 0x00000001 |         #define MOVEFILE_REPLACE_EXISTING 0x00000001 | ||||||
|         #define MOVEFILE_COPY_ALLOWED 0x00000002 |         #define MOVEFILE_COPY_ALLOWED 0x00000002 | ||||||
| @ -6295,7 +6299,8 @@ DQN_API Dqn_b32 Dqn_OSSecureRNGBytes(void *buffer, Dqn_u32 size) | |||||||
|     Dqn_TicketMutexBegin(&dqn__lib.win32_bcrypt_rng_mutex); |     Dqn_TicketMutexBegin(&dqn__lib.win32_bcrypt_rng_mutex); | ||||||
|     if (!dqn__lib.win32_bcrypt_rng_handle) |     if (!dqn__lib.win32_bcrypt_rng_handle) | ||||||
|     { |     { | ||||||
|         NTSTATUS init_status = BCryptOpenAlgorithmProvider(&dqn__lib.win32_bcrypt_rng_handle, BCRYPT_RNG_ALGORITHM, nullptr /*implementation*/, 0 /*flags*/); |         wchar_t const BCRYPT_ALGORITHM[] = L"RNG"; | ||||||
|  |         long /*NTSTATUS*/ init_status = BCryptOpenAlgorithmProvider(&dqn__lib.win32_bcrypt_rng_handle, BCRYPT_ALGORITHM, nullptr /*implementation*/, 0 /*flags*/); | ||||||
|         if (!dqn__lib.win32_bcrypt_rng_handle || init_status != 0) |         if (!dqn__lib.win32_bcrypt_rng_handle || init_status != 0) | ||||||
|         { |         { | ||||||
|             DQN_LOG_E("Failed to initialise random number generator, error: %d", init_status); |             DQN_LOG_E("Failed to initialise random number generator, error: %d", init_status); | ||||||
| @ -6640,8 +6645,8 @@ DQN_API void Dqn_LibDumpThreadContextArenaStats(Dqn_String file_path) | |||||||
|                 highest_cumulative_stats.block_count     = DQN_MAX(highest_cumulative_stats.block_count, highest->block_count); |                 highest_cumulative_stats.block_count     = DQN_MAX(highest_cumulative_stats.block_count, highest->block_count); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             Dqn_ArenaStatsString cumulative_stats_string = Dqn_ArenaStats_String(&cumulative_stats); |             Dqn_ArenaStatsString cumulative_stats_string         = Dqn_ArenaStatsToString(&cumulative_stats); | ||||||
|             Dqn_ArenaStatsString highest_cumulative_stats_string = Dqn_ArenaStats_String(&highest_cumulative_stats); |             Dqn_ArenaStatsString highest_cumulative_stats_string = Dqn_ArenaStatsToString(&highest_cumulative_stats); | ||||||
|             fprintf(file, "  [ALL] CURR %.*s\n", cumulative_stats_string.size, cumulative_stats_string.str); |             fprintf(file, "  [ALL] CURR %.*s\n", cumulative_stats_string.size, cumulative_stats_string.str); | ||||||
|             fprintf(file, "        HIGH %.*s\n", highest_cumulative_stats_string.size, highest_cumulative_stats_string.str); |             fprintf(file, "        HIGH %.*s\n", highest_cumulative_stats_string.size, highest_cumulative_stats_string.str); | ||||||
|         } |         } | ||||||
| @ -6654,8 +6659,8 @@ DQN_API void Dqn_LibDumpThreadContextArenaStats(Dqn_String file_path) | |||||||
|             Dqn_ArenaStats const *current = current_stats + index; |             Dqn_ArenaStats const *current = current_stats + index; | ||||||
|             Dqn_ArenaStats const *highest = current_stats + index; |             Dqn_ArenaStats const *highest = current_stats + index; | ||||||
| 
 | 
 | ||||||
|             Dqn_ArenaStatsString current_string = Dqn_ArenaStats_String(current); |             Dqn_ArenaStatsString current_string = Dqn_ArenaStatsToString(current); | ||||||
|             Dqn_ArenaStatsString highest_string = Dqn_ArenaStats_String(highest); |             Dqn_ArenaStatsString highest_string = Dqn_ArenaStatsToString(highest); | ||||||
| 
 | 
 | ||||||
|             fprintf(file, "  [%03d] CURR %.*s\n", DQN_CAST(int)index, current_string.size, current_string.str); |             fprintf(file, "  [%03d] CURR %.*s\n", DQN_CAST(int)index, current_string.size, current_string.str); | ||||||
|             fprintf(file, "         HIGH %.*s\n", highest_string.size, highest_string.str); |             fprintf(file, "         HIGH %.*s\n", highest_string.size, highest_string.str); | ||||||
| @ -7215,6 +7220,7 @@ DQN_API bool Dqn_WinFolderIterate(Dqn_String path, Dqn_WinFolderIterator *it) | |||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #if defined(DQN_WITH_WIN_NET) | ||||||
| DQN_API Dqn_WinNetHandle Dqn_WinNetHandleInitCString(char const *url, int url_size) | DQN_API Dqn_WinNetHandle Dqn_WinNetHandleInitCString(char const *url, int url_size) | ||||||
| { | { | ||||||
|     URL_COMPONENTSA components  = {}; |     URL_COMPONENTSA components  = {}; | ||||||
| @ -7488,7 +7494,8 @@ DQN_API Dqn_String Dqn_WinNetHandlePumpToMallocString(Dqn_WinNetHandle *handle, | |||||||
|     Dqn_String result        = Dqn_StringInit(download, download_size); |     Dqn_String result        = Dqn_StringInit(download, download_size); | ||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
| #endif | #endif // DQN_WITH_WIN_NET
 | ||||||
|  | #endif // DQN_OS_WIN32
 | ||||||
| 
 | 
 | ||||||
| // -------------------------------------------------------------------------------------------------
 | // -------------------------------------------------------------------------------------------------
 | ||||||
| // NOTE: Hashing - Dqn_FNV1A[32|64]
 | // NOTE: Hashing - Dqn_FNV1A[32|64]
 | ||||||
|  | |||||||
| @ -312,56 +312,56 @@ Dqn_Test Dqn_Test_FixedArray() | |||||||
|     Dqn_Test test = {}; |     Dqn_Test test = {}; | ||||||
| #if defined(DQN_WITH_FIXED_ARRAY) | #if defined(DQN_WITH_FIXED_ARRAY) | ||||||
|     DQN_TEST_GROUP(test, "Dqn_FixedArray"); |     DQN_TEST_GROUP(test, "Dqn_FixedArray"); | ||||||
|     // NOTE: Dqn_FixedArray_Init
 |     // NOTE: Dqn_FixedArrayInit
 | ||||||
|     { |     { | ||||||
|         DQN_TEST(test, "Initialise from raw array"); |         DQN_TEST(test, "Initialise from raw array"); | ||||||
|         int raw_array[] = {1, 2}; |         int raw_array[] = {1, 2}; | ||||||
|         auto array = Dqn_FixedArray_Init<int, 4>(raw_array, (int)Dqn_ArrayCount(raw_array)); |         auto array = Dqn_FixedArrayInit<int, 4>(raw_array, (int)Dqn_ArrayCount(raw_array)); | ||||||
|         DQN_TEST_ASSERT(test, array.size == 2); |         DQN_TEST_ASSERT(test, array.size == 2); | ||||||
|         DQN_TEST_ASSERT(test, array[0] == 1); |         DQN_TEST_ASSERT(test, array[0] == 1); | ||||||
|         DQN_TEST_ASSERT(test, array[1] == 2); |         DQN_TEST_ASSERT(test, array[1] == 2); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // NOTE: Dqn_FixedArray_EraseStable
 |     // NOTE: Dqn_FixedArrayEraseStable
 | ||||||
|     { |     { | ||||||
|         DQN_TEST(test, "Erase stable 1 element from array"); |         DQN_TEST(test, "Erase stable 1 element from array"); | ||||||
|         int raw_array[] = {1, 2, 3}; |         int raw_array[] = {1, 2, 3}; | ||||||
|         auto array = Dqn_FixedArray_Init<int, 4>(raw_array, (int)Dqn_ArrayCount(raw_array)); |         auto array = Dqn_FixedArrayInit<int, 4>(raw_array, (int)Dqn_ArrayCount(raw_array)); | ||||||
|         Dqn_FixedArray_EraseStable(&array, 1); |         Dqn_FixedArrayEraseStable(&array, 1); | ||||||
|         DQN_TEST_ASSERT(test, array.size == 2); |         DQN_TEST_ASSERT(test, array.size == 2); | ||||||
|         DQN_TEST_ASSERT(test, array[0] == 1); |         DQN_TEST_ASSERT(test, array[0] == 1); | ||||||
|         DQN_TEST_ASSERT(test, array[1] == 3); |         DQN_TEST_ASSERT(test, array[1] == 3); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // NOTE: Dqn_FixedArray_EraseUnstable
 |     // NOTE: Dqn_FixedArrayEraseUnstable
 | ||||||
|     { |     { | ||||||
|         DQN_TEST(test, "Erase unstable 1 element from array"); |         DQN_TEST(test, "Erase unstable 1 element from array"); | ||||||
|         int raw_array[] = {1, 2, 3}; |         int raw_array[] = {1, 2, 3}; | ||||||
|         auto array = Dqn_FixedArray_Init<int, 4>(raw_array, (int)Dqn_ArrayCount(raw_array)); |         auto array = Dqn_FixedArrayInit<int, 4>(raw_array, (int)Dqn_ArrayCount(raw_array)); | ||||||
|         Dqn_FixedArray_EraseUnstable(&array, 0); |         Dqn_FixedArrayEraseUnstable(&array, 0); | ||||||
|         DQN_TEST_ASSERT(test, array.size == 2); |         DQN_TEST_ASSERT(test, array.size == 2); | ||||||
|         DQN_TEST_ASSERT(test, array[0] == 3); |         DQN_TEST_ASSERT(test, array[0] == 3); | ||||||
|         DQN_TEST_ASSERT(test, array[1] == 2); |         DQN_TEST_ASSERT(test, array[1] == 2); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // NOTE: Dqn_FixedArray_Add
 |     // NOTE: Dqn_FixedArrayAdd
 | ||||||
|     { |     { | ||||||
|         DQN_TEST(test, "Add 1 element to array"); |         DQN_TEST(test, "Add 1 element to array"); | ||||||
|         int const ITEM  = 2; |         int const ITEM  = 2; | ||||||
|         int raw_array[] = {1}; |         int raw_array[] = {1}; | ||||||
|         auto array      = Dqn_FixedArray_Init<int, 4>(raw_array, (int)Dqn_ArrayCount(raw_array)); |         auto array      = Dqn_FixedArrayInit<int, 4>(raw_array, (int)Dqn_ArrayCount(raw_array)); | ||||||
|         Dqn_FixedArray_Add(&array, ITEM); |         Dqn_FixedArrayAdd(&array, ITEM); | ||||||
|         DQN_TEST_ASSERT(test, array.size == 2); |         DQN_TEST_ASSERT(test, array.size == 2); | ||||||
|         DQN_TEST_ASSERT(test, array[0] == 1); |         DQN_TEST_ASSERT(test, array[0] == 1); | ||||||
|         DQN_TEST_ASSERT(test, array[1] == ITEM); |         DQN_TEST_ASSERT(test, array[1] == ITEM); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // NOTE: Dqn_FixedArray_Clear
 |     // NOTE: Dqn_FixedArrayClear
 | ||||||
|     { |     { | ||||||
|         DQN_TEST(test, "Clear array"); |         DQN_TEST(test, "Clear array"); | ||||||
|         int raw_array[] = {1}; |         int raw_array[] = {1}; | ||||||
|         auto array      = Dqn_FixedArray_Init<int, 4>(raw_array, (int)Dqn_ArrayCount(raw_array)); |         auto array      = Dqn_FixedArrayInit<int, 4>(raw_array, (int)Dqn_ArrayCount(raw_array)); | ||||||
|         Dqn_FixedArray_Clear(&array); |         Dqn_FixedArrayClear(&array); | ||||||
|         DQN_TEST_ASSERT(test, array.size == 0); |         DQN_TEST_ASSERT(test, array.size == 0); | ||||||
|     } |     } | ||||||
| #endif // DQN_WITH_FIXED_ARRAY
 | #endif // DQN_WITH_FIXED_ARRAY
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user