From 3ed939370af1872668d033665c5e08ef2d896e9b Mon Sep 17 00:00:00 2001 From: doyle Date: Wed, 16 Aug 2023 22:06:48 +1000 Subject: [PATCH] dqn: Add allocating string split --- dqn_strings.cpp | 14 ++++++++++++++ dqn_strings.h | 32 ++++++++++++++++++++------------ 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/dqn_strings.cpp b/dqn_strings.cpp index 8c54bc0..7939d59 100644 --- a/dqn_strings.cpp +++ b/dqn_strings.cpp @@ -149,6 +149,20 @@ DQN_API Dqn_usize Dqn_String8_Split(Dqn_String8 string, Dqn_String8 delimiter, D return result; } +DQN_API Dqn_String8SplitAllocResult Dqn_String8_SplitAlloc(Dqn_Allocator allocator, + Dqn_String8 string, + Dqn_String8 delimiter) +{ + Dqn_String8SplitAllocResult result = {}; + Dqn_usize splits_required = Dqn_String8_Split(string, delimiter, /*splits*/ nullptr, /*count*/ 0); + result.data = Dqn_Allocator_NewArray(allocator, Dqn_String8, splits_required, Dqn_ZeroMem_No); + if (result.data) { + result.size = Dqn_String8_Split(string, delimiter, result.data, splits_required); + DQN_ASSERT(splits_required == result.size); + } + return result; +} + DQN_API Dqn_String8FindResult Dqn_String8_FindFirstStringArray(Dqn_String8 string, Dqn_String8 const *find, Dqn_usize find_size) { Dqn_String8FindResult result = {}; diff --git a/dqn_strings.h b/dqn_strings.h index 7d6b662..3b0993c 100644 --- a/dqn_strings.h +++ b/dqn_strings.h @@ -288,6 +288,24 @@ enum Dqn_String8FindFlag Dqn_String8FindFlag_AlphaNum = Dqn_String8FindFlag_Alphabet | Dqn_String8FindFlag_Digit, }; +struct Dqn_String8SplitAllocResult +{ + Dqn_String8 *data; + Dqn_usize size; +}; + +struct Dqn_String8ToU64Result +{ + bool success; + uint64_t value; +}; + +struct Dqn_String8ToI64Result +{ + bool success; + int64_t value; +}; + DQN_API Dqn_String8 Dqn_String8_InitCString8 (char const *src); DQN_API bool Dqn_String8_IsValid (Dqn_String8 string); DQN_API bool Dqn_String8_IsAll (Dqn_String8 string, Dqn_String8IsAll is_all); @@ -302,6 +320,8 @@ DQN_API Dqn_String8 Dqn_String8_Slice (Dqn_Stri DQN_API Dqn_String8BinarySplitResult Dqn_String8_BinarySplitArray (Dqn_String8 string, Dqn_String8 const *find, Dqn_usize find_size); DQN_API Dqn_String8BinarySplitResult Dqn_String8_BinarySplit (Dqn_String8 string, Dqn_String8 find); DQN_API Dqn_usize Dqn_String8_Split (Dqn_String8 string, Dqn_String8 delimiter, Dqn_String8 *splits, Dqn_usize splits_count); +DQN_API Dqn_String8SplitAllocResult Dqn_String8_SplitAlloc (Dqn_Allocator allocator, Dqn_String8 string, Dqn_String8 delimiter); + DQN_API Dqn_String8FindResult Dqn_String8_FindFirstStringArray (Dqn_String8 string, Dqn_String8 const *find, Dqn_usize find_size); DQN_API Dqn_String8FindResult Dqn_String8_FindFirstString (Dqn_String8 string, Dqn_String8 find); DQN_API Dqn_String8FindResult Dqn_String8_FindFirst (Dqn_String8 string, uint32_t flags); @@ -322,18 +342,6 @@ DQN_API Dqn_String8 Dqn_String8_TrimByteOrderMark (Dqn_Stri DQN_API Dqn_String8 Dqn_String8_FileNameFromPath (Dqn_String8 path); -struct Dqn_String8ToU64Result -{ - bool success; - uint64_t value; -}; - -struct Dqn_String8ToI64Result -{ - bool success; - int64_t value; -}; - DQN_API Dqn_String8ToU64Result Dqn_String8_ToU64 (Dqn_String8 string, char separator); DQN_API Dqn_String8ToI64Result Dqn_String8_ToI64 (Dqn_String8 string, char separator);