Compact operator overloads for FixedString
This commit is contained in:
		
							parent
							
								
									056c0b3aea
								
							
						
					
					
						commit
						d740efdf06
					
				
							
								
								
									
										59
									
								
								dqn.h
									
									
									
									
									
								
							
							
						
						
									
										59
									
								
								dqn.h
									
									
									
									
									
								
							| @ -2011,10 +2011,19 @@ struct DqnSmartString : public DqnString | ||||
|     ~DqnSmartString() { this->Free(); } | ||||
| }; | ||||
| 
 | ||||
| DQN_FILE_SCOPE DqnString DqnString_(DqnMemAPI   *const api = DQN_DEFAULT_HEAP_ALLOCATOR); | ||||
| DQN_FILE_SCOPE DqnString DqnString_(DqnMemStack *const stack); | ||||
| 
 | ||||
| // NOTE: First level of indirection needs to turn the combined dqnstring_(guid) into a name. Otherwise
 | ||||
| //       each use of literalVarName will increment __COUNTER__
 | ||||
| #define DQN_STRING_LITERAL_INTERNAL(srcVariable, literal, literalVarName)                          \ | ||||
|     {};                                                                                            \ | ||||
|     char literalVarName[] = literal;                                                               \ | ||||
|     srcVariable.InitLiteralNoAlloc(literalVarName, DQN_CHAR_COUNT(literalVarName)) | ||||
| 
 | ||||
| // #DqnFixedString Public API - Fixed sized strings at compile time
 | ||||
| // =================================================================================================
 | ||||
| int DqnFixedString__Append(char *dest, int destSize, char const *src, int len = -1); | ||||
| FILE_SCOPE int DqnFixedString__Append(char *dest, int destSize, char const *src, int len = -1); | ||||
| 
 | ||||
| template <unsigned int MAX> | ||||
| struct DqnFixedString | ||||
| @ -2033,10 +2042,10 @@ struct DqnFixedString | ||||
|     DqnFixedString &operator+=(DqnSlice<char> const &other)       { this->len = DqnFixedString__Append(this->str + this->len, MAX - this->len, other.data, other.len); return *this; } | ||||
|     DqnFixedString &operator+=(DqnFixedString const &other)       { this->len = DqnFixedString__Append(this->str + this->len, MAX - this->len, other.str, other.len); return *this; } | ||||
| 
 | ||||
|     DqnFixedString  operator+ (char const *other); | ||||
|     DqnFixedString  operator+ (DqnSlice<char const> const &other); | ||||
|     DqnFixedString  operator+ (DqnSlice<char> const &other); | ||||
|     DqnFixedString  operator+ (DqnFixedString const &other); | ||||
|     DqnFixedString  operator+ (char const *other)                 { DqnFixedString result = *this; result.len += DqnFixedString__Append(result.str + result.len, MAX - result.len, other); return result; } | ||||
|     DqnFixedString  operator+ (DqnSlice<char const> const &other) { DqnFixedString result = *this; result.len += DqnFixedString__Append(result.str + result.len, MAX - result.len, other.data, other.len); return result; } | ||||
|     DqnFixedString  operator+ (DqnSlice<char> const &other)       { DqnFixedString result = *this; result.len += DqnFixedString__Append(result.str + result.len, MAX - result.len, other.data, other.len); return result; } | ||||
|     DqnFixedString  operator+ (DqnFixedString const &other)       { DqnFixedString result = *this; result.len += DqnFixedString__Append(result.str + result.len, MAX - result.len, other.str, other.len); return result; } | ||||
| 
 | ||||
|     // Xprintf functions always modifies buffer and null-terminates even with insufficient buffer size.
 | ||||
|     // Asserts on failure if DQN_ASSERT is defined.
 | ||||
| @ -2050,33 +2059,6 @@ struct DqnFixedString | ||||
|     void Clear         (Dqn::ZeroClear clear = Dqn::ZeroClear::False) { if (clear == Dqn::ZeroClear::True) DqnMem_Set(str, 0, MAX); this = {}; } | ||||
| }; | ||||
| 
 | ||||
| template <unsigned int MAX> | ||||
| DqnFixedString<MAX> DqnFixedString<MAX>::operator+(char const *other) | ||||
| { | ||||
|     DqnFixedString result = {}; | ||||
|     result.len += DqnFixedString__Append(result.str + result.len, MAX - result.len, this->str, this->len); | ||||
|     result.len += DqnFixedString__Append(result.str + result.len, MAX - result.len, other); | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| template <unsigned int MAX> | ||||
| DqnFixedString<MAX> DqnFixedString<MAX>::operator+(DqnSlice<char const> const &other) | ||||
| { | ||||
|     DqnFixedString result = {}; | ||||
|     result.len += DqnFixedString__Append(result.str + result.len, MAX - result.len, this->str, this->len); | ||||
|     result.len += DqnFixedString__Append(result.str + result.len, MAX - result.len, other.data, other.len); | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| template <unsigned int MAX> | ||||
| DqnFixedString<MAX> DqnFixedString<MAX>::operator+(DqnFixedString const &other) | ||||
| { | ||||
|     DqnFixedString result = {}; | ||||
|     result.len += DqnFixedString__Append(result.str + result.len, MAX - result.len, this->str, this->len); | ||||
|     result.len += DqnFixedString__Append(result.str + result.len, MAX - result.len, other.str, other.len); | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| template <unsigned int MAX> | ||||
| FILE_SCOPE bool | ||||
| DqnFixedString__VSprintf(DqnFixedString<MAX> *me, char const *fmt, va_list argList, int bufOffset) | ||||
| @ -2137,17 +2119,6 @@ bool DqnFixedString<MAX>::SprintfAppend(char const *fmt, ...) | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| DQN_FILE_SCOPE DqnString DqnString_(DqnMemAPI   *const api = DQN_DEFAULT_HEAP_ALLOCATOR); | ||||
| DQN_FILE_SCOPE DqnString DqnString_(DqnMemStack *const stack); | ||||
| 
 | ||||
| // NOTE: First level of indirection needs to turn the combined dqnstring_(guid) into a name. Otherwise
 | ||||
| //       each use of literalVarName will increment __COUNTER__
 | ||||
| #define DQN_STRING_LITERAL_INTERNAL(srcVariable, literal, literalVarName)                          \ | ||||
|     {};                                                                                            \ | ||||
|     char literalVarName[] = literal;                                                               \ | ||||
|     srcVariable.InitLiteralNoAlloc(literalVarName, DQN_CHAR_COUNT(literalVarName)) | ||||
| 
 | ||||
| // TODO(doyle): Load factor
 | ||||
| // #DqnHashTable API
 | ||||
| // =================================================================================================
 | ||||
| @ -6465,7 +6436,7 @@ wchar_t *DqnString::ToWChar(DqnMemAPI *api) const | ||||
| // #DqnFixedString Implementation
 | ||||
| // =================================================================================================
 | ||||
| // return: The number of bytes written to dest
 | ||||
| int DqnFixedString__Append(char *dest, int destSize, char const *src, int len) | ||||
| FILE_SCOPE int DqnFixedString__Append(char *dest, int destSize, char const *src, int len) | ||||
| { | ||||
|     if (len <= -1) | ||||
|     { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user