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;
187 return comparen(rhs, cMaximumLength);
192 return lhs.compare(rhs) > 0;
197 return lhs.compare(rhs) < 0;
207 return unsafeAt_(0) == 0;
243template <
typename CharType>
254 this->mStringTop =
nullptr;
268 if (pos >= original->getBufferSize() || pos < 0)
270 SEAD_ASSERT_MSG(
false,
"pos(%d) out of bounds[0,%d)", pos, original->getBufferSize());
271 this->mStringTop =
nullptr;
276 this->mStringTop = original->mStringTop + pos;
277 mBufferSize = original->getBufferSize() - pos;
313 return chopMatchedChar(SafeStringBase<CharType>::cLineBreakChar);
329 return convertFromOtherType_(src, src_size);
334 return convertFromOtherType_(src, src_size);
346 return const_cast<CharType*>(
this->mStringTop);
349 template <
typename Other>
354 static s32 formatImpl_(CharType* dst, s32 dst_size,
const CharType* format_string, va_list varg);
360 mutable_ptr->getMutableStringTop_()[getBufferSize() - 1] = 0;
367template <
typename CharType, s32 N>
415static_assert(
sizeof(
SafeString) == 8,
"sead::SafeStringBase<T> size mismatch");
416static_assert(
sizeof(
BufferedSafeString) == 0xC,
"sead::BufferedSafeStringBase<T> size mismatch");
524 string.calcLength() + 1)
531 if (
this->mStringTop)
532 delete[]
this->mStringTop;
568#include <prim/seadSafeString.hpp>
Definition seadSafeString.h:245
CharType * getMutableStringTop_()
Definition seadSafeString.h:344
s32 chopUnprintableAsciiChar()
CharType * getBuffer()
Definition seadSafeString.h:337
s32 append(const SafeStringBase< CharType > &src, s32 append_length=-1)
Definition seadSafeString.hpp:190
BufferedSafeStringBase(CharType *buffer, s32 size)
Definition seadSafeString.h:247
s32 append(CharType src_chr)
Definition seadSafeString.hpp:197
s32 rstrip(const SafeStringBase< CharType > &strip_char_list)
s32 mBufferSize
Definition seadSafeString.h:364
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:286
BufferedSafeStringBase(BufferedSafeStringBase< CharType > *original, s32 pos)
Definition seadSafeString.h:262
s32 convertFromOtherType_(const SafeStringBase< Other > &src, s32 src_size)
void assureTerminationImpl_() const override
Definition seadSafeString.h:357
s32 chopMatchedChar(CharType chop_char)
s32 appendWithFormatV(const CharType *format_string, va_list varg)
s32 rstripUnprintableAsciiChars()
void clear()
Definition seadSafeString.h:322
s32 trim(s32 trim_length)
Definition seadSafeString.hpp:215
s32 chomp()
Definition seadSafeString.h:311
s32 getBufferSize() const
Definition seadSafeString.h:292
s32 copyAt(s32 at, const SafeStringBase< CharType > &src, s32 cpy_length=-1)
Definition seadSafeString.hpp:154
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:327
s32 copy(const SafeStringBase< CharType > &rhs, s32 size=-1)
Definition seadSafeString.hpp:134
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:332
Definition seadSafeString.h:369
FixedSafeStringBase()
Definition seadSafeString.h:371
FixedSafeStringBase< CharType, N > & operator=(const FixedSafeStringBase< CharType, N > &rhs)
Definition seadSafeString.h:393
FixedSafeStringBase< CharType, N > & operator=(const SafeStringBase< CharType > &rhs)
Definition seadSafeString.h:399
FixedSafeStringBase(const SafeStringBase< CharType > &rhs)
Definition seadSafeString.h:377
CharType mBuffer[N]
Definition seadSafeString.h:406
FixedSafeStringBase(const FixedSafeStringBase< CharType, N > &rhs)
Definition seadSafeString.h:383
~FixedSafeStringBase() override
Definition seadSafeString.h:389
Definition seadSafeString.h:421
FixedSafeString()
Definition seadSafeString.h:423
FixedSafeString(const SafeString &rhs)
Definition seadSafeString.h:428
FixedSafeString< N > & operator=(const FixedSafeString< N > &rhs)
Definition seadSafeString.h:440
FixedSafeString< N > & operator=(const SafeString &rhs)
Definition seadSafeString.h:446
Definition seadSafeString.h:513
HeapSafeStringBase< T > & operator=(const HeapSafeStringBase< T > &)
virtual ~HeapSafeStringBase()
Definition seadSafeString.h:529
HeapSafeStringBase(const HeapSafeStringBase< T > &)
HeapSafeStringBase(Heap *heap, const SafeStringBase< T > &string, s32 size)
Definition seadSafeString.h:515
HeapSafeStringBase(Heap *heap, const SafeStringBase< T > &string)
Definition seadSafeString.h:522
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
token_iterator & operator++()
s32 get(BufferedSafeStringBase< CharType > *out) const
s32 getAndForward(BufferedSafeStringBase< CharType > *out)
token_iterator & operator--()
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:190
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:222
s32 rfindIndex(const SafeStringBase< CharType > &token) const
bool include(const SafeStringBase< CharType > &str) const
bool isEqual(const SafeStringBase< CharType > &rhs) const
Definition seadSafeString.hpp:64
const SafeStringBase< CharType > getPart(s32 at) const
Definition seadSafeString.hpp:50
bool isEmpty() const
Definition seadSafeString.h:205
const CharType & at(s32 idx) const
Definition seadSafeString.hpp:10
friend bool operator<(const SafeStringBase< CharType > &lhs, const SafeStringBase< CharType > &rhs)
Definition seadSafeString.h:195
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:85
const CharType & unsafeAt_(s32 idx) const
Definition seadSafeString.h:211
friend bool operator!=(const SafeStringBase< CharType > &lhs, const SafeStringBase< CharType > &rhs)
Definition seadSafeString.h:178
friend bool operator==(const SafeStringBase< CharType > &lhs, const SafeStringBase< CharType > &rhs)
Definition seadSafeString.h:173
virtual void assureTerminationImpl_() const
Definition seadSafeString.h:217
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
s32 findIndex(const SafeStringBase< CharType > &token) const
Definition seadSafeString.hpp:120
const CharType * cstr() const
Definition seadSafeString.h:153
static const s32 cMaximumLength
Definition seadSafeString.h:21
bool include(const CharType &c) const
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:185
Definition seadSafeString.h:455
WFixedSafeString(const WSafeString &rhs)
Definition seadSafeString.h:462
WFixedSafeString()
Definition seadSafeString.h:457
WFixedSafeString< N > & operator=(const WSafeString &rhs)
Definition seadSafeString.h:480
WFixedSafeString< N > & operator=(const WFixedSafeString< N > &rhs)
Definition seadSafeString.h:474
Definition seadAssert.h:44
SafeStringBase< char16 > WSafeString
Definition seadSafeString.h:410
HeapSafeStringBase< char > HeapSafeString
Definition seadSafeString.h:540
HeapSafeStringBase< char16 > WHeapSafeString
Definition seadSafeString.h:541
SafeStringBase< char > SafeString
Definition seadSafeString.h:409
BufferedSafeStringBase< char > BufferedSafeString
Definition seadSafeString.h:411
BufferedSafeStringBase< char16 > WBufferedSafeString
Definition seadSafeString.h:412
#define SEAD_ASSERT_MSG(condition, format,...)
Definition seadAssert.h:33