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…
Reference in New Issue
Block a user