Const overloads for DqnJson_Get, restore InitLiteralNoAlloc
This commit is contained in:
		
							parent
							
								
									6fcf111d2d
								
							
						
					
					
						commit
						dc22ba2a02
					
				
							
								
								
									
										69
									
								
								dqn.h
									
									
									
									
									
								
							
							
						
						
									
										69
									
								
								dqn.h
									
									
									
									
									
								
							| @ -139,8 +139,9 @@ using f32 = float; | ||||
| #define DQN_MEGABYTE(val) (DQN_KILOBYTE(val) * 1024LL) | ||||
| #define DQN_KILOBYTE(val) ((val) * 1024LL) | ||||
| 
 | ||||
| #define DQN_HOUR(val) ((DQN_MINUTE(val)) * 60) | ||||
| #define DQN_MINUTE(val) ((val) * 60) | ||||
| #define DQN_DAY_TO_S(val) ((DQN_HOUR_TO_S(val)) * 24) | ||||
| #define DQN_HOUR_TO_S(val) ((DQN_MINUTE_TO_S(val)) * 60) | ||||
| #define DQN_MINUTE_TO_S(val) ((val) * 60) | ||||
| 
 | ||||
| #define DQN_ALIGN_POW_N(val, align) ((((usize)val) + ((usize)align-1)) & (~(usize)(align-1))) | ||||
| #define DQN_ALIGN_POW_4(val)        DQN_ALIGN_POW_N(val, 4) | ||||
| @ -213,19 +214,11 @@ struct DqnSlice | ||||
| 	i32  len; | ||||
| 
 | ||||
| 	DqnSlice() = default; | ||||
| 	DqnSlice(T *str, i32 len) { data = str; len = len; } | ||||
| 	DqnSlice(T *str, i32 len) { this->data = str; this->len = len; } | ||||
| }; | ||||
| #define DQN_SLICE_NAME(name) DqnSlice<char const>(name, DQN_CHAR_COUNT(name)) | ||||
| 
 | ||||
| template <typename T> | ||||
| bool DqnSlice_Cmp(DqnSlice<T> const a, DqnSlice<T> const b, Dqn::IgnoreCase ignore = Dqn::IgnoreCase::False) | ||||
| { | ||||
| 	char const *bytePtrA      = reinterpret_cast<char const *>(a.data); | ||||
| 	char const *bytePtrB      = reinterpret_cast<char const *>(b.data); | ||||
| 	bool result = (a.len == b.len && DqnStr_Cmp(bytePtrA, bytePtrB, a.len, ignore) == 0); | ||||
| 	return result; | ||||
| } | ||||
| 
 | ||||
| #define DQN_SLICE_CMP(a, b, ignoreCase)  (a.len == b.len && (DqnStr_Cmp(a.data, b.data, a.len, ignoreCase) == 0)) | ||||
| // #DqnChar API
 | ||||
| // =================================================================================================
 | ||||
| DQN_FILE_SCOPE char DqnChar_ToLower     (char c); | ||||
| @ -1543,6 +1536,9 @@ struct DqnString | ||||
| 	bool InitLiteral       (wchar_t const *const cstr, DqnMemStack *const stack); | ||||
| 	bool InitLiteral       (wchar_t const *const cstr, DqnMemAPI   *const api = DQN_DEFAULT_HEAP_ALLOCATOR); | ||||
| 
 | ||||
| 	// return: False if cstr is nullptr.
 | ||||
| 	bool InitLiteralNoAlloc(char *const cstr, i32 cstrLen = -1); | ||||
| 
 | ||||
| 	// API
 | ||||
| 	// =============================================================================================
 | ||||
| 	// return: These functions return false if allocation failed. String is preserved.
 | ||||
| @ -1569,6 +1565,18 @@ struct DqnString | ||||
| 		bool result = (a->len == b->len) && (DqnStr_Cmp(a->str, b->str, a->len, ignore) == 0); | ||||
| 		return result; | ||||
| 	} | ||||
| 
 | ||||
| 	static bool Cmp(DqnString const *a, DqnSlice<char const> const b, Dqn::IgnoreCase ignore = Dqn::IgnoreCase::False) | ||||
| 	{ | ||||
| 		bool result = (a->len == b.len) && (DqnStr_Cmp(a->str, b.data, b.len, ignore) == 0); | ||||
| 		return result; | ||||
| 	} | ||||
| 
 | ||||
| 	static bool Cmp(DqnString const *a, DqnSlice<char> const b, Dqn::IgnoreCase ignore = Dqn::IgnoreCase::False) | ||||
| 	{ | ||||
| 		bool result = (a->len == b.len) && (DqnStr_Cmp(a->str, b.data, b.len, ignore) == 0); | ||||
| 		return result; | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| struct DqnSmartString : public DqnString | ||||
| @ -2098,8 +2106,11 @@ struct DqnJson | ||||
| // If array, it returns a slice from [..] not-inclusive, if object, it returns a slice from {..} not-inclusive
 | ||||
| // If just name value pair, it returns the literal with quotes or just the value if it is a primitive with quotes.
 | ||||
| DQN_FILE_SCOPE DqnJson DqnJson_Get             (char const *buf, i32 bufLen, char const *findProperty, i32 findPropertyLen); | ||||
| DQN_FILE_SCOPE DqnJson DqnJson_Get             (DqnSlice<char> const buf, DqnSlice<char> const findProperty); | ||||
| DQN_FILE_SCOPE DqnJson DqnJson_Get             (DqnJson const input, DqnSlice<char> const findProperty); | ||||
| DQN_FILE_SCOPE DqnJson DqnJson_Get             (DqnSlice<char>       const buf, DqnSlice<char>       const findProperty); | ||||
| DQN_FILE_SCOPE DqnJson DqnJson_Get             (DqnSlice<char>       const buf, DqnSlice<char const> const findProperty); | ||||
| DQN_FILE_SCOPE DqnJson DqnJson_Get             (DqnSlice<char const> const buf, DqnSlice<char const> const findProperty); | ||||
| DQN_FILE_SCOPE DqnJson DqnJson_Get             (DqnJson const input, DqnSlice<char const> const findProperty); | ||||
| DQN_FILE_SCOPE DqnJson DqnJson_Get             (DqnJson const input, DqnSlice<char>       const findProperty); | ||||
| 
 | ||||
| // newInput: (Optional) Returns the input advanced to the next array item, can be used again with
 | ||||
| //           function to get next array item.
 | ||||
| @ -6331,6 +6342,26 @@ bool DqnString::InitLiteral(wchar_t const *const cstr, DqnMemAPI *const api) | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| bool DqnString::InitLiteralNoAlloc(char *const cstr, i32 cstrLen) | ||||
| { | ||||
| 	if (!cstr) return false; | ||||
| 
 | ||||
| 	this->str = cstr; | ||||
| 	if (cstrLen == -1) | ||||
| 	{ | ||||
| 		i32 utf8LenInBytes = 0; | ||||
| 		DqnStr_LenUTF8((u32 *)cstr, &utf8LenInBytes); | ||||
| 		this->len = utf8LenInBytes; | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		this->len = cstrLen; | ||||
| 	} | ||||
| 
 | ||||
| 	this->max = this->len; | ||||
| 	return true; | ||||
| } | ||||
| 
 | ||||
| bool DqnString::Expand(i32 newMax) | ||||
| { | ||||
| 	if (newMax < this->max) | ||||
| @ -6765,12 +6796,17 @@ DQN_FILE_SCOPE DqnJson DqnJson_Get(DqnSlice<char> const buf, DqnSlice<char> cons | ||||
| 	return result; | ||||
| } | ||||
| 
 | ||||
| DQN_FILE_SCOPE DqnJson DqnJson_Get(DqnSlice<char> const buf, DqnSlice<char const> findProperty) | ||||
| DQN_FILE_SCOPE DqnJson DqnJson_Get(DqnSlice<char const> const buf, DqnSlice<char const> const findProperty) | ||||
| { | ||||
| 	DqnJson result = DqnJson_Get(buf.data, buf.len, findProperty.data, findProperty.len); | ||||
| 	return result; | ||||
| } | ||||
| 
 | ||||
| DQN_FILE_SCOPE DqnJson DqnJson_Get(DqnSlice<char> const buf, DqnSlice<char const> const findProperty) | ||||
| { | ||||
| 	DqnJson result = DqnJson_Get(buf.data, buf.len, findProperty.data, findProperty.len); | ||||
| 	return result; | ||||
| } | ||||
| 
 | ||||
| DQN_FILE_SCOPE DqnJson DqnJson_Get(DqnJson const input, DqnSlice<char> const findProperty) | ||||
| { | ||||
| @ -6778,13 +6814,12 @@ DQN_FILE_SCOPE DqnJson DqnJson_Get(DqnJson const input, DqnSlice<char> const fin | ||||
| 	return result; | ||||
| } | ||||
| 
 | ||||
| DQN_FILE_SCOPE DqnJson DqnJson_Get(DqnJson const input, DqnSlice<char const> findProperty) | ||||
| DQN_FILE_SCOPE DqnJson DqnJson_Get(DqnJson const input, DqnSlice<char const> const findProperty) | ||||
| { | ||||
| 	DqnJson result = DqnJson_Get(input.value.data, input.value.len, findProperty.data, findProperty.len); | ||||
| 	return result; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| DQN_FILE_SCOPE DqnJson DqnJson_GetNextArrayItem(DqnJson const input, DqnJson *newInput) | ||||
| { | ||||
| 	DqnJson result = {}; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user