UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
StringBuilder.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/StringFwd.h" // IWYU pragma: export
7#include "CoreTypes.h"
9#include "HAL/UnrealMemory.h"
11#include "Misc/CString.h"
12#include "Templates/EnableIf.h"
15#include "Templates/Requires.h"
20#include "Traits/IsCharType.h"
22
23#include <iterator>
24#include <type_traits>
25
26template <typename T> struct TIsContiguousContainer;
27
28namespace UE::Core::Private
29{
30
32{
33 explicit FDynamicStringBuilderToken() = default;
34 template <typename CharType> friend class ::TStringBuilderBase;
35 template <typename CharType, int32 BufferSize> friend class ::TStringBuilderWithBuffer;
36};
37
39{
40 explicit FExternalStringBuilderToken() = default;
41 template <typename CharType> friend class ::TExternalStringBuilder;
42};
43
44} // UE::Core::Private
45
77template <typename CharType>
79{
80public:
82 using ElementType = CharType;
87
88 TStringBuilderBase() = default;
90
93
96
98 {
99 Reset();
100 return Append(Str);
101 }
102
103 TStringBuilderBase& operator=(const CharType* Str)
104 {
105 return *this = ViewType(Str);
106 }
107
108 UE_DEPRECATED(5.7, "Use TStringBuilder<N> or T[CharType]StringBuilder<N> or TExternalStringBuilder<CharType>.")
113
114 inline int32 Len() const
115 {
116 return int32(CurPos - Base);
117 }
118
120 inline CharType* GetData() UE_LIFETIMEBOUND
121 {
122 return Base;
123 }
124
125 inline const CharType* GetData() const UE_LIFETIMEBOUND
126 {
127 return Base;
128 }
129
135 inline const CharType* ToString() UE_LIFETIMEBOUND
136 {
138 return Base;
139 }
140
142 UE_DEPRECATED(5.6, "Call the non-const operator*().")
143 inline const CharType* ToString() const UE_LIFETIMEBOUND
144 {
145 const_cast<TStringBuilderBase*>(this)->EnsureNulTerminated();
146 return Base;
147 }
148
150 inline const CharType* operator*() UE_LIFETIMEBOUND
151 {
153 return Base;
154 }
155
157 UE_DEPRECATED(5.6, "Call the non-const operator*().")
158 inline const CharType* operator*() const UE_LIFETIMEBOUND
159 {
160 const_cast<TStringBuilderBase*>(this)->EnsureNulTerminated();
161 return Base;
162 }
163
166 {
167 return ViewType(Base, Len());
168 }
169
171 inline CharType LastChar() const
172 {
173 return *(CurPos - 1);
174 }
175
183 {
184 return bIsDynamic ? (End - Base) * sizeof(CharType) : 0;
185 }
186
190 inline void Reset()
191 {
192 CurPos = Base;
193 }
194
203 {
205 const int32 OldCount = Len();
206 CurPos += InCount;
207 return OldCount;
208 }
209
218 {
220 const int32 CurrentCapacity = (int32)(End - Base);
222 {
224 }
225 }
226
231 {
232 check(InCount <= Len());
233 CurPos -= InCount;
234 }
235
236 template <typename OtherCharType,
237 std::enable_if_t<TIsCharType<OtherCharType>::Value>* = nullptr>
238 inline BuilderType& Append(const OtherCharType* const String, const int32 Length)
239 {
240 int32 ConvertedLength = FPlatformString::ConvertedLength<CharType>(String, Length);
241 EnsureAdditionalCapacity(ConvertedLength);
242 if (Length)
243 {
244 CurPos = FPlatformString::Convert(CurPos, ConvertedLength, String, Length);
245 }
246 return *this;
247 }
248
249 template <typename CharRangeType>
250 inline auto Append(CharRangeType&& Range) -> decltype(Append(MakeStringView(Forward<CharRangeType>(Range)).GetData(), int32(0)))
251 {
253 return Append(View.GetData(), View.Len());
254 }
255
256 template <
257 typename AppendedCharType,
258 std::enable_if_t<TIsCharType<AppendedCharType>::Value>* = nullptr
259 >
261 {
263 {
265 *CurPos++ = (CharType)Char;
266 }
267 else
268 {
269 int32 ConvertedLength = FPlatformString::ConvertedLength<CharType>(&Char, 1);
270 EnsureAdditionalCapacity(ConvertedLength);
271 CurPos = FPlatformString::Convert(CurPos, ConvertedLength, &Char, 1);
272 }
273 return *this;
274 }
275
278 {
279 check(Pos >= 0);
280 check(RemoveLen >= 0);
281 check(Pos + RemoveLen <= Len());
282
283 const int DeltaLen = Str.Len() - RemoveLen;
284 if (DeltaLen < 0)
285 {
286 CurPos += DeltaLen;
287
288 for (CharType* It = Base + Pos, *NewEnd = CurPos; It != NewEnd; ++It)
289 {
290 *It = *(It - DeltaLen);
291 }
292 }
293 else if (DeltaLen > 0)
294 {
296 CurPos += DeltaLen;
297
298 for (CharType* It = CurPos - 1, *StopIt = Base + Pos + Str.Len() - 1; It != StopIt; --It)
299 {
300 *It = *(It - DeltaLen);
301 }
302 }
303
304 if (Str.Len())
305 {
306 Str.CopyString(Base + Pos, Str.Len());
307 }
308 }
309
311 void InsertAt(int32 Pos, ViewType Str)
312 {
313 ReplaceAt(Pos, 0, Str);
314 }
315
318 {
320 }
321
324 {
325 ReplaceAt(0, 0, Str);
326 }
327
329 template <typename AppendedCharType>
330 inline auto Add(AppendedCharType Char) -> decltype(AppendChar(Char), (void)0)
331 {
333 }
334
346 template <typename RangeType, typename DelimiterType>
347 requires requires (BuilderType& Builder, RangeType&& Range, const DelimiterType& Delimiter)
348 {
349 Builder << *std::begin(Range);
350 Builder << Delimiter;
351 }
352 inline BuilderType& Join(RangeType&& InRange, const DelimiterType& InDelimiter)
353 {
354 bool bFirst = true;
355 for (auto&& Elem : Forward<RangeType>(InRange))
356 {
357 if (bFirst)
358 {
359 bFirst = false;
360 }
361 else
362 {
363 *this << InDelimiter;
364 }
365 *this << Elem;
366 }
367 return *this;
368 }
369
383 template <typename RangeType, typename DelimiterType, typename QuoteType>
384 requires requires (BuilderType& Builder, RangeType&& Range, const DelimiterType& Delimiter, const QuoteType& Quote)
385 {
386 Builder << Quote << *std::begin(Range) << Quote;
387 Builder << Delimiter;
388 }
389 inline BuilderType& JoinQuoted(RangeType&& InRange, const DelimiterType& InDelimiter, const QuoteType& InQuote)
390 {
391 bool bFirst = true;
392 for (auto&& Elem : Forward<RangeType>(InRange))
393 {
394 if (bFirst)
395 {
396 bFirst = false;
397 }
398 else
399 {
400 *this << InDelimiter;
401 }
402 *this << InQuote << Elem << InQuote;
403 }
404 return *this;
405 }
406
407private:
408 template <typename SrcEncoding>
409 using TIsCharEncodingCompatibleWithCharType = TIsCharEncodingCompatibleWith<SrcEncoding, CharType>;
410
411public:
417 template <typename FmtType, typename... Types
419 BuilderType& Appendf(const FmtType& Fmt, Types... Args)
420 {
421 static_assert((TIsValidVariadicFunctionArg<Types>::Value && ...), "Invalid argument(s) passed to Appendf.");
422 return AppendfImpl(*this, (const CharType*)Fmt, Forward<Types>(Args)...);
423 }
424
430 CORE_API BuilderType& AppendV(const CharType* Fmt, va_list Args);
431
432private:
433 CORE_API static BuilderType& VARARGS AppendfImpl(BuilderType& Self, const CharType* Fmt, ...);
434
435 friend inline CharType* begin( TStringBuilderBase& Builder) { return Builder.GetData(); }
436 friend inline const CharType* begin(const TStringBuilderBase& Builder) { return Builder.GetData(); }
437 friend inline CharType* end ( TStringBuilderBase& Builder) { return Builder.GetData() + Builder.Len(); }
438 friend inline const CharType* end (const TStringBuilderBase& Builder) { return Builder.GetData() + Builder.Len(); }
439
440protected:
447
455
456 UE_DEPRECATED(5.7, "Use TStringBuilder<N> or T[CharType]StringBuilder<N> or TExternalStringBuilder<CharType>.")
458 {
459 Base = InBase;
460 CurPos = InBase;
461 End = Base + InCapacity;
462 }
463
465 {
467 *CurPos = CharType(0);
468 }
469
471 {
472 // precondition: we know the current buffer has enough capacity for the existing string
473
475 {
476 return;
477 }
478
480 }
481
483
485 void FreeBuffer(void* Buffer);
486
487 CharType* Base = nullptr;
488 CharType* CurPos = nullptr;
489 CharType* End = nullptr;
490 bool bIsDynamic = false;
491 bool bIsExternal = false;
492};
493
494template <typename CharType>
495constexpr inline int32 GetNum(const TStringBuilderBase<CharType>& Builder)
496{
497 return Builder.Len();
498}
499
501
507template <typename CharType, int32 BufferSize>
509{
510public:
512 : TStringBuilderBase<CharType>(StringBuffer, BufferSize, UE::Core::Private::FDynamicStringBuilderToken{})
513 {
514 }
515
519 template <typename... ArgTypes>
520 [[nodiscard]] inline explicit TStringBuilderWithBuffer(EInPlace, ArgTypes&&... Args)
521 : TStringBuilderBase<CharType>(StringBuffer, BufferSize, UE::Core::Private::FDynamicStringBuilderToken{})
522 {
523 (*this << ... << (ArgTypes&&)Args);
524 }
525
526 using TStringBuilderBase<CharType>::operator=;
527
528private:
529 CharType StringBuffer[BufferSize > 0 ? BufferSize : 1];
530};
531
533
539template <typename CharType>
541{
542public:
543 [[nodiscard]] inline explicit TExternalStringBuilder(CharType* Buffer, int32 BufferSize)
544 : TStringBuilderBase<CharType>(Buffer, BufferSize, UE::Core::Private::FExternalStringBuilderToken{})
545 {
546 }
547
548 using TStringBuilderBase<CharType>::operator=;
549};
550
552
553// String Append Operators
554
555template <typename CharType, typename CharRangeType>
556inline auto operator<<(TStringBuilderBase<CharType>& Builder, CharRangeType&& Str) -> decltype(Builder.Append(MakeStringView(Forward<CharRangeType>(Str))))
557{
558 // Anything convertible to an FAnsiStringView is also convertible to a FUtf8StringView, but FAnsiStringView is more efficient to convert
559 if constexpr (std::is_convertible_v<CharRangeType, FAnsiStringView>)
560 {
562 }
563 else
564 {
565 return Builder.Append(MakeStringView(Forward<CharRangeType>(Str)));
566 }
567}
568
580
581// Prefer using << instead of += as operator+= is only intended for mechanical FString -> FStringView replacement.
585inline FStringBuilderBase& operator+=(FStringBuilderBase& Builder, FWideStringView Str) { return Builder.Append(Str); }
586inline FStringBuilderBase& operator+=(FStringBuilderBase& Builder, FUtf8StringView Str) { return Builder.Append(Str); }
587
588// Bool Append Operators
589
590template <typename T UE_REQUIRES(std::is_same_v<bool, T>)>
591inline FAnsiStringBuilderBase& operator<<(FAnsiStringBuilderBase& Builder, T Value) { return Builder.Append(Value ? "true" : "false"); }
592template <typename T UE_REQUIRES(std::is_same_v<bool, T>)>
593inline FWideStringBuilderBase& operator<<(FWideStringBuilderBase& Builder, T Value) { return Builder.Append(Value ? WIDETEXT("true") : WIDETEXT("false")); }
594template <typename T UE_REQUIRES(std::is_same_v<bool, T>)>
595inline FUtf8StringBuilderBase& operator<<(FUtf8StringBuilderBase& Builder, T Value) { return Builder.Append(Value ? UTF8TEXT("true") : UTF8TEXT("false")); }
596
601template <typename T> constexpr bool TIsFormattedStringBuilderType_V = false;
602template <> inline constexpr bool TIsFormattedStringBuilderType_V<uint8> = true;
603template <> inline constexpr bool TIsFormattedStringBuilderType_V<uint16> = true;
604template <> inline constexpr bool TIsFormattedStringBuilderType_V<uint32> = true;
605template <> inline constexpr bool TIsFormattedStringBuilderType_V<uint64> = true;
606template <> inline constexpr bool TIsFormattedStringBuilderType_V<int8> = true;
607template <> inline constexpr bool TIsFormattedStringBuilderType_V<int16> = true;
608template <> inline constexpr bool TIsFormattedStringBuilderType_V<int32> = true;
609template <> inline constexpr bool TIsFormattedStringBuilderType_V<int64> = true;
610template <> inline constexpr bool TIsFormattedStringBuilderType_V<float> = true;
611template <> inline constexpr bool TIsFormattedStringBuilderType_V<double> = true;
612template <> inline constexpr bool TIsFormattedStringBuilderType_V<long double> = true;
613template <> inline constexpr bool TIsFormattedStringBuilderType_V<long> = true;
614template <> inline constexpr bool TIsFormattedStringBuilderType_V<unsigned long> = true;
615
619
620// Formatted Append Operators
621
622template <
623 typename CharType,
624 typename T
626>
628{
629 // std::remove_cv_t to remove potential volatile decorations. Removing const is pointless, but harmless because it's specified in the param declaration.
630 return Builder.Appendf(TFormatSpecifier<std::remove_cv_t<T>>::template GetFormatSpecifier<CharType>(), Value);
631}
632
633template <typename CharType, int32 BufferSize>
634class UE_DEPRECATED(5.3, "Use WriteToString<N>(...) or TStringBuilder<N>(InPlace, ...).") TWriteToString : public TStringBuilderWithBuffer<CharType, BufferSize>
635{
636public:
637 template <typename... ArgTypes>
638 explicit TWriteToString(ArgTypes&&... Args)
639 {
640 (*this << ... << (ArgTypes&&)Args);
641 }
642};
643
645template <typename CharType, int32 BufferSize>
646struct TIsContiguousContainer<TWriteToString<CharType, BufferSize>>
647{
648 static constexpr inline bool Value = true;
649};
651
660template <int32 BufferSize, typename... ArgTypes>
665
667template <int32 BufferSize, typename... ArgTypes>
672
674template <int32 BufferSize, typename... ArgTypes>
679
681template <int32 BufferSize, typename... ArgTypes>
686
692template <typename CharType>
694{
695 struct FAppendChar
696 {
698 inline void Add(CharType Char) { Builder.AppendChar(Char); }
699 };
700 return FAppendChar{Builder};
701}
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define VARARGS
Definition AndroidPlatform.h:134
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
#define LIKELY(x)
Definition CityHash.cpp:107
return Self
Definition CocoaThread.cpp:337
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
EInPlace
Definition CoreMiscDefines.h:162
@ InPlace
Definition CoreMiscDefines.h:162
#define UE_LIFETIMEBOUND
Definition Platform.h:812
FPlatformTypes::SIZE_T SIZE_T
An unsigned integer the same size as a pointer, the same as UPTRINT.
Definition Platform.h:1150
#define WIDETEXT(str)
Definition Platform.h:1288
FPlatformTypes::UTF32CHAR UTF32CHAR
A 32-bit character containing a UTF32 (Unicode, 32-bit, fixed-width) code unit.
Definition Platform.h:1143
FPlatformTypes::WIDECHAR WIDECHAR
A wide character. Normally a signed type.
Definition Platform.h:1133
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define UTF8TEXT(x)
Definition Platform.h:1286
FPlatformTypes::UTF8CHAR UTF8CHAR
An 8-bit character containing a UTF8 (Unicode, 8-bit, variable-width) code unit.
Definition Platform.h:1137
FPlatformTypes::ANSICHAR ANSICHAR
An ANSI character. Normally a signed type.
Definition Platform.h:1131
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
@ Char
Character type.
#define UE_REQUIRES(...)
Definition Requires.h:86
FStringBuilderBase & operator+=(FStringBuilderBase &Builder, ANSICHAR Char)
Definition StringBuilder.h:582
constexpr int32 GetNum(const TStringBuilderBase< CharType > &Builder)
Definition StringBuilder.h:495
constexpr bool TIsFormattedStringBuilderType_V< const T >
Definition StringBuilder.h:616
PRAGMA_ENABLE_DEPRECATION_WARNINGS TStringBuilderWithBuffer< TCHAR, BufferSize > WriteToString(ArgTypes &&... Args)
Definition StringBuilder.h:661
constexpr bool TIsFormattedStringBuilderType_V< int16 >
Definition StringBuilder.h:607
constexpr bool TIsFormattedStringBuilderType_V< unsigned long >
Definition StringBuilder.h:614
constexpr bool TIsFormattedStringBuilderType_V< uint8 >
Definition StringBuilder.h:602
constexpr bool TIsFormattedStringBuilderType_V< float >
Definition StringBuilder.h:610
constexpr bool TIsFormattedStringBuilderType_V< const volatile T >
Definition StringBuilder.h:618
constexpr bool TIsFormattedStringBuilderType_V< long >
Definition StringBuilder.h:613
constexpr bool TIsFormattedStringBuilderType_V< volatile T >
Definition StringBuilder.h:617
TStringBuilderWithBuffer< ANSICHAR, BufferSize > WriteToAnsiString(ArgTypes &&... Args)
Definition StringBuilder.h:668
constexpr bool TIsFormattedStringBuilderType_V< int8 >
Definition StringBuilder.h:606
constexpr bool TIsFormattedStringBuilderType_V< int32 >
Definition StringBuilder.h:608
constexpr bool TIsFormattedStringBuilderType_V< uint16 >
Definition StringBuilder.h:603
constexpr bool TIsFormattedStringBuilderType_V< uint64 >
Definition StringBuilder.h:605
constexpr bool TIsFormattedStringBuilderType_V< uint32 >
Definition StringBuilder.h:604
constexpr bool TIsFormattedStringBuilderType_V< long double >
Definition StringBuilder.h:612
TStringBuilderWithBuffer< UTF8CHAR, BufferSize > WriteToUtf8String(ArgTypes &&... Args)
Definition StringBuilder.h:682
TStringBuilderWithBuffer< WIDECHAR, BufferSize > WriteToWideString(ArgTypes &&... Args)
Definition StringBuilder.h:675
constexpr bool TIsFormattedStringBuilderType_V
Definition StringBuilder.h:601
constexpr bool TIsFormattedStringBuilderType_V< double >
Definition StringBuilder.h:611
constexpr bool TIsFormattedStringBuilderType_V< int64 >
Definition StringBuilder.h:609
auto AppendChars(TStringBuilderBase< CharType > &Builder)
Definition StringBuilder.h:693
auto operator<<(TStringBuilderBase< CharType > &Builder, CharRangeType &&Str) -> decltype(Builder.Append(MakeStringView(Forward< CharRangeType >(Str))))
Definition StringBuilder.h:556
constexpr auto MakeStringView(const CharPtrOrRangeType &CharPtrOrRange UE_LIFETIMEBOUND) -> decltype(TStringView(CharPtrOrRange))
Definition StringView.h:508
Definition Core.Build.cs:8
Definition StringBuilder.h:541
TExternalStringBuilder(CharType *Buffer, int32 BufferSize)
Definition StringBuilder.h:543
Definition StringBuilder.h:79
friend const CharType * end(const TStringBuilderBase &Builder)
Definition StringBuilder.h:438
TStringBuilderBase(CharType *InBase, int32 InCapacity, UE::Core::Private::FExternalStringBuilderToken)
Definition StringBuilder.h:448
bool bIsDynamic
Definition StringBuilder.h:490
TStringView< ElementType > ViewType
Definition StringBuilder.h:86
TStringBuilderBase & operator=(const CharType *Str)
Definition StringBuilder.h:103
BuilderType & Join(RangeType &&InRange, const DelimiterType &InDelimiter)
Definition StringBuilder.h:352
BuilderType & AppendChar(AppendedCharType Char)
Definition StringBuilder.h:260
auto Add(AppendedCharType Char) -> decltype(AppendChar(Char),(void) 0)
Definition StringBuilder.h:330
BuilderType & Appendf(const FmtType &Fmt, Types... Args)
Definition StringBuilder.h:419
CORE_API ~TStringBuilderBase()
Definition StringBuilder.cpp:23
void ReplaceAt(int32 Pos, int32 RemoveLen, ViewType Str)
Definition StringBuilder.h:277
TStringBuilderBase & operator=(const TStringBuilderBase &)=delete
bool bIsExternal
Definition StringBuilder.h:491
int32 AddUninitialized(int32 InCount)
Definition StringBuilder.h:202
void EnsureNulTerminated()
Definition StringBuilder.h:464
ViewType ToView() const UE_LIFETIMEBOUND
Definition StringBuilder.h:165
void * AllocBuffer(SIZE_T CharCount)
Definition StringBuilder.cpp:61
const CharType * operator*() UE_LIFETIMEBOUND
Definition StringBuilder.h:150
CharType LastChar() const
Definition StringBuilder.h:171
CharType * GetData() UE_LIFETIMEBOUND
Definition StringBuilder.h:120
friend const CharType * begin(const TStringBuilderBase &Builder)
Definition StringBuilder.h:436
const CharType * ToString() UE_LIFETIMEBOUND
Definition StringBuilder.h:135
friend CharType * end(TStringBuilderBase &Builder)
Definition StringBuilder.h:437
TStringBuilderBase(TStringBuilderBase &&)=delete
TStringBuilderBase()=default
void Prepend(ViewType Str)
Definition StringBuilder.h:323
TStringBuilderBase< ElementType > BuilderType
Definition StringBuilder.h:84
CORE_API void Extend(SIZE_T ExtraCapacity)
Definition StringBuilder.cpp:32
TStringBuilderBase & operator=(ViewType Str)
Definition StringBuilder.h:97
void RemoveAt(int32 Pos, int32 RemoveLen)
Definition StringBuilder.h:317
void Reserve(int32 InNewCapacity)
Definition StringBuilder.h:217
TStringBuilderBase(CharType *InBase, int32 InCapacity, UE::Core::Private::FDynamicStringBuilderToken)
Definition StringBuilder.h:441
BuilderType & Append(const OtherCharType *const String, const int32 Length)
Definition StringBuilder.h:238
void InsertAt(int32 Pos, ViewType Str)
Definition StringBuilder.h:311
void Reset()
Definition StringBuilder.h:190
friend CharType * begin(TStringBuilderBase &Builder)
Definition StringBuilder.h:435
CharType * End
Definition StringBuilder.h:489
TStringBuilderBase & operator=(TStringBuilderBase &&)=delete
BuilderType & JoinQuoted(RangeType &&InRange, const DelimiterType &InDelimiter, const QuoteType &InQuote)
Definition StringBuilder.h:389
SIZE_T GetAllocatedSize() const
Definition StringBuilder.h:182
void FreeBuffer(void *Buffer)
Definition StringBuilder.cpp:67
void EnsureAdditionalCapacity(int32 RequiredAdditionalCapacity)
Definition StringBuilder.h:470
void RemoveSuffix(int32 InCount)
Definition StringBuilder.h:230
auto Append(CharRangeType &&Range) -> decltype(Append(MakeStringView(Forward< CharRangeType >(Range)).GetData(), int32(0)))
Definition StringBuilder.h:250
CORE_API BuilderType & AppendV(const CharType *Fmt, va_list Args)
Definition StringBuilder.cpp:73
CharType * CurPos
Definition StringBuilder.h:488
int32 Len() const
Definition StringBuilder.h:114
TStringBuilderBase(const TStringBuilderBase &)=delete
const CharType * GetData() const UE_LIFETIMEBOUND
Definition StringBuilder.h:125
CharType * Base
Definition StringBuilder.h:487
CharType ElementType
Definition StringBuilder.h:82
Definition StringBuilder.h:509
TStringBuilderWithBuffer(EInPlace, ArgTypes &&... Args)
Definition StringBuilder.h:520
TStringBuilderWithBuffer()
Definition StringBuilder.h:511
Definition StringView.h:107
int32 CopyString(CharType *Dest, int32 CharCount, int32 Position=0) const
Definition StringView.h:569
constexpr int32 Len() const
Definition StringView.h:174
constexpr const CharType * GetData() const
Definition StringView.h:160
Definition OverriddenPropertySet.cpp:45
implementation
Definition PlayInEditorLoadingScope.h:8
Definition AdvancedWidgetsModule.cpp:13
Definition UnrealTypeTraits.h:83
Definition IsArrayOrRefOfTypeByPredicate.h:13
Definition IsCharEncodingCompatibleWith.h:65
Definition IsContiguousContainer.h:16
static constexpr bool Value
Definition IsContiguousContainer.h:20
Definition IsValidVariadicFunctionArg.h:14