80 static constexpr size_t kInlineBufferSize = OPTIONS::kInlineBufferSize;
83 using BufferElementType =
typename OPTIONS::BufferElementType;
92 template <IUNICODECanUnambiguouslyConvertFrom CHAR_T>
97 template <convertible_to<String> T>
115 template <IUNICODECanUnambiguouslyConvertFrom CHAR_T>
116 nonvirtual
void Append (span<const CHAR_T> s);
117 template <IUNICODECanUnambiguouslyConvertFrom CHAR_T>
118 nonvirtual
void Append (span<CHAR_T> s);
119 template <IUNICODECanUnambiguouslyConvertFrom CHAR_T>
120 nonvirtual
void Append (
const CHAR_T* s);
121 template <IStdBasicStringCompatibleCharacter CHAR_T>
122 nonvirtual
void Append (
const basic_string<CHAR_T>& s)
124 template <IStdBasicStringCompatibleCharacter CHAR_T>
125 nonvirtual
void Append (
const basic_string_view<CHAR_T>& s)
127 nonvirtual
void Append (
const String& s);
128 template <IUNICODECanUnambiguouslyConvertFrom CHAR_T>
129 nonvirtual
void Append (CHAR_T c);
136 template <
typename APPEND_ARG_T>
137 nonvirtual
auto operator+= (APPEND_ARG_T&& a)
139 #
if qCompilerAndStdLib_template_Requires_templateDeclarationMatchesOutOfLine_Buggy
141 if constexpr (
requires (
StringBuilder& s, APPEND_ARG_T&& a) { s.
Append (forward<APPEND_ARG_T> (a)); }) {
142 Append (forward<APPEND_ARG_T> (a));
145 Append (Characters::UnoverloadedToString (forward<APPEND_ARG_T> (a)));
153#if qCompiler_IUseToStringFormatterForFormatter_Buggy
156 Characters::String
ToString ()
const
166 template <
typename APPEND_ARG_T>
168 operator<< (APPEND_ARG_T&& a)
169 ->
StringBuilder&
requires (Characters::Private_::IToString<APPEND_ARG_T> or
requires (
StringBuilder& s, APPEND_ARG_T&& a) { s.
Append (forward<APPEND_ARG_T> (a)); })
170#
if qCompilerAndStdLib_template_Requires_templateDeclarationMatchesOutOfLine_Buggy
172 if constexpr (
requires (
StringBuilder& s, APPEND_ARG_T&& a) { s.
Append (forward<APPEND_ARG_T> (a)); }) {
173 Append (forward<APPEND_ARG_T> (a));
176 Append (Characters::UnoverloadedToString (forward<APPEND_ARG_T> (a)));
188 nonvirtual
void push_back (Character c);
194 nonvirtual
size_t size () const noexcept;
200 nonvirtual
bool empty () const noexcept;
206 nonvirtual Character GetAt (
size_t index) const noexcept;
212 nonvirtual
void SetAt (Character item,
size_t index) noexcept;
222 nonvirtual const Character operator[] (
size_t i) const noexcept;
228 template <Common::IAnyOf<
char, Character, String, span<const Character>, span<Character>> T>
229 nonvirtual
void InsertAt (T c,
size_t at);
235 nonvirtual
void ShrinkTo (
size_t sz) noexcept;
246 template <Common::IAnyOf<
String, wstring, u8string, u16string, u32string> RESULT_T>
247 nonvirtual RESULT_T As () const;
255 nonvirtual operator
String () const;
256 nonvirtual explicit operator wstring () const;
257 nonvirtual explicit operator u8string () const;
258 nonvirtual explicit operator u16string () const;
259 nonvirtual explicit operator u32string () const;
261 nonvirtual explicit operator span<const BufferElementType> () const;
266 nonvirtual
void clear () noexcept;
272 nonvirtual
String str () const;
280 nonvirtual
size_t length () const noexcept;
287 nonvirtual span<BufferElementType> data ();
288 nonvirtual span<const BufferElementType> data () const;
326 nonvirtual span<const CHAR_T> GetData (Memory::StackBuffer<CHAR_T>* probablyIgnoredBuf) const
327 requires (not is_const_v<CHAR_T>);
331 bool operator== (const
String& rhs) const;
337 void erase (
size_t from);
338 void erase (
size_t from,
size_t count);
341 [[deprecated ("Since Stroika v3.0d1, use span{} argument
")]] StringBuilder (const wchar_t* start, const wchar_t* end)
343 Append (span{start, end});
345 [[deprecated ("Since Stroika v3.0d1, use span{} argument
")]] void Append (const char16_t* s, const char16_t* e)
349 [[deprecated ("Since Stroika v3.0d1, use span{} argument
")]] void Append (const char32_t* s, const char32_t* e)
353 [[deprecated ("Since Stroika v3.0d1, use span{} argument
")]] void Append (const wchar_t* s, const wchar_t* e)
357 [[deprecated ("Since Stroika v3.0d1, use span{} argument
")]] void Append (const Character* s, const Character* e)
361 template <typename RESULT_T>
362 [[deprecated ("Since Stroika v3.0d2 - use As/0
")]] void As (RESULT_T* into) const
363 requires (same_as<RESULT_T, String> or same_as<RESULT_T, wstring>)
365 RequireNotNull (into);
366 if constexpr (same_as<RESULT_T, String>) {
369 if constexpr (same_as<RESULT_T, wstring>) {
370 *into = str ().template As<wstring> ();
375 [[no_unique_address]] Debug::AssertExternallySynchronizedMutex fAssertExternallySyncrhonized_;
378 Memory::InlineBuffer<BufferElementType, kInlineBufferSize> fData_{}; // not nul-terminated