1#ifndef SEAD_SAFE_STRING_H_
2#define SEAD_SAFE_STRING_H_
6#include <basis/seadAssert.h>
7#include <basis/seadTypes.h>
11template <
typename CharType>
14template <
typename CharType>
77 return a.mString == b.mString && a.mIndex == b.mIndex;
87 return mString->at(mIndex);
138 return iterator(
this, calcLength() + 1);
149 return token_iterator(
this, calcLength() + 1, delimiter);
159 inline const CharType&
at(s32 idx)
const;
179 return findIndex(str) != -1;
198 return comparen(rhs, cMaximumLength);
203 return lhs.compare(rhs) > 0;
208 return lhs.compare(rhs) < 0;
218 return unsafeAt_(0) == 0;
254template <
typename CharType>
265 this->mStringTop =
nullptr;
279 if (pos >= original->getBufferSize() || pos < 0)
281 SEAD_ASSERT_MSG(
false,
"pos(%d) out of bounds[0,%d)", pos, original->getBufferSize());
282 this->mStringTop =
nullptr;
287 this->mStringTop = original->mStringTop + pos;
288 mBufferSize = original->getBufferSize() - pos;
324 return chopMatchedChar(SafeStringBase<CharType>::cLineBreakChar);
340 return convertFromOtherType_(src, src_size);
345 return convertFromOtherType_(src, src_size);
357 return const_cast<CharType*>(
this->mStringTop);
360 template <
typename Other>
365 static s32 formatImpl_(CharType* dst, s32 dst_size,
const CharType* format_string, va_list varg);
371 mutable_ptr->getMutableStringTop_()[getBufferSize() - 1] = 0;
378template <
typename CharType, s32 N>
426static_assert(
sizeof(
SafeString) == 8,
"sead::SafeStringBase<T> size mismatch");
427static_assert(
sizeof(
BufferedSafeString) == 0xC,
"sead::BufferedSafeStringBase<T> size mismatch");
539 string.calcLength() + 1)
546 if (
this->mStringTop)
547 delete[]
this->mStringTop;
583#include <prim/seadSafeString.hpp>
Definition seadSafeString.h:256
CharType * getMutableStringTop_()
Definition seadSafeString.h:355
s32 chopUnprintableAsciiChar()
CharType * getBuffer()
Definition seadSafeString.h:348
s32 append(const SafeStringBase< CharType > &src, s32 append_length=-1)
Definition seadSafeString.hpp:289
BufferedSafeStringBase(CharType *buffer, s32 size)
Definition seadSafeString.h:258
s32 append(CharType src_chr)
Definition seadSafeString.hpp:296
s32 rstrip(const SafeStringBase< CharType > &strip_char_list)
s32 mBufferSize
Definition seadSafeString.h:375
static s32 formatImpl_(CharType *dst, s32 dst_size, const CharType *format_string, va_list varg)
s32 appendWithFormat(const CharType *format_string,...)
~BufferedSafeStringBase() override
Definition seadSafeString.h:297
BufferedSafeStringBase(BufferedSafeStringBase< CharType > *original, s32 pos)
Definition seadSafeString.h:273
s32 convertFromOtherType_(const SafeStringBase< Other > &src, s32 src_size)
void assureTerminationImpl_() const override
Definition seadSafeString.h:368
s32 chopMatchedChar(CharType chop_char)
s32 appendWithFormatV(const CharType *format_string, va_list varg)
s32 rstripUnprintableAsciiChars()
void clear()
Definition seadSafeString.h:333
s32 trim(s32 trim_length)
Definition seadSafeString.hpp:314
s32 chomp()
Definition seadSafeString.h:322
s32 getBufferSize() const
Definition seadSafeString.h:303
s32 copyAt(s32 at, const SafeStringBase< CharType > &src, s32 cpy_length=-1)
Definition seadSafeString.hpp:253
s32 formatV(const CharType *format_string, va_list varg)
s32 chopMatchedChar(const SafeStringBase< CharType > &chop_char_list)
s32 format(const CharType *format_string,...)
s32 convertFromMultiByteString(const SafeStringBase< CharType > &src, s32 src_size=-1)
Definition seadSafeString.h:338
s32 copy(const SafeStringBase< CharType > &rhs, s32 size=-1)
Definition seadSafeString.hpp:233
const CharType & operator[](s32 idx) const
bool isUnprintableChar_(CharType c) const
s32 trimMatchedString(const SafeStringBase< CharType > &trim_string)
BufferedSafeStringBase< CharType > & operator=(const BufferedSafeStringBase< CharType > &)
BufferedSafeStringBase(const BufferedSafeStringBase< CharType > &)
s32 convertFromWideCharString(const SafeStringBase< char16 > &src, s32 src_size=-1)
Definition seadSafeString.h:343
Definition seadSafeString.h:380
FixedSafeStringBase()
Definition seadSafeString.h:382
FixedSafeStringBase< CharType, N > & operator=(const FixedSafeStringBase< CharType, N > &rhs)
Definition seadSafeString.h:404
FixedSafeStringBase< CharType, N > & operator=(const SafeStringBase< CharType > &rhs)
Definition seadSafeString.h:410
FixedSafeStringBase(const SafeStringBase< CharType > &rhs)
Definition seadSafeString.h:388
CharType mBuffer[N]
Definition seadSafeString.h:417
FixedSafeStringBase(const FixedSafeStringBase< CharType, N > &rhs)
Definition seadSafeString.h:394
~FixedSafeStringBase() override
Definition seadSafeString.h:400
Definition seadSafeString.h:432
FixedSafeString()
Definition seadSafeString.h:434
FixedSafeString(const SafeString &rhs)
Definition seadSafeString.h:439
FixedSafeString< N > & operator=(const FixedSafeString< N > &rhs)
Definition seadSafeString.h:453
FixedSafeString< N > & operator=(const SafeString &rhs)
Definition seadSafeString.h:459
Definition seadSafeString.h:528
HeapSafeStringBase< T > & operator=(const HeapSafeStringBase< T > &)
virtual ~HeapSafeStringBase()
Definition seadSafeString.h:544
HeapSafeStringBase(const HeapSafeStringBase< T > &)
HeapSafeStringBase(Heap *heap, const SafeStringBase< T > &string, s32 size)
Definition seadSafeString.h:530
HeapSafeStringBase(Heap *heap, const SafeStringBase< T > &string)
Definition seadSafeString.h:537
Definition seadSafeString.h:44
const SafeStringBase * mString
Definition seadSafeString.h:96
iterator(const SafeStringBase< CharType > *str)
Definition seadSafeString.h:46
iterator & operator++()
Definition seadSafeString.h:63
s32 mIndex
Definition seadSafeString.h:97
s32 getIndex() const
Definition seadSafeString.h:90
virtual ~iterator()
Definition seadSafeString.h:58
friend bool operator==(const iterator &a, const iterator &b)
Definition seadSafeString.h:75
iterator & operator--()
Definition seadSafeString.h:69
iterator(const SafeStringBase< CharType > *str, s32 idx)
Definition seadSafeString.h:52
friend bool operator!=(const iterator &a_, const iterator &b_)
Definition seadSafeString.h:80
const CharType & operator*() const
Definition seadSafeString.h:85
Definition seadSafeString.h:101
token_iterator(const SafeStringBase *str, s32 idx, const SafeStringBase &delimiter)
Definition seadSafeString.h:109
s32 get(BufferedSafeStringBase< CharType > *out) const
Definition seadSafeString.hpp:193
s32 getAndForward(BufferedSafeStringBase< CharType > *out)
Definition seadSafeString.hpp:203
token_iterator & operator--()
token_iterator & operator++()
Definition seadSafeString.hpp:169
virtual ~token_iterator()
Definition seadSafeString.h:115
SafeStringBase mDelimiter
Definition seadSafeString.h:127
token_iterator(const SafeStringBase *str, const SafeStringBase &delimiter)
Definition seadSafeString.h:103
Definition seadSafeString.h:16
friend bool operator>(const SafeStringBase< CharType > &lhs, const SafeStringBase< CharType > &rhs)
Definition seadSafeString.h:201
static const CharType cLineBreakChar
Definition seadSafeString.h:19
virtual ~SafeStringBase()
Definition seadSafeString.h:38
token_iterator tokenBegin(const SafeStringBase< CharType > &delimiter) const
Definition seadSafeString.h:142
SafeStringBase()
Definition seadSafeString.h:24
iterator findIterator(const SafeStringBase< CharType > &token) const
iterator end() const
Definition seadSafeString.h:136
static const SafeStringBase< CharType > cEmptyString
Definition seadSafeString.h:20
iterator rfindIterator(const SafeStringBase< CharType > &token) const
SafeStringBase(const SafeStringBase &other)=default
const CharType * mStringTop
Definition seadSafeString.h:233
s32 rfindIndex(const SafeStringBase< CharType > &token) const
Definition seadSafeString.hpp:152
bool include(const SafeStringBase< CharType > &str) const
Definition seadSafeString.h:177
bool isEqual(const SafeStringBase< CharType > &rhs) const
Definition seadSafeString.hpp:82
const SafeStringBase< CharType > getPart(s32 at) const
Definition seadSafeString.hpp:50
bool isEmpty() const
Definition seadSafeString.h:216
const CharType & at(s32 idx) const
Definition seadSafeString.hpp:10
friend bool operator<(const SafeStringBase< CharType > &lhs, const SafeStringBase< CharType > &rhs)
Definition seadSafeString.h:206
token_iterator tokenEnd(const SafeStringBase< CharType > &delimiter=SafeStringBase< CharType >()) const
Definition seadSafeString.h:147
SafeStringBase & operator=(const SafeStringBase &other)=default
s32 comparen(const SafeStringBase< CharType > &rhs, s32 n) const
Definition seadSafeString.hpp:103
const CharType & unsafeAt_(s32 idx) const
Definition seadSafeString.h:222
friend bool operator!=(const SafeStringBase< CharType > &lhs, const SafeStringBase< CharType > &rhs)
Definition seadSafeString.h:189
friend bool operator==(const SafeStringBase< CharType > &lhs, const SafeStringBase< CharType > &rhs)
Definition seadSafeString.h:184
virtual void assureTerminationImpl_() const
Definition seadSafeString.h:228
const CharType & operator[](s32 idx) const
Definition seadSafeString.h:161
SafeStringBase(const CharType *str)
Definition seadSafeString.h:29
iterator begin() const
Definition seadSafeString.h:131
const SafeStringBase< CharType > getPart(const iterator &it) const
Definition seadSafeString.h:170
s32 findIndex(const SafeStringBase< CharType > &token) const
Definition seadSafeString.hpp:138
const CharType * cstr() const
Definition seadSafeString.h:153
static const s32 cMaximumLength
Definition seadSafeString.h:21
bool include(const CharType &c) const
Definition seadSafeString.hpp:64
s32 calcLength() const
Definition seadSafeString.hpp:24
static const CharType cNullChar
Definition seadSafeString.h:18
s32 compare(const SafeStringBase< CharType > &rhs) const
Definition seadSafeString.h:196
Definition seadSafeString.h:468
WFixedSafeString(const WSafeString &rhs)
Definition seadSafeString.h:475
WFixedSafeString()
Definition seadSafeString.h:470
WFixedSafeString< N > & operator=(const WSafeString &rhs)
Definition seadSafeString.h:495
WFixedSafeString< N > & operator=(const WFixedSafeString< N > &rhs)
Definition seadSafeString.h:489
Definition seadAssert.h:44
SafeStringBase< char16 > WSafeString
Definition seadSafeString.h:421
HeapSafeStringBase< char > HeapSafeString
Definition seadSafeString.h:555
HeapSafeStringBase< char16 > WHeapSafeString
Definition seadSafeString.h:556
SafeStringBase< char > SafeString
Definition seadSafeString.h:420
BufferedSafeStringBase< char > BufferedSafeString
Definition seadSafeString.h:422
BufferedSafeStringBase< char16 > WBufferedSafeString
Definition seadSafeString.h:423
#define SEAD_ASSERT_MSG(condition, format,...)
Definition seadAssert.h:33