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