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(); } |     ~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
 | // #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> | template <unsigned int MAX> | ||||||
| struct DqnFixedString | 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+=(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+=(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+ (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  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  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  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.
 |     // Xprintf functions always modifies buffer and null-terminates even with insufficient buffer size.
 | ||||||
|     // Asserts on failure if DQN_ASSERT is defined.
 |     // 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 = {}; } |     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> | template <unsigned int MAX> | ||||||
| FILE_SCOPE bool | FILE_SCOPE bool | ||||||
| DqnFixedString__VSprintf(DqnFixedString<MAX> *me, char const *fmt, va_list argList, int bufOffset) | 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; |     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
 | // TODO(doyle): Load factor
 | ||||||
| // #DqnHashTable API
 | // #DqnHashTable API
 | ||||||
| // =================================================================================================
 | // =================================================================================================
 | ||||||
| @ -6465,7 +6436,7 @@ wchar_t *DqnString::ToWChar(DqnMemAPI *api) const | |||||||
| // #DqnFixedString Implementation
 | // #DqnFixedString Implementation
 | ||||||
| // =================================================================================================
 | // =================================================================================================
 | ||||||
| // return: The number of bytes written to dest
 | // 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) |     if (len <= -1) | ||||||
|     { |     { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user