Add DqnBuffer, improve memstack macros

This commit is contained in:
Doyle T 2018-08-19 11:59:04 +10:00
parent cfb1dc9d19
commit e0fc9f7b44
4 changed files with 88 additions and 74 deletions

View File

@ -2,7 +2,7 @@ void DqnFixedString_Test()
{
LOG_HEADER();
{
DqnFixedString<512> str = DQN_SLICE("hello world");
DqnFixedString<512> str = DQN_BUFFER_STR_LIT("hello world");
DQN_ASSERT(DqnStr_Cmp(str.str, "hello world") == 0);
Log(Status::Ok, "Copy constructor DqnSlice<char>");
@ -10,11 +10,11 @@ void DqnFixedString_Test()
{
DqnFixedString<512> zero = {};
DqnFixedString<512> str = DQN_SLICE("hello world");
DqnFixedString<512> str = DQN_BUFFER_STR_LIT("hello world");
str = zero;
DQN_ASSERT(str.len == 0 && str.str[0] == 0);
DqnSlice<char const> helloSlice = DQN_SLICE("hello");
DqnSlice<char const> helloSlice = DQN_BUFFER_STR_LIT("hello");
str = helloSlice;
DQN_ASSERT(DqnStr_Cmp(str.str, "hello") == 0);
@ -22,7 +22,7 @@ void DqnFixedString_Test()
}
{
DqnFixedString<512> str = DQN_SLICE("hello world");
DqnFixedString<512> str = DQN_BUFFER_STR_LIT("hello world");
DQN_ASSERT(str.Sprintf("hello %s", "sailor"));
DQN_ASSERTM(DqnStr_Cmp(str.str, "hello sailor") == 0, "Result: %s", str.str);
@ -31,14 +31,14 @@ void DqnFixedString_Test()
{
{
DqnFixedString<512> str = DQN_SLICE("hello world");
DqnFixedString<512> str = DQN_BUFFER_STR_LIT("hello world");
DQN_ASSERT(str.Sprintf("hello %s", "sailor"));
str += DQN_SLICE(".end");
str += DQN_BUFFER_STR_LIT(".end");
DQN_ASSERTM(DqnStr_Cmp(str.str, "hello sailor.end") == 0, "Result: %s", str.str);
}
{
DqnFixedString<512> str = DQN_SLICE("hello world");
DqnFixedString<512> str = DQN_BUFFER_STR_LIT("hello world");
DQN_ASSERT(str.Sprintf("hello %s", "sailor"));
DQN_ASSERT(str.SprintfAppend(" %d, %d", 100, 200));
DQN_ASSERT(DqnStr_Cmp(str.str, "hello sailor 100, 200") == 0);
@ -58,9 +58,9 @@ void DqnFixedString_Test()
}
{
DqnFixedString<512> str = DQN_SLICE("hello world");
DqnFixedString<512> str = DQN_BUFFER_STR_LIT("hello world");
DQN_ASSERT(str.Sprintf("hello %s", "sailor"));
str = str + " end" + DQN_SLICE(" of");
str = str + " end" + DQN_BUFFER_STR_LIT(" of");
DQN_ASSERT(DqnStr_Cmp(str.str, "hello sailor end of") == 0);
Log(Status::Ok, "Operator +");

View File

@ -28,38 +28,38 @@ void DqnJson_Test()
}
)FOO";
DqnJson result = DqnJson_Get(DqnSlice<const char>(json, DQN_ARRAY_COUNT(json)), DQN_SLICE("result"));
DqnJson cum_difficulty = DqnJson_Get(result, DQN_SLICE("cumulative_difficulty"));
DqnJson difficulty = DqnJson_Get(result, DQN_SLICE("difficulty"));
DqnJson name = DqnJson_Get(result, DQN_SLICE("name"));
DqnJson array_of_objects = DqnJson_Get(result, DQN_SLICE("array_of_objects"));
DqnJson time = DqnJson_Get(result, DQN_SLICE("time"));
DqnJson embed_object = DqnJson_Get(result, DQN_SLICE("embed_object"));
DqnJson bits = DqnJson_Get(result, DQN_SLICE("bits"));
DqnJson hex = DqnJson_Get(result, DQN_SLICE("hex"));
DqnJson extra = DqnJson_Get(result, DQN_SLICE("extra"));
DqnJson serialise = DqnJson_Get(result, DQN_SLICE("serialise"));
DqnJson result = DqnJson_Get(DqnSlice<const char>(json, DQN_ARRAY_COUNT(json)), DQN_BUFFER_STR_LIT("result"));
DqnJson cum_difficulty = DqnJson_Get(result, DQN_BUFFER_STR_LIT("cumulative_difficulty"));
DqnJson difficulty = DqnJson_Get(result, DQN_BUFFER_STR_LIT("difficulty"));
DqnJson name = DqnJson_Get(result, DQN_BUFFER_STR_LIT("name"));
DqnJson array_of_objects = DqnJson_Get(result, DQN_BUFFER_STR_LIT("array_of_objects"));
DqnJson time = DqnJson_Get(result, DQN_BUFFER_STR_LIT("time"));
DqnJson embed_object = DqnJson_Get(result, DQN_BUFFER_STR_LIT("embed_object"));
DqnJson bits = DqnJson_Get(result, DQN_BUFFER_STR_LIT("bits"));
DqnJson hex = DqnJson_Get(result, DQN_BUFFER_STR_LIT("hex"));
DqnJson extra = DqnJson_Get(result, DQN_BUFFER_STR_LIT("extra"));
DqnJson serialise = DqnJson_Get(result, DQN_BUFFER_STR_LIT("serialise"));
DQN_ASSERT(DQN_SLICE_CMP(cum_difficulty.value, DQN_SLICE("282912831023"), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_SLICE_CMP(difficulty.value, DQN_SLICE("18293"), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_SLICE_CMP(name.value, DQN_SLICE("\"Block\""), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_BUFFER_STRCMP(cum_difficulty.value, DQN_BUFFER_STR_LIT("282912831023"), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_BUFFER_STRCMP(difficulty.value, DQN_BUFFER_STR_LIT("18293"), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_BUFFER_STRCMP(name.value, DQN_BUFFER_STR_LIT("\"Block\""), Dqn::IgnoreCase::No));
{
DQN_ASSERT(array_of_objects.IsArray() && array_of_objects.num_entries == 2);
isize count = 0;
while(DqnJson it = DqnJson_GetNextArrayItem(&array_of_objects))
{
DqnJson hash = DqnJson_Get(it, DQN_SLICE("hash"));
DqnJson time2 = DqnJson_Get(it, DQN_SLICE("time"));
DqnJson hash = DqnJson_Get(it, DQN_BUFFER_STR_LIT("hash"));
DqnJson time2 = DqnJson_Get(it, DQN_BUFFER_STR_LIT("time"));
if (count == 0)
{
DQN_ASSERT(DQN_SLICE_CMP(hash.value, DQN_SLICE("\"83abdc3f\""), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_SLICE_CMP(time2.value, DQN_SLICE("102981029381"), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_BUFFER_STRCMP(hash.value, DQN_BUFFER_STR_LIT("\"83abdc3f\""), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_BUFFER_STRCMP(time2.value, DQN_BUFFER_STR_LIT("102981029381"), Dqn::IgnoreCase::No));
}
else
{
DQN_ASSERT(DQN_SLICE_CMP(hash.value, DQN_SLICE("\"12acf73d\""), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_SLICE_CMP(time2.value, DQN_SLICE("123761239789"), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_BUFFER_STRCMP(hash.value, DQN_BUFFER_STR_LIT("\"12acf73d\""), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_BUFFER_STRCMP(time2.value, DQN_BUFFER_STR_LIT("123761239789"), Dqn::IgnoreCase::No));
}
++count;
}
@ -67,13 +67,13 @@ void DqnJson_Test()
}
{
DqnJson proof = DqnJson_Get(embed_object, DQN_SLICE("proof"));
DqnJson signature = DqnJson_Get(embed_object, DQN_SLICE("signature"));
DQN_ASSERT(DQN_SLICE_CMP(proof.value, DQN_SLICE("\"axcbde\""), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_SLICE_CMP(signature.value, DQN_SLICE("\"l9382kjabmznmx129aslzejs\""), Dqn::IgnoreCase::No));
DqnJson proof = DqnJson_Get(embed_object, DQN_BUFFER_STR_LIT("proof"));
DqnJson signature = DqnJson_Get(embed_object, DQN_BUFFER_STR_LIT("signature"));
DQN_ASSERT(DQN_BUFFER_STRCMP(proof.value, DQN_BUFFER_STR_LIT("\"axcbde\""), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_BUFFER_STRCMP(signature.value, DQN_BUFFER_STR_LIT("\"l9382kjabmznmx129aslzejs\""), Dqn::IgnoreCase::No));
}
DQN_ASSERT(DQN_SLICE_CMP(time.value, DQN_SLICE("3498573485"), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_BUFFER_STRCMP(time.value, DQN_BUFFER_STR_LIT("3498573485"), Dqn::IgnoreCase::No));
{
DQN_ASSERT(bits.IsArray() && bits.num_entries == 7);
@ -84,13 +84,13 @@ void DqnJson_Test()
bits_array[bitsIndex++] = it;
DQN_ASSERT(bitsIndex == DQN_ARRAY_COUNT(bits_array));
DQN_ASSERT(DQN_SLICE_CMP(bits_array[0].value, DQN_SLICE("1"), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_SLICE_CMP(bits_array[1].value, DQN_SLICE("0"), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_SLICE_CMP(bits_array[2].value, DQN_SLICE("1"), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_SLICE_CMP(bits_array[3].value, DQN_SLICE("1"), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_SLICE_CMP(bits_array[4].value, DQN_SLICE("0"), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_SLICE_CMP(bits_array[5].value, DQN_SLICE("1"), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_SLICE_CMP(bits_array[6].value, DQN_SLICE("0"), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_BUFFER_STRCMP(bits_array[0].value, DQN_BUFFER_STR_LIT("1"), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_BUFFER_STRCMP(bits_array[1].value, DQN_BUFFER_STR_LIT("0"), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_BUFFER_STRCMP(bits_array[2].value, DQN_BUFFER_STR_LIT("1"), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_BUFFER_STRCMP(bits_array[3].value, DQN_BUFFER_STR_LIT("1"), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_BUFFER_STRCMP(bits_array[4].value, DQN_BUFFER_STR_LIT("0"), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_BUFFER_STRCMP(bits_array[5].value, DQN_BUFFER_STR_LIT("1"), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_BUFFER_STRCMP(bits_array[6].value, DQN_BUFFER_STR_LIT("0"), Dqn::IgnoreCase::No));
}
{
@ -102,17 +102,17 @@ void DqnJson_Test()
hex_array[hex_index++] = it;
DQN_ASSERT(hex_index == DQN_ARRAY_COUNT(hex_array));
DQN_ASSERT(DQN_SLICE_CMP(hex_array[0].value, DQN_SLICE("\"AF\""), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_SLICE_CMP(hex_array[1].value, DQN_SLICE("\"BE\""), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_SLICE_CMP(hex_array[2].value, DQN_SLICE("\"0C\""), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_SLICE_CMP(hex_array[3].value, DQN_SLICE("\"FF\""), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_BUFFER_STRCMP(hex_array[0].value, DQN_BUFFER_STR_LIT("\"AF\""), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_BUFFER_STRCMP(hex_array[1].value, DQN_BUFFER_STR_LIT("\"BE\""), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_BUFFER_STRCMP(hex_array[2].value, DQN_BUFFER_STR_LIT("\"0C\""), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_BUFFER_STRCMP(hex_array[3].value, DQN_BUFFER_STR_LIT("\"FF\""), Dqn::IgnoreCase::No));
}
{
DQN_ASSERT(extra.IsArray() && extra.num_entries == 1);
while(DqnJson it = DqnJson_GetNextArrayItem(&extra))
{
DQN_ASSERT(DQN_SLICE_CMP(it.value, DQN_SLICE("123"), Dqn::IgnoreCase::No));
DQN_ASSERT(DQN_BUFFER_STRCMP(it.value, DQN_BUFFER_STR_LIT("123"), Dqn::IgnoreCase::No));
}
}
Log(Status::Ok, "DqnJson sample structure parsed");

View File

@ -665,7 +665,7 @@ void DqnString_Test()
}
{
DqnString str = DQN_SLICE("hello world");
DqnString str = DQN_BUFFER_STR_LIT("hello world");
DQN_DEFER(str.Free());
DQN_ASSERT(DqnStr_Cmp(str.str, "hello world") == 0);
@ -674,11 +674,11 @@ void DqnString_Test()
{
DqnString zero = {};
DqnString str = DQN_SLICE("hello world");
DqnString str = DQN_BUFFER_STR_LIT("hello world");
str.Free();
str = zero;
DqnSlice<char const> helloSlice = DQN_SLICE("hello");
DqnBuffer<char const> helloSlice = DQN_BUFFER_STR_LIT("hello");
str = helloSlice;
DQN_DEFER(str.Free());
DQN_ASSERT(DqnStr_Cmp(str.str, "hello") == 0);
@ -687,7 +687,7 @@ void DqnString_Test()
}
{
DqnString str = DQN_SLICE("hello world");
DqnString str = DQN_BUFFER_STR_LIT("hello world");
DQN_DEFER(str.Free());
DQN_ASSERT(str.Sprintf("hello %s", "sailor"));
DQN_ASSERTM(DqnStr_Cmp(str.str, "hello sailor") == 0, "Result: %s", str.str);
@ -697,15 +697,15 @@ void DqnString_Test()
{
{
DqnString str = DQN_SLICE("hello world");
DqnString str = DQN_BUFFER_STR_LIT("hello world");
DQN_DEFER(str.Free());
DQN_ASSERT(str.Sprintf("hello %s", "sailor"));
str += DQN_SLICE(".end");
str += DQN_BUFFER_STR_LIT(".end");
DQN_ASSERTM(DqnStr_Cmp(str.str, "hello sailor.end") == 0, "Result: %s", str.str);
}
{
DqnString str = DQN_SLICE("hello world");
DqnString str = DQN_BUFFER_STR_LIT("hello world");
DQN_DEFER(str.Free());
DQN_ASSERT(str.Sprintf("hello %s", "sailor"));
DQN_ASSERT(str.SprintfAppend(" %d, %d", 100, 200));
@ -727,10 +727,10 @@ void DqnString_Test()
}
{
DqnString str = DQN_SLICE("hello world");
DqnString str = DQN_BUFFER_STR_LIT("hello world");
DQN_DEFER(str.Free());
DQN_ASSERT(str.Sprintf("hello %s", "sailor"));
str = str + " end" + DQN_SLICE(" of");
str = str + " end" + DQN_BUFFER_STR_LIT(" of");
DQN_ASSERT(DqnStr_Cmp(str.str, "hello sailor end of") == 0);
Log(Status::Ok, "Operator +");

52
dqn.h
View File

@ -24,7 +24,8 @@
// #Portable Code
// #DqnSprintf Cross-platform Sprintf Implementation (Public Domain lib stb_sprintf)
// #DqnAssert Assertions and Logging
// #DqnSlice Slices
// #DqnSlice A ptr and length into memory but doesn't imply ownership of memory
// #DqnBuffer Typedef to slices, but indicates ownership of the memory
// #DqnChar Char Operations (IsDigit(), IsAlpha() etc)
// #DqnStr Str Operations (Str_Len(), Str_Copy() etc)
// #DqnWChar WChar Operations (IsDigit(), IsAlpha() etc)
@ -758,20 +759,30 @@ DQN_FILE_SCOPE void DqnLogExpr(char const *file, char const *function_name, i32
DQN_COMPILE_ASSERT(sizeof(isize) == sizeof(usize));
// #DqnSlice API
// #DqnSlice/#DqnBuffer
// =================================================================================================
// NOTE: A slice and buffer is the same thing but, slices have the pre-existing concepts of being a
// a ptr and length into pre-existing allocated memory. So instead, I use buffer to indicate the
// data structure it self owns the memory it's holding.
template <typename T>
struct DqnSlice
{
T *data;
i32 len;
union { T *data; T *str; };
int len;
DqnSlice() = default;
DqnSlice(T *str, i32 len) { this->data = str; this->len = len; }
DqnSlice(T *data_, int len_) : data(data_), len(len_) {}
};
#define DQN_SLICE(literal) DqnSlice<char const>(literal, DQN_CHAR_COUNT(literal))
#define DQN_SLICE_CMP(a, b, ignoreCase) (a.len == b.len && (DqnStr_Cmp(a.data, b.data, a.len, ignoreCase) == 0))
template<typename T>
using DqnBuffer = DqnSlice<T>;
#define DQN_BUFFER_STR_LIT(literal) DqnBuffer<char const>(literal, DQN_CHAR_COUNT(literal))
#define DQN_BUFFER_STRCMP(a, b, ignore_case) ((a).len == (b).len && (DqnStr_Cmp((char *)((a).str), (char *)((b).str), (a).len, ignore_case) == 0))
#define DQN_BUFFER_MEMCMP(a, b) ((a).len == (b).len && (DqnMem_Cmp((void *)((a).str), (void *)((b).str), (a).len) == 0))
#define DQN_BUFFER_STR_LIT_STRCMP(a, b, ignore_case) ((a).len == (b).len && (DqnStr_Cmp((char *)((a).str), (char *)((b).str), (a).len, ignore_case) == 0))
#define DQN_BUFFER_STR_LIT_MEMCMP(a, b) ((a).len == (b).len && (DqnMem_Cmp((void *)((a).str), (void *)((b).str), (a).len) == 0))
// #DqnChar API
// =================================================================================================
DQN_FILE_SCOPE char DqnChar_ToLower (char c);
@ -1470,7 +1481,8 @@ struct DqnMemTracker
// stack.Init(DQN_MEGABYTE(1), true, DqnMemStack::Flag::BoundsGuard);
// u8 *data = stack.Push(128);
#define DQN_MEM_STACK_PUSH_STRUCT(memStack, Type, num) (Type *)(memStack)->Push(sizeof(Type) * num)
#define DQN_MEMSTACK_PUSH_STRUCT(memstack, Type) (Type *)(memstack)->Push(sizeof(Type))
#define DQN_MEMSTACK_PUSH_ARRAY(memstack, Type, num) (Type *)(memstack)->Push(sizeof(Type) * (num))
struct DqnMemStack
{
static const i32 MINIMUM_BLOCK_SIZE = DQN_KILOBYTE(64);
@ -1506,10 +1518,10 @@ struct DqnMemStack
};
DqnMemTracker tracker; // Read: Metadata for managing ptr allocation
DqnMemAPI *mem_api; // Read: API used to add additional memory blocks to this stack.
DqnMemAPI *mem_api; // Read: API used to add additional memory blocks to this stack.
Block *block; // Read: Memory block allocated for the stack
u32 flags; // Read
i32 tmp_region_count; // Read: The number of temp memory regions in use
i32 tmp_region_count;// Read: The number of temp memory regions in use
DqnMemStack() = default;
@ -1550,7 +1562,7 @@ struct DqnMemStack
void ResetTail ();
// Reset the current memory block usage to 0.
void ClearCurrBlock(Dqn::ZeroClear clear);
void ClearCurrBlock(Dqn::ZeroClear clear = Dqn::ZeroClear::No);
Info GetInfo () const;
// Temporary Memory Regions API
@ -1949,7 +1961,8 @@ struct DqnLogger
#define LOG_TYPES \
X(Warning, "WARN ") \
X(Error, "ERROR") \
X(Debug, "DEBUG")
X(Debug, "DEBUG") \
X(Message, "MSG ")
#define X(type, prefix) type,
enum struct Type { LOG_TYPES };
@ -1974,9 +1987,10 @@ struct DqnLogger
};
#define DQN_LOGGER_CONTEXT {__FILE__, DQN_CHAR_COUNT(__FILE__), __func__, DQN_CHAR_COUNT(__func__), __LINE__}
#define DQN_LOGGER_D(logger, fmt, ...) logger.Log(DqnLogger::Type::Debug, {__FILE__, DQN_CHAR_COUNT(__FILE__), __func__, DQN_CHAR_COUNT(__func__), __LINE__}, fmt, ## __VA_ARGS__)
#define DQN_LOGGER_W(logger, fmt, ...) logger.Log(DqnLogger::Type::Warning, {__FILE__, DQN_CHAR_COUNT(__FILE__), __func__, DQN_CHAR_COUNT(__func__), __LINE__}, fmt, ## __VA_ARGS__)
#define DQN_LOGGER_E(logger, fmt, ...) logger.Log(DqnLogger::Type::Error, {__FILE__, DQN_CHAR_COUNT(__FILE__), __func__, DQN_CHAR_COUNT(__func__), __LINE__}, fmt, ## __VA_ARGS__)
#define DQN_LOGGER_D(logger, fmt, ...) (logger)->Log(DqnLogger::Type::Debug, {__FILE__, DQN_CHAR_COUNT(__FILE__), __func__, DQN_CHAR_COUNT(__func__), __LINE__}, fmt, ## __VA_ARGS__)
#define DQN_LOGGER_W(logger, fmt, ...) (logger)->Log(DqnLogger::Type::Warning, {__FILE__, DQN_CHAR_COUNT(__FILE__), __func__, DQN_CHAR_COUNT(__func__), __LINE__}, fmt, ## __VA_ARGS__)
#define DQN_LOGGER_E(logger, fmt, ...) (logger)->Log(DqnLogger::Type::Error, {__FILE__, DQN_CHAR_COUNT(__FILE__), __func__, DQN_CHAR_COUNT(__func__), __LINE__}, fmt, ## __VA_ARGS__)
#define DQN_LOGGER_M(logger, fmt, ...) (logger)->Log(DqnLogger::Type::Message, {__FILE__, DQN_CHAR_COUNT(__FILE__), __func__, DQN_CHAR_COUNT(__func__), __LINE__}, fmt, ## __VA_ARGS__)
DqnFixedString1024 log_builder;
b32 no_console; // Log to console if false.
@ -6045,7 +6059,7 @@ DQN_FILE_SCOPE DqnJson DqnJson_GetNextArrayItem(DqnJson *iterator)
if (iterator->type == DqnJson::Type::ArrayOfObjects)
{
if (result = DqnJson_Get(iterator->value, DQN_SLICE("{")))
if (result = DqnJson_Get(iterator->value, DQN_BUFFER_STR_LIT("{")))
{
char const *end = iterator->value.data + iterator->value.len;
iterator->value.data = result.value.data + result.value.len;
@ -8860,7 +8874,7 @@ DQN_OS_GET_THREADS_AND_CORES(DqnOS_GetThreadsAndCores)
{
*num_threads_per_core = 0;
// Find the offset to the processor field and move to it
DqnSlice<char const> processor = DQN_SLICE("processor");
DqnBuffer<char const> processor = DQN_BUFFER_STR_LIT("processor");
i32 processorOffset = DqnStr_FindFirstOccurence(src_ptr, src_len, processor.data, processor.len);
DQN_ASSERT(processorOffset != -1);
@ -8880,8 +8894,8 @@ DQN_OS_GET_THREADS_AND_CORES(DqnOS_GetThreadsAndCores)
{
*num_cores = 0;
// Find the offset to the cpu cores field and move to it
DqnSlice<char const> cpuCores = DQN_SLICE("cpu cores");
i32 cpu_cores_offset = DqnStr_FindFirstOccurence(src_ptr, src_len, cpuCores.data, cpuCores.len);
DqnBuffer<char const> cpuCores = DQN_BUFFER_STR_LIT("cpu cores");
i32 cpu_cores_offset = DqnStr_FindFirstOccurence(src_ptr, src_len, cpuCores.data, cpuCores.len);
DQN_ASSERT(cpu_cores_offset != -1);
DQN_ADVANCE_CHAR_PTR_AND_LEN_INTERNAL(src_ptr, src_len, cpu_cores_offset);