78 static constexpr size_t kInlineBufferSize = OPTIONS::kInlineBufferSize;
81 using BufferElementType =
typename OPTIONS::BufferElementType;
90 template <IUNICODECanUnambiguouslyConvertFrom CHAR_T>
95 template <convertible_to<String> T>
113 template <IUNICODECanUnambiguouslyConvertFrom CHAR_T>
114 nonvirtual
void Append (span<const CHAR_T> s);
115 template <IUNICODECanUnambiguouslyConvertFrom CHAR_T>
116 nonvirtual
void Append (span<CHAR_T> s);
117 template <IUNICODECanUnambiguouslyConvertFrom CHAR_T>
118 nonvirtual
void Append (
const CHAR_T* s);
119 template <IStdBasicStringCompatibleCharacter CHAR_T>
120 nonvirtual
void Append (
const basic_string<CHAR_T>& s)
122 template <IStdBasicStringCompatibleCharacter CHAR_T>
123 nonvirtual
void Append (
const basic_string_view<CHAR_T>& s)
125 nonvirtual
void Append (
const String& s);
126 template <IUNICODECanUnambiguouslyConvertFrom CHAR_T>
127 nonvirtual
void Append (CHAR_T c);
134 template <
typename APPEND_ARG_T>
135 nonvirtual
auto operator+= (APPEND_ARG_T&& a)
137 #
if qCompilerAndStdLib_template_Requires_templateDeclarationMatchesOutOfLine_Buggy
139 if constexpr (
requires (
StringBuilder& s, APPEND_ARG_T&& a) { s.
Append (forward<APPEND_ARG_T> (a)); }) {
140 Append (forward<APPEND_ARG_T> (a));
143 Append (Characters::UnoverloadedToString (forward<APPEND_ARG_T> (a)));
151#if qCompiler_IUseToStringFormatterForFormatter_Buggy
154 Characters::String
ToString ()
const
164 template <
typename APPEND_ARG_T>
166 operator<< (APPEND_ARG_T&& a)
167 ->
StringBuilder&
requires (Characters::Private_::IToString<APPEND_ARG_T> or
requires (
StringBuilder& s, APPEND_ARG_T&& a) { s.
Append (forward<APPEND_ARG_T> (a)); })
168#
if qCompilerAndStdLib_template_Requires_templateDeclarationMatchesOutOfLine_Buggy
170 if constexpr (
requires (
StringBuilder& s, APPEND_ARG_T&& a) { s.
Append (forward<APPEND_ARG_T> (a)); }) {
171 Append (forward<APPEND_ARG_T> (a));
174 Append (Characters::UnoverloadedToString (forward<APPEND_ARG_T> (a)));
186 nonvirtual
void push_back (Character c);
192 nonvirtual
size_t size () const noexcept;
198 nonvirtual
bool empty () const noexcept;
204 nonvirtual Character GetAt (
size_t index) const noexcept;
210 nonvirtual
void SetAt (Character item,
size_t index) noexcept;
220 nonvirtual const Character operator[] (
size_t i) const noexcept;
226 template <Common::IAnyOf<
char, Character, String, span<const Character>, span<Character>> T>
227 nonvirtual
void InsertAt (T c,
size_t at);
233 nonvirtual
void ShrinkTo (
size_t sz) noexcept;
244 template <Common::IAnyOf<
String, wstring, u8string, u16string, u32string> RESULT_T>
245 nonvirtual RESULT_T As () const;
253 nonvirtual operator
String () const;
254 nonvirtual explicit operator wstring () const;
255 nonvirtual explicit operator u8string () const;
256 nonvirtual explicit operator u16string () const;
257 nonvirtual explicit operator u32string () const;
259 nonvirtual explicit operator span<const BufferElementType> () const;
264 nonvirtual
void clear () noexcept;
270 nonvirtual
String str () const;
278 nonvirtual
size_t length () const noexcept;
285 nonvirtual span<BufferElementType> data ();
286 nonvirtual span<const BufferElementType> data () const;
324 nonvirtual span<const CHAR_T> GetData (Memory::StackBuffer<CHAR_T>* probablyIgnoredBuf) const
325 requires (not is_const_v<CHAR_T>);
329 bool operator== (const
String& rhs) const;
335 void erase (
size_t from);
336 void erase (
size_t from,
size_t count);
339 [[deprecated ("Since Stroika v3.0d1, use span{} argument
")]] StringBuilder (const wchar_t* start, const wchar_t* end)
341 Append (span{start, end});
343 [[deprecated ("Since Stroika v3.0d1, use span{} argument
")]] void Append (const char16_t* s, const char16_t* e)
347 [[deprecated ("Since Stroika v3.0d1, use span{} argument
")]] void Append (const char32_t* s, const char32_t* e)
351 [[deprecated ("Since Stroika v3.0d1, use span{} argument
")]] void Append (const wchar_t* s, const wchar_t* e)
355 [[deprecated ("Since Stroika v3.0d1, use span{} argument
")]] void Append (const Character* s, const Character* e)
359 template <typename RESULT_T>
360 [[deprecated ("Since Stroika v3.0d2 - use As/0
")]] void As (RESULT_T* into) const
361 requires (same_as<RESULT_T, String> or same_as<RESULT_T, wstring>)
363 RequireNotNull (into);
364 if constexpr (same_as<RESULT_T, String>) {
367 if constexpr (same_as<RESULT_T, wstring>) {
368 *into = str ().template As<wstring> ();
373 [[no_unique_address]] Debug::AssertExternallySynchronizedMutex fAssertExternallySyncrhonized_;
376 Memory::InlineBuffer<BufferElementType, kInlineBufferSize> fData_{}; // not nul-terminated