UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
UnrealString.h.inl
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3// HEADER_UNIT_SKIP - Should not be included directly
4// IWYU pragma: private
5
6/*******************************************************************************************************************
7 * NOTICE *
8 * *
9 * This file is not intended to be included directly - it will be included by other .h files which have predefined *
10 * some macros to be expanded within this file. As such, it does not have a #pragma once as it is intended to be *
11 * included multiple times with different macro definitions. *
12 * *
13 * #includes needed to compile this file need to be specified in UnrealStringIncludes.h.inl file rather than here. *
14 *******************************************************************************************************************/
15#define UE_INCLUDETOOL_IGNORE_INCONSISTENT_STATE
16
17#ifndef UE_STRING_CLASS
18 #error "UnrealString.h.inl should only be included after defining UE_STRING_CLASS"
19#endif
20#ifndef UE_STRING_CHARTYPE
21 #error "UnrealString.h.inl should only be included after defining UE_STRING_CHARTYPE"
22#endif
23#ifndef UE_STRING_CHARTYPE_IS_TCHAR
24 #error "UnrealString.h.inl should only be included after defining UE_STRING_CHARTYPE_IS_TCHAR"
25#endif
26#ifndef UE_STRING_PRINTF_FMT_CHARTYPE
27 #error "UnrealString.h.inl should only be included after defining UE_STRING_PRINTF_FMT_CHARTYPE"
28#endif
29#ifndef UE_STRING_DEPRECATED
30 #error "UnrealString.h.inl should only be included after defining UE_STRING_DEPRECATED"
31#endif
32
33struct FStringFormatArg;
34template<typename InKeyType,typename InValueType,typename SetAllocator ,typename KeyFuncs > class TMap;
35
38
42
55{
56public:
60
61#ifdef UE_STRING_PRINTF_FMT_CHARTYPE2
62 // Alternate formatting string type, particularly used for FUtf8String which can accept both "..." and UTF8TEXT("...") for formatting strings
64#endif
65
66private:
69 DataType Data;
70
71public:
72 [[nodiscard]] UE_STRING_CLASS() = default;
73 [[nodiscard]] explicit consteval UE_STRING_CLASS(EConstEval)
74 : Data(ConstEval)
75 {
76 }
81
89 : Data(Other.Data, ExtraSlack + ((Other.Data.Num() || !ExtraSlack) ? 0 : 1)) // Add 1 if the source string array is empty and we want some slack, because we'll need to include a null terminator which is currently missing
90 {
91 }
92
100 : Data(MoveTemp(Other.Data), ExtraSlack + ((Other.Data.Num() || !ExtraSlack) ? 0 : 1)) // Add 1 if the source string array is empty and we want some slack, because we'll need to include a null terminator which is currently missing
101 {
102 }
103
110
112 UE_STRING_DEPRECATED(5.4, "This constructor has been deprecated - please use " PREPROCESSOR_TO_STRING(UE_STRING_CLASS) "::ConstructFromPtrSize(Ptr, Size) instead.") [[nodiscard]] CORE_API UE_STRING_CLASS(int32 Len, const ANSICHAR* Str);
113 UE_STRING_DEPRECATED(5.4, "This constructor has been deprecated - please use " PREPROCESSOR_TO_STRING(UE_STRING_CLASS) "::ConstructFromPtrSize(Ptr, Size) instead.") [[nodiscard]] CORE_API UE_STRING_CLASS(int32 Len, const WIDECHAR* Str);
114 UE_STRING_DEPRECATED(5.4, "This constructor has been deprecated - please use " PREPROCESSOR_TO_STRING(UE_STRING_CLASS) "::ConstructFromPtrSize(Ptr, Size) instead.") [[nodiscard]] CORE_API UE_STRING_CLASS(int32 Len, const UTF8CHAR* Str);
115 UE_STRING_DEPRECATED(5.4, "This constructor has been deprecated - please use " PREPROCESSOR_TO_STRING(UE_STRING_CLASS) "::ConstructFromPtrSize(Ptr, Size) instead.") [[nodiscard]] CORE_API UE_STRING_CLASS(int32 Len, const UCS2CHAR* Str);
116
118 UE_STRING_DEPRECATED(5.4, "This constructor has been deprecated - please use " PREPROCESSOR_TO_STRING(UE_STRING_CLASS) "::ConstructWithSlack(Ptr, Size) instead.") [[nodiscard]] CORE_API UE_STRING_CLASS(const ANSICHAR* Str, int32 ExtraSlack);
119 UE_STRING_DEPRECATED(5.4, "This constructor has been deprecated - please use " PREPROCESSOR_TO_STRING(UE_STRING_CLASS) "::ConstructWithSlack(Ptr, Size) instead.") [[nodiscard]] CORE_API UE_STRING_CLASS(const WIDECHAR* Str, int32 ExtraSlack);
120 UE_STRING_DEPRECATED(5.4, "This constructor has been deprecated - please use " PREPROCESSOR_TO_STRING(UE_STRING_CLASS) "::ConstructWithSlack(Ptr, Size) instead.") [[nodiscard]] CORE_API UE_STRING_CLASS(const UTF8CHAR* Str, int32 ExtraSlack);
121 UE_STRING_DEPRECATED(5.4, "This constructor has been deprecated - please use " PREPROCESSOR_TO_STRING(UE_STRING_CLASS) "::ConstructWithSlack(Ptr, Size) instead.") [[nodiscard]] CORE_API UE_STRING_CLASS(const UCS2CHAR* Str, int32 ExtraSlack);
122
124 [[nodiscard]] static CORE_API UE_STRING_CLASS ConstructWithSlack(const ANSICHAR* Str, int32 ExtraSlack);
125 [[nodiscard]] static CORE_API UE_STRING_CLASS ConstructWithSlack(const WIDECHAR* Str, int32 ExtraSlack);
126 [[nodiscard]] static CORE_API UE_STRING_CLASS ConstructWithSlack(const UTF8CHAR* Str, int32 ExtraSlack);
127 [[nodiscard]] static CORE_API UE_STRING_CLASS ConstructWithSlack(const UCS2CHAR* Str, int32 ExtraSlack);
128 [[nodiscard]] static CORE_API UE_STRING_CLASS ConstructWithSlack(const UTF32CHAR* Str, int32 ExtraSlack);
129
136
143
145 template <
146 typename CharRangeType,
150 !std::is_array_v<std::remove_reference_t<CharRangeType>> &&
152 !std::is_base_of_v<UE_STRING_CLASS, std::decay_t<CharRangeType>>
153 )
154 >
159
161 template <
162 typename CharRangeType,
166 !std::is_array_v<std::remove_reference_t<CharRangeType>>&&
168 !std::is_base_of_v<UE_STRING_CLASS, std::decay_t<CharRangeType>>
169 )
170 >
171 [[nodiscard]] explicit UE_STRING_CLASS(CharRangeType&& Str, int32 ExtraSlack)
172 {
174 Reserve(InLen + ExtraSlack);
176 }
177
178public:
179
180#if PLATFORM_APPLE && UE_STRING_CHARTYPE_IS_TCHAR
181 [[nodiscard]] inline UE_STRING_CLASS(const CFStringRef In)
182 {
183 uint32_t StringLength = In ? CFStringGetLength(In) : 0;
184
185 if (StringLength > 0)
186 {
187 // Convert the NSString data into the native TCHAR format for UE4
188 // This returns a buffer of bytes, but they can be safely cast to a buffer of TCHARs
189#if PLATFORM_TCHAR_IS_4_BYTES
191#else
193#endif
194
195 CFRange Range = CFRangeMake(0, StringLength);
197 if (CFStringGetBytes(In, Range, Encoding, '?', false, NULL, 0, &BytesNeeded) > 0)
198 {
199 const size_t Length = BytesNeeded / sizeof(TCHAR);
200 Data.Reserve(Length + 1);
201 Data.AddUninitialized(Length + 1);
202 CFStringGetBytes(In, Range, Encoding, '?', false, (uint8*)Data.GetData(), Length * sizeof(TCHAR) + 1, NULL);
203 Data[Length] = 0;
204 }
205 }
206 }
207#endif
208
210 // Start - intrusive TOptional<UE_STRING_CLASS> state //
212 constexpr static bool bHasIntrusiveUnsetOptionalState = true;
214
216 : Data(Tag)
217 {
218 }
220 {
221 return Data == Tag;
222 }
224 // End - intrusive TOptional<UE_STRING_CLASS> state //
226
227#if defined(__OBJC__) && UE_STRING_CHARTYPE_IS_TCHAR
230 {
231 }
232#endif
233
234 CORE_API UE_STRING_CLASS& operator=(const ElementType* Str);
235
236 template <
237 typename CharRangeType,
241 !std::is_array_v<std::remove_reference_t<CharRangeType>> &&
242 std::is_same_v<ElementType, CharRangeElementType>
243 )
244 >
246 {
247 AssignRange(GetData(Range), GetNum(Range));
248 return *this;
249 }
250
251private:
252 CORE_API void AssignRange(const ElementType* Str, int32 Len);
253
254public:
262 {
263 checkf(IsValidIndex(Index), TEXT("String index out of bounds: Index %i from a string with a length of %i"), Index, Len());
264 return Data.GetData()[Index];
265 }
266
274 {
275 checkf(IsValidIndex(Index), TEXT("String index out of bounds: Index %i from a string with a length of %i"), Index, Len());
276 return Data.GetData()[Index];
277 }
278
284
287 {
288 return Data.CreateIterator();
289 }
290
293 {
294 return Data.CreateConstIterator();
295 }
296
301 [[nodiscard]] UE_FORCEINLINE_HINT DataType::RangedForIteratorType begin () { auto Result = Data.begin(); return Result; }
302 [[nodiscard]] UE_FORCEINLINE_HINT DataType::RangedForConstIteratorType begin () const { auto Result = Data.begin(); return Result; }
303 [[nodiscard]] UE_FORCEINLINE_HINT DataType::RangedForIteratorType end () { auto Result = Data.end(); if (Data.Num()) { --Result; } return Result; }
304 [[nodiscard]] UE_FORCEINLINE_HINT DataType::RangedForConstIteratorType end () const { auto Result = Data.end(); if (Data.Num()) { --Result; } return Result; }
305 [[nodiscard]] UE_FORCEINLINE_HINT DataType::RangedForReverseIteratorType rbegin() { auto Result = Data.rbegin(); if (Data.Num()) { ++Result; } return Result; }
306 [[nodiscard]] UE_FORCEINLINE_HINT DataType::RangedForConstReverseIteratorType rbegin() const { auto Result = Data.rbegin(); if (Data.Num()) { ++Result; } return Result; }
307 [[nodiscard]] UE_FORCEINLINE_HINT DataType::RangedForReverseIteratorType rend () { auto Result = Data.rend(); return Result; }
308 [[nodiscard]] UE_FORCEINLINE_HINT DataType::RangedForConstReverseIteratorType rend () const { auto Result = Data.rend(); return Result; }
309
311 {
312 return Data.GetAllocatedSize();
313 }
314
318 inline void CheckInvariants() const
319 {
320 int32 Num = Data.Num();
321 checkSlow(Num >= 0);
322 checkSlow(!Num || !Data.GetData()[Num - 1]);
323 checkSlow(Data.GetSlack() >= 0);
324 }
325
331 CORE_API void Empty();
332 CORE_API void Empty(int32 Slack);
333
340 {
341 return Data.Num() <= 1;
342 }
343
350
354 CORE_API void Shrink();
355
364 {
365 return Index >= 0 && Index < Len();
366 }
367
374 {
375 return Data.Num() ? Data.GetData() : CHARTEXT(ElementType, "");
376 }
377
388
391 {
392 return Data;
393 }
394
395#if PLATFORM_APPLE
398#endif
399
400#ifdef __OBJC__
403#endif
409 CORE_API void AppendChars(const ANSICHAR* Str, int32 Count);
410 CORE_API void AppendChars(const WIDECHAR* Str, int32 Count);
411 CORE_API void AppendChars(const UCS2CHAR* Str, int32 Count);
412 CORE_API void AppendChars(const UTF8CHAR* Str, int32 Count);
413 CORE_API void AppendChars(const UTF32CHAR* Str, int32 Count);
414
416 template<class CharType>
417 inline UE_STRING_CLASS& Append(const CharType* Str, int32 Count)
418 {
419 AppendChars(Str, Count);
420 return *this;
421 }
422
430 template<class CharType>
431 inline UE_STRING_CLASS& Append(/* no const! */ CharType* Str)
432 {
433 checkSlow(Str);
434 AppendChars(Str, TCString<std::remove_const_t<CharType>>::Strlen(Str));
435 return *this;
436 }
437
439 template <
440 typename CharRangeType,
443 >
445 {
447 return *this;
448 }
449
451 CORE_API UE_STRING_CLASS& AppendChar(ElementType InChar);
452
454 template <typename StrType>
456 {
457 return Append(Forward<StrType>(Str));
458 }
459
461 template <
462 typename AppendedCharType
464 >
466 {
468 {
469 return AppendChar((ElementType)Char);
470 }
471 else
472 {
473 AppendChars(&Char, 1);
474 return *this;
475 }
476 }
477
478 CORE_API void InsertAt(int32 Index, ElementType Character);
479 CORE_API void InsertAt(int32 Index, const UE_STRING_CLASS& Characters);
480
488
498 UE_FORCEINLINE_HINT void RemoveAt(int32 Index, int32 Count, bool bAllowShrinking)
499 {
501 }
502
510 template <
511 typename CharRangeType,
515 !std::is_array_v<std::remove_reference_t<CharRangeType>>&&
517 !std::is_base_of_v<UE_STRING_CLASS, std::decay_t<CharRangeType>>
518 )
519 >
521 {
522 static_assert(std::is_same_v<CharRangeElementType, ElementType>, "Expected a range of ElementType");
523 return RemoveFromStart(GetData(InPrefix), GetNum(InPrefix), SearchCase);
524 }
525
537
546 {
547 return RemoveFromStart(*InPrefix, InPrefix.Len(), SearchCase);
548 }
549
557 CORE_API bool RemoveFromStart(const ElementType* InPrefix, int32 InPrefixLen, ESearchCase::Type SearchCase = ESearchCase::IgnoreCase);
558
566 template <
567 typename CharRangeType,
571 !std::is_array_v<std::remove_reference_t<CharRangeType>>&&
573 !std::is_base_of_v<UE_STRING_CLASS, std::decay_t<CharRangeType>>
574 )
575 >
577 {
578 static_assert(std::is_same_v<CharRangeElementType, ElementType>, "Expected a range of ElementType");
579 return RemoveFromEnd(GetData(InSuffix), GetNum(InSuffix), SearchCase);
580 }
581
593
602 {
603 return RemoveFromEnd(*InSuffix, InSuffix.Len(), SearchCase);
604 }
605
614 CORE_API bool RemoveFromEnd(const ElementType* InSuffix, int32 InSuffixLen, ESearchCase::Type SearchCase = ESearchCase::IgnoreCase);
615
622 CORE_API void PathAppend(const ElementType* Str, int32 StrLength);
623
632 template <
633 typename CharType
635 >
636 [[nodiscard]] inline friend UE_STRING_CLASS operator+(const UE_STRING_CLASS& Lhs, CharType Rhs)
637 {
638 Lhs.CheckInvariants();
639
640 UE_STRING_CLASS Result(Lhs, 1);
641 Result += Rhs;
642
643 return Result;
644 }
645
654 template <
655 typename CharType
657 >
658 [[nodiscard]] inline friend UE_STRING_CLASS operator+(UE_STRING_CLASS&& Lhs, CharType Rhs)
659 {
660 Lhs.CheckInvariants();
661
662 UE_STRING_CLASS Result(MoveTemp(Lhs), 1);
663 Result += Rhs;
664
665 return Result;
666 }
667
668private:
669 [[nodiscard]] static CORE_API UE_STRING_CLASS ConcatFF(const UE_STRING_CLASS& Lhs, const UE_STRING_CLASS& Rhs);
670 [[nodiscard]] static CORE_API UE_STRING_CLASS ConcatFF(UE_STRING_CLASS&& Lhs, const UE_STRING_CLASS& Rhs);
671 [[nodiscard]] static CORE_API UE_STRING_CLASS ConcatFF(const UE_STRING_CLASS& Lhs, UE_STRING_CLASS&& Rhs);
672 [[nodiscard]] static CORE_API UE_STRING_CLASS ConcatFF(UE_STRING_CLASS&& Lhs, UE_STRING_CLASS&& Rhs);
673 [[nodiscard]] static CORE_API UE_STRING_CLASS ConcatFC(const UE_STRING_CLASS& Lhs, const ElementType* Rhs);
674 [[nodiscard]] static CORE_API UE_STRING_CLASS ConcatFC(UE_STRING_CLASS&& Lhs, const ElementType* Rhs);
675 [[nodiscard]] static CORE_API UE_STRING_CLASS ConcatCF(const ElementType* Lhs, const UE_STRING_CLASS& Rhs);
676 [[nodiscard]] static CORE_API UE_STRING_CLASS ConcatCF(const ElementType* Lhs, UE_STRING_CLASS&& Rhs);
677 [[nodiscard]] static CORE_API UE_STRING_CLASS ConcatFR(const UE_STRING_CLASS& Lhs, const ElementType* Rhs, int32 RhsLen);
678 [[nodiscard]] static CORE_API UE_STRING_CLASS ConcatFR(UE_STRING_CLASS&& Lhs, const ElementType* Rhs, int32 RhsLen);
679 [[nodiscard]] static CORE_API UE_STRING_CLASS ConcatRF(const ElementType* Lhs, int32 LhsLen, const UE_STRING_CLASS& Rhs);
680 [[nodiscard]] static CORE_API UE_STRING_CLASS ConcatRF(const ElementType* Lhs, int32 LhsLen, UE_STRING_CLASS&& Rhs);
681
682public:
683 [[nodiscard]] UE_FORCEINLINE_HINT friend UE_STRING_CLASS operator+(const UE_STRING_CLASS& Lhs, const UE_STRING_CLASS& Rhs) { return ConcatFF(Lhs, Rhs); }
684 [[nodiscard]] UE_FORCEINLINE_HINT friend UE_STRING_CLASS operator+(UE_STRING_CLASS&& Lhs, const UE_STRING_CLASS& Rhs) { return ConcatFF(MoveTemp(Lhs), Rhs); }
685 [[nodiscard]] UE_FORCEINLINE_HINT friend UE_STRING_CLASS operator+(const UE_STRING_CLASS& Lhs, UE_STRING_CLASS&& Rhs) { return ConcatFF(Lhs,MoveTemp(Rhs)); }
687 [[nodiscard]] UE_FORCEINLINE_HINT friend UE_STRING_CLASS operator+(const ElementType* Lhs, const UE_STRING_CLASS& Rhs) { return ConcatCF(Lhs, Rhs); }
688 [[nodiscard]] UE_FORCEINLINE_HINT friend UE_STRING_CLASS operator+(const ElementType* Lhs, UE_STRING_CLASS&& Rhs) { return ConcatCF(Lhs, MoveTemp(Rhs)); }
689 [[nodiscard]] UE_FORCEINLINE_HINT friend UE_STRING_CLASS operator+(const UE_STRING_CLASS& Lhs, const ElementType* Rhs) { return ConcatFC(Lhs, Rhs); }
690 [[nodiscard]] UE_FORCEINLINE_HINT friend UE_STRING_CLASS operator+(UE_STRING_CLASS&& Lhs, const ElementType* Rhs) { return ConcatFC(MoveTemp(Lhs), Rhs); }
691
692 template <
693 typename CharRangeType,
697 !std::is_array_v<std::remove_reference_t<CharRangeType>> &&
698 std::is_same_v<ElementType, CharRangeElementType> &&
699 !std::is_base_of_v<UE_STRING_CLASS, std::decay_t<CharRangeType>>
700 )
701 >
703 {
704 return ConcatRF(GetData(Lhs), GetNum(Lhs), Rhs);
705 }
706 template <
707 typename CharRangeType,
711 !std::is_array_v<std::remove_reference_t<CharRangeType>>&&
712 std::is_same_v<ElementType, CharRangeElementType> &&
713 !std::is_base_of_v<UE_STRING_CLASS, std::decay_t<CharRangeType>>
714 )
715 >
717 {
718 return ConcatRF(GetData(Lhs), GetNum(Lhs), MoveTemp(Rhs));
719 }
720 template <
721 typename CharRangeType,
725 !std::is_array_v<std::remove_reference_t<CharRangeType>>&&
726 std::is_same_v<ElementType, CharRangeElementType> &&
727 !std::is_base_of_v<UE_STRING_CLASS, std::decay_t<CharRangeType>>
728 )
729 >
731 {
732 return ConcatFR(Lhs, GetData(Rhs), GetNum(Rhs));
733 }
734 template <
735 typename CharRangeType,
739 !std::is_array_v<std::remove_reference_t<CharRangeType>>&&
740 std::is_same_v<ElementType, CharRangeElementType> &&
741 !std::is_base_of_v<UE_STRING_CLASS, std::decay_t<CharRangeType>>
742 )
743 >
745 {
746 return ConcatFR(MoveTemp(Lhs), GetData(Rhs), GetNum(Rhs));
747 }
748
756 {
757 checkSlow(Str);
758
760 return *this;
761 }
762
769 template <
770 typename CharRangeType,
774 !std::is_array_v<std::remove_reference_t<CharRangeType>>&&
775 std::is_same_v<ElementType, CharRangeElementType>
776 )
777 >
779 {
781 return *this;
782 }
783
790 template <
791 typename CharType
793 >
794 inline UE_STRING_CLASS& operator/=(const CharType* Str)
795 {
796 UE_STRING_CLASS Temp = Str;
797 PathAppend(GetData(Temp), GetNum(Temp));
798 return *this;
799 }
800
808 [[nodiscard]] inline friend UE_STRING_CLASS operator/(const UE_STRING_CLASS& Lhs, const ElementType* Rhs)
809 {
810 checkSlow(Rhs);
811
813
814 UE_STRING_CLASS Result(Lhs, StrLength + 1);
815 Result.PathAppend(Rhs, StrLength);
816 return Result;
817 }
818
826 [[nodiscard]] inline friend UE_STRING_CLASS operator/(UE_STRING_CLASS&& Lhs, const ElementType* Rhs)
827 {
828 checkSlow(Rhs);
829
831
832 UE_STRING_CLASS Result(MoveTemp(Lhs), StrLength + 1);
833 Result.PathAppend(Rhs, StrLength);
834 return Result;
835 }
836
844 [[nodiscard]] inline friend UE_STRING_CLASS operator/(const UE_STRING_CLASS& Lhs, const UE_STRING_CLASS& Rhs)
845 {
846 int32 StrLength = Rhs.Len();
847
848 UE_STRING_CLASS Result(Lhs, StrLength + 1);
849 Result.PathAppend(Rhs.Data.GetData(), StrLength);
850 return Result;
851 }
852
861 {
862 int32 StrLength = Rhs.Len();
863
864 UE_STRING_CLASS Result(MoveTemp(Lhs), StrLength + 1);
865 Result.PathAppend(Rhs.Data.GetData(), StrLength);
866 return Result;
867 }
868
876 [[nodiscard]] inline friend UE_STRING_CLASS operator/(const ElementType* Lhs, const UE_STRING_CLASS& Rhs)
877 {
878 int32 StrLength = Rhs.Len();
879
880 UE_STRING_CLASS Result(UE_STRING_CLASS(Lhs), StrLength + 1);
881 Result.PathAppend(Rhs.Data.GetData(), Rhs.Len());
882 return Result;
883 }
884
894 {
895 return FPlatformString::Stricmp(**this, *Rhs) < 0;
896 }
897
906 template <typename CharType>
907 [[nodiscard]] UE_FORCEINLINE_HINT bool UEOpLessThan(const CharType* Rhs) const
908 {
909 return FPlatformString::Stricmp(**this, Rhs) < 0;
910 }
911
920 template <typename CharType>
921 [[nodiscard]] UE_FORCEINLINE_HINT bool UEOpGreaterThan(const CharType* Rhs) const
922 {
923 return FPlatformString::Stricmp(**this, Rhs) > 0;
924 }
925
935 {
936 return Equals(Rhs, ESearchCase::IgnoreCase);
937 }
938
947 template <typename CharType>
948 [[nodiscard]] UE_FORCEINLINE_HINT bool UEOpEquals(const CharType* Rhs) const
949 {
950 return FPlatformString::Stricmp(**this, Rhs) == 0;
951 }
952
955 {
956 return Data.Num() ? Data.Num() - 1 : 0;
957 }
958
961 {
962 return static_cast<SIZE_T>(Len()) * sizeof(ElementType);
963 }
964
967 {
968 return (static_cast<SIZE_T>(Len()) + 1) * sizeof(ElementType);
969 }
970
976
978 {
980 return MoveTemp(*this);
981 }
982
991 UE_FORCEINLINE_HINT void LeftInline(int32 Count, bool bAllowShrinking)
992 {
994 }
995
998 {
999 const int32 Length = Len();
1001 }
1002
1004 {
1006 return MoveTemp(*this);
1007 }
1008
1015 UE_ALLOWSHRINKING_BOOL_DEPRECATED("LeftChopInline")
1016 UE_FORCEINLINE_HINT void LeftChopInline(int32 Count, bool bAllowShrinking)
1017 {
1019 }
1020
1023 {
1024 const int32 Length = Len();
1025 return UE_STRING_CLASS(**this + Length - FMath::Clamp(Count, 0, Length));
1026 }
1027
1029 {
1031 return MoveTemp(*this);
1032 }
1033
1041 UE_FORCEINLINE_HINT void RightInline(int32 Count, bool bAllowShrinking)
1042 {
1044 }
1045
1047 [[nodiscard]] CORE_API UE_STRING_CLASS RightChop(int32 Count) const &;
1048
1050 {
1052 return MoveTemp(*this);
1053 }
1054
1060 UE_ALLOWSHRINKING_BOOL_DEPRECATED("RightChopInline")
1061 UE_FORCEINLINE_HINT void RightChopInline(int32 Count, bool bAllowShrinking)
1062 {
1064 }
1065
1067 [[nodiscard]] CORE_API UE_STRING_CLASS Mid(int32 Start, int32 Count) const &;
1069
1071 [[nodiscard]] UE_FORCEINLINE_HINT UE_STRING_CLASS Mid(int32 Start) const & { return RightChop(Start); }
1073
1076 {
1077 if (Count != MAX_int32 && int64(Start) + Count < MAX_int32)
1078 {
1080 }
1082 }
1084 UE_FORCEINLINE_HINT void MidInline(int32 Start, int32 Count, bool bAllowShrinking)
1085 {
1086 MidInline(Start, Count, bAllowShrinking ? EAllowShrinking::Yes : EAllowShrinking::No);
1087 }
1088
1106 template <
1107 typename CharRangeType,
1111 !std::is_array_v<std::remove_reference_t<CharRangeType>>&&
1113 !std::is_base_of_v<UE_STRING_CLASS, std::decay_t<CharRangeType>>
1114 )
1115 >
1118 {
1119 static_assert(std::is_same_v<CharRangeElementType, ElementType>, "Expected a range of ElementType");
1120 return Find(GetData(SubStr), GetNum(SubStr), SearchCase, SearchDir, StartPosition);
1121 }
1122
1142 {
1143 return SubStr ? Find(SubStr, TCString<ElementType>::Strlen(SubStr), SearchCase, SearchDir, StartPosition) : INDEX_NONE;
1144 }
1145
1165 {
1166 return Find(*SubStr, SubStr.Len(), SearchCase, SearchDir, StartPosition);
1167 }
1168
1187 [[nodiscard]] CORE_API int32 Find(const ElementType* SubStr, int32 InSubStrLen, ESearchCase::Type SearchCase = ESearchCase::IgnoreCase,
1189
1190
1199 template <
1200 typename CharRangeType,
1204 !std::is_array_v<std::remove_reference_t<CharRangeType>>&&
1206 !std::is_base_of_v<UE_STRING_CLASS, std::decay_t<CharRangeType>>
1207 )
1208 >
1211 {
1212 static_assert(std::is_same_v<CharRangeElementType, ElementType>, "Expected a range of characters");
1213 return Find(Forward<CharRangeType>(SubStr), SearchCase, SearchDir) != INDEX_NONE;
1214 }
1215
1226 {
1227 return Find(SubStr, SearchCase, SearchDir) != INDEX_NONE;
1228 }
1229
1240 {
1241 return Find(*SubStr, SearchCase, SearchDir) != INDEX_NONE;
1242 }
1243
1258
1267 {
1268 return Data.Find(InChar, OutIndex);
1269 }
1270
1279 {
1280 return Data.FindLast(InChar, OutIndex);
1281 }
1282
1291 template <typename Predicate>
1293 {
1294 check(Count >= 0 && Count <= this->Len());
1295 return Data.FindLastByPredicate(Pred, Count);
1296 }
1297
1305 template <typename Predicate>
1307 {
1308 return Data.FindLastByPredicate(Pred, this->Len());
1309 }
1310
1319 {
1320 int32 Num = Data.Num();
1321 int32 OtherNum = Other.Data.Num();
1322
1323 if (Num != OtherNum)
1324 {
1325 // Handle special case where FString() == FString("")
1326 return Num + OtherNum == 1;
1327 }
1328 else if (Num > 1)
1329 {
1330 if (SearchCase == ESearchCase::CaseSensitive)
1331 {
1332 return TCString<ElementType>::Strcmp(Data.GetData(), Other.Data.GetData()) == 0;
1333 }
1334 else
1335 {
1336 return TCString<ElementType>::Stricmp(Data.GetData(), Other.Data.GetData()) == 0;
1337 }
1338 }
1339
1340 return true;
1341 }
1342
1351 {
1352 if (SearchCase == ESearchCase::CaseSensitive)
1353 {
1354 return TCString<ElementType>::Strcmp(**this, *Other);
1355 }
1356 else
1357 {
1358 return TCString<ElementType>::Stricmp(**this, *Other);
1359 }
1360 }
1361
1374
1377
1380
1386
1388 CORE_API void ToUpperInline();
1389
1392
1398
1400 CORE_API void ToLowerInline();
1401
1403 [[nodiscard]] CORE_API UE_STRING_CLASS LeftPad(int32 ChCount) const;
1404
1406 [[nodiscard]] CORE_API UE_STRING_CLASS RightPad(int32 ChCount) const;
1407
1409 [[nodiscard]] CORE_API bool IsNumeric() const;
1410
1412 CORE_API void RemoveSpacesInline();
1413
1422 template <typename... Types>
1423 [[nodiscard]] static UE_STRING_CLASS Printf(UE::Core::TCheckedFormatString<FmtCharType, Types...> Fmt, Types... Args)
1424 {
1425 return PrintfImpl((const ElementType*)Fmt.FormatString, Args...);
1426 }
1427#ifdef UE_STRING_PRINTF_FMT_CHARTYPE2
1428 template <typename... Types>
1430 {
1431 return PrintfImpl((const ElementType*)Fmt.FormatString, Args...);
1432 }
1433#endif
1434
1439 template <typename... Types>
1441 {
1442 AppendfImpl(*this, (const ElementType*)Fmt.FormatString, Args...);
1443 return *this;
1444 }
1445#ifdef UE_STRING_PRINTF_FMT_CHARTYPE2
1446 template <typename... Types>
1448 {
1449 AppendfImpl(*this, (const ElementType*)Fmt.FormatString, Args...);
1450 return *this;
1451 }
1452#endif
1453
1454private:
1455 static CORE_API UE_STRING_CLASS VARARGS PrintfImpl(const ElementType* Fmt, ...);
1456 static CORE_API void VARARGS AppendfImpl(UE_STRING_CLASS& AppendToMe, const ElementType* Fmt, ...);
1457public:
1458
1469#ifdef UE_STRING_PRINTF_FMT_CHARTYPE2
1471 {
1472 return FormatImpl((const ElementType*)InFormatString, InNamedArguments);
1473 }
1474#endif
1475
1486#ifdef UE_STRING_PRINTF_FMT_CHARTYPE2
1488 {
1489 return FormatImpl((const ElementType*)InFormatString, InOrderedArguments);
1490 }
1491#endif
1492
1493private:
1495 static CORE_API UE_STRING_CLASS FormatImpl(const ElementType* InFormatString, const FStringFormatOrderedArguments& InOrderedArguments);
1496public:
1497
1499 [[nodiscard]] static CORE_API UE_STRING_CLASS Chr(ElementType Ch);
1500
1509 [[nodiscard]] static CORE_API UE_STRING_CLASS ChrN(int32 NumCharacters, ElementType Char);
1510
1520
1521
1529 template <
1530 typename CharRangeType,
1534 !std::is_array_v<std::remove_reference_t<CharRangeType>>&&
1536 !std::is_base_of_v<UE_STRING_CLASS, std::decay_t<CharRangeType>>
1537 )
1538 >
1540 {
1541 static_assert(std::is_same_v<CharRangeElementType, ElementType>, "Expected a range of characters");
1542 return StartsWith(GetData(InPrefix), GetNum(InPrefix), SearchCase);
1543 }
1544
1556
1565 {
1566 return StartsWith(*InPrefix, InPrefix.Len(), SearchCase);
1567 }
1568
1576 [[nodiscard]] CORE_API bool StartsWith(const ElementType* InPrefix, int32 InPrefixLen, ESearchCase::Type SearchCase = ESearchCase::IgnoreCase) const;
1577
1585 template <
1586 typename CharRangeType,
1590 !std::is_array_v<std::remove_reference_t<CharRangeType>>&&
1592 !std::is_base_of_v<UE_STRING_CLASS, std::decay_t<CharRangeType>>
1593 )
1594 >
1596 {
1597 static_assert(std::is_same_v<CharRangeElementType, ElementType>, "Expected a range of characters");
1598 return EndsWith(GetData(InSuffix), GetNum(InSuffix), SearchCase);
1599 }
1600
1609 {
1611 }
1612
1621 {
1622 return EndsWith(*InSuffix, InSuffix.Len(), SearchCase);
1623 }
1624
1632 [[nodiscard]] CORE_API bool EndsWith(const ElementType* InSuffix, int32 InSuffixLen, ESearchCase::Type SearchCase = ESearchCase::IgnoreCase) const;
1633
1642 template <
1643 typename CharRangeType,
1647 !std::is_array_v<std::remove_reference_t<CharRangeType>>&&
1649 !std::is_base_of_v<UE_STRING_CLASS, std::decay_t<CharRangeType>>
1650 )
1651 >
1653 {
1654 static_assert(std::is_same_v<CharRangeElementType, ElementType>, "Expected a range of characters");
1655 return MatchesWildcard(GetData(Wildcard), GetNum(Wildcard), SearchCase);
1656 }
1657
1670
1680 {
1681 return MatchesWildcard(*Wildcard, Wildcard.Len(), SearchCase);
1682 }
1683
1693 [[nodiscard]] CORE_API bool MatchesWildcard(const ElementType* Wildcard, int32 WildcardLen, ESearchCase::Type SearchCase = ESearchCase::IgnoreCase) const;
1694
1698 CORE_API void TrimStartAndEndInline();
1699
1704 [[nodiscard]] CORE_API UE_STRING_CLASS TrimStartAndEnd() const &;
1705
1710 [[nodiscard]] CORE_API UE_STRING_CLASS TrimStartAndEnd() &&;
1711
1715 CORE_API void TrimStartInline();
1716
1721 [[nodiscard]] CORE_API UE_STRING_CLASS TrimStart() const &;
1722
1727 [[nodiscard]] CORE_API UE_STRING_CLASS TrimStart() &&;
1728
1732 CORE_API void TrimEndInline();
1733
1738 [[nodiscard]] CORE_API UE_STRING_CLASS TrimEnd() const &;
1739
1744 [[nodiscard]] CORE_API UE_STRING_CLASS TrimEnd() &&;
1745
1749 CORE_API void TrimToNullTerminator();
1750
1751
1755 CORE_API void TrimQuotesInline(bool* bQuotesRemoved = nullptr);
1756
1761 CORE_API void TrimCharInline(ElementType CharacterToTrim, bool* bCharRemoved);
1762
1766 [[nodiscard]] CORE_API UE_STRING_CLASS TrimQuotes(bool* bQuotesRemoved = nullptr) const &;
1767
1771 [[nodiscard]] CORE_API UE_STRING_CLASS TrimQuotes(bool* bQuotesRemoved = nullptr) &&;
1772
1777 [[nodiscard]] CORE_API UE_STRING_CLASS TrimChar(ElementType CharacterToTrim, bool* bCharRemoved = nullptr) const &;
1778
1782 [[nodiscard]] CORE_API UE_STRING_CLASS TrimChar(ElementType CharacterToTrim, bool* bCharRemoved = nullptr) &&;
1783
1793 CORE_API int32 ParseIntoArray(TArray<UE_STRING_CLASS>& OutArray, const ElementType* pchDelim, bool bInCullEmpty = true) const;
1794
1806 CORE_API int32 ParseIntoArrayWS(TArray<UE_STRING_CLASS>& OutArray, const ElementType* pchExtraDelim = nullptr, bool bInCullEmpty = true) const;
1807
1817 CORE_API int32 ParseIntoArrayLines(TArray<UE_STRING_CLASS>& OutArray, bool bInCullEmpty = true) const;
1818
1830 CORE_API int32 ParseIntoArray(TArray<UE_STRING_CLASS>& OutArray, const ElementType*const* DelimArray, int32 NumDelims, bool bInCullEmpty = true) const;
1831
1840
1845
1850
1854 CORE_API void ReverseString();
1855
1864 [[nodiscard]] CORE_API UE_STRING_CLASS Replace(const ElementType* From, const ElementType* To, ESearchCase::Type SearchCase = ESearchCase::IgnoreCase) const &;
1865
1874 [[nodiscard]] CORE_API UE_STRING_CLASS Replace(const ElementType* From, const ElementType* To, ESearchCase::Type SearchCase = ESearchCase::IgnoreCase) &&;
1875
1885 CORE_API int32 ReplaceInline(const ElementType* SearchText, const ElementType* ReplacementText, ESearchCase::Type SearchCase = ESearchCase::IgnoreCase);
1886
1895 void ReplaceCharInline(ElementType From, ElementType To, ESearchCase::Type SearchCase = ESearchCase::IgnoreCase)
1896 {
1897 if (SearchCase == ESearchCase::IgnoreCase && TChar<ElementType>::IsAlpha(From))
1898 {
1899 ReplaceCharInlineIgnoreCase(From, To);
1900 }
1901 else
1902 {
1903 ReplaceCharInlineCaseSensitive(From, To);
1904 }
1905 }
1906
1907private:
1908 CORE_API void ReplaceCharInlineCaseSensitive(ElementType From, ElementType To);
1909 CORE_API void ReplaceCharInlineIgnoreCase(ElementType From, ElementType To);
1910
1911public:
1912
1917 {
1918 UE_STRING_CLASS Result(*this);
1919 return MoveTemp(Result).ReplaceQuotesWithEscapedQuotes();
1920 }
1921
1925 [[nodiscard]] CORE_API UE_STRING_CLASS ReplaceQuotesWithEscapedQuotes() &&;
1926
1933 CORE_API void ReplaceCharWithEscapedCharInline(const TArray<ElementType>* Chars = nullptr);
1934
1944 {
1945 UE_STRING_CLASS Result(*this);
1947 return Result;
1948 }
1949
1959 {
1961 return MoveTemp(*this);
1962 }
1963
1968 CORE_API void ReplaceEscapedCharWithCharInline(const TArray<ElementType>* Chars = nullptr);
1969
1976 {
1977 UE_STRING_CLASS Result(*this);
1979 return Result;
1980 }
1981
1988 {
1990 return MoveTemp(*this);
1991 }
1992
1997 CORE_API void ConvertTabsToSpacesInline(const int32 InSpacesPerTab);
1998
2005 {
2007 FinalString.ConvertTabsToSpacesInline(InSpacesPerTab);
2008 return FinalString;
2009 }
2010
2021
2022 // Takes the number passed in and formats the string in comma format (12345 becomes "12,345")
2023 [[nodiscard]] static CORE_API UE_STRING_CLASS FormatAsNumber(int32 InNumber);
2024
2025 // To allow more efficient memory handling, automatically adds one for the string termination.
2026 CORE_API void Reserve(int32 CharacterCount);
2027
2035 CORE_API void SerializeAsANSICharArray(FArchive& Ar, int32 MinCharacters = 0) const;
2036
2037
2040 {
2041 UE_STRING_CLASS Ret;
2042 Ret.AppendInt(Num);
2043 return Ret;
2044 }
2045
2047 CORE_API void AppendInt(int32 InNum);
2048
2056 [[nodiscard]] CORE_API bool ToBool() const;
2057
2066 [[nodiscard]] static CORE_API UE_STRING_CLASS FromBlob(const uint8* SrcBuffer, const uint32 SrcSize);
2067
2076 static CORE_API bool ToBlob(const UE_STRING_CLASS& Source,uint8* DestBuffer, const uint32 DestSize);
2077
2086 [[nodiscard]] static CORE_API UE_STRING_CLASS FromHexBlob(const uint8* SrcBuffer, const uint32 SrcSize);
2087
2096 static CORE_API bool ToHexBlob(const UE_STRING_CLASS& Source, uint8* DestBuffer, const uint32 DestSize);
2097
2107 [[nodiscard]] static CORE_API UE_STRING_CLASS SanitizeFloat(double InFloat, const int32 InMinFractionalDigits = 1);
2108
2117 template <typename RangeType>
2118 [[nodiscard]] static UE_STRING_CLASS Join(const RangeType& Range, const ElementType* Separator)
2119 {
2120 UE_STRING_CLASS Result;
2121 bool First = true;
2122 for (const auto& Element : Range)
2123 {
2124 if (First)
2125 {
2126 First = false;
2127 }
2128 else
2129 {
2130 Result += Separator;
2131 }
2132
2133 Result += Element;
2134 }
2135
2136 return Result;
2137 }
2138
2148 template <typename RangeType, typename ProjectionType>
2149 [[nodiscard]] static UE_STRING_CLASS JoinBy(const RangeType& Range, const ElementType* Separator, ProjectionType Proj)
2150 {
2151 UE_STRING_CLASS Result;
2152 bool First = true;
2153 for (const auto& Element : Range)
2154 {
2155 if (First)
2156 {
2157 First = false;
2158 }
2159 else
2160 {
2161 Result += Separator;
2162 }
2163
2164 Result += Invoke(Proj, Element);
2165 }
2166
2167 return Result;
2168 }
2169
2171 {
2172 Data.CountBytes(Ar);
2173 }
2174
2177 {
2178 // This must match the GetTypeHash behavior of FStringView
2179 return FCrc::Strihash_DEPRECATED(S.Len(), *S);
2180 }
2181
2183 {
2184 const AutoRTFM::EContextStatus Status = AutoRTFM::Close([&] { Closed = Open; });
2185 ensure(AutoRTFM::EContextStatus::OnTrack == Status);
2186 }
2187};
2188
2189template<> struct TIsZeroConstructType<UE_STRING_CLASS> { enum { Value = true }; };
2190
2191template<>
2193{
2198};
2199
2200[[nodiscard]] inline UE_STRING_CLASS::ElementType* GetData(UE_STRING_CLASS& String)
2201{
2202 return String.GetCharArray().GetData();
2203}
2204
2205[[nodiscard]] inline const UE_STRING_CLASS::ElementType* GetData(const UE_STRING_CLASS& String)
2206{
2207 return String.GetCharArray().GetData();
2208}
2209
2211{
2212 return String.Len();
2213}
2214
2219
2227
2253inline void LexFromString(uint32& OutValue, const UE_STRING_CHARTYPE* Buffer) { OutValue = (uint32)TCString<UE_STRING_CHARTYPE>::Atoi64(Buffer); } //64 because this unsigned and so Atoi might overflow
2259
2262template <UE::CArithmetic T>
2264{
2265 if (Buffer[0] == '\0')
2266 {
2267 OutValue = 0;
2268 return false;
2269 }
2270
2272 if (OutValue == 0 && FMath::IsFinite((float)OutValue)) //@TODO:FLOATPRECISION: ? huh ?
2273 {
2274 bool bSawZero = false;
2277 {
2278 C = *(++Buffer);
2279 }
2280
2281 while (C != CHARTEXT(UE_STRING_CHARTYPE, '\0') && !TChar<UE_STRING_CHARTYPE>::IsWhitespace(C) && (std::is_floating_point_v<T> || C != CHARTEXT(UE_STRING_CHARTYPE, '.')))
2282 {
2284 if (!bSawZero && C != CHARTEXT(UE_STRING_CHARTYPE, '.'))
2285 {
2286 return false;
2287 }
2288
2289 C = *(++Buffer);
2290 }
2291 return bSawZero;
2292 }
2293
2294 return true;
2295}
2296
2299{
2301 return true;
2302}
2303template <typename StringType = FString>
2305{
2306 return MoveTemp(Str);
2307}
2308
2309template <typename StringType = FString>
2311{
2312 return Str;
2313}
2314
2326[[nodiscard]] UE_FORCEINLINE_HINT const UE_STRING_CLASS::ElementType* ToCStr(const UE_STRING_CLASS& Str)
2327{
2328 return *Str;
2329}
2330
2340
2350
2351#undef UE_INCLUDETOOL_IGNORE_INCONSISTENT_STATE
#define NULL
Definition oodle2base.h:134
EAllowShrinking
Definition AllowShrinking.h:10
#define UE_ALLOWSHRINKING_BOOL_DEPRECATED(FunctionName)
Definition AllowShrinking.h:31
#define VARARGS
Definition AndroidPlatform.h:134
#define UE_STRING_CLASS
Definition AnsiString.cpp:6
#define UE_STRING_CHARTYPE
Definition AnsiString.cpp:7
#define UE_STRING_DEPRECATED(Version, Message)
Definition AnsiString.h:12
#define UE_STRING_PRINTF_FMT_CHARTYPE
Definition AnsiString.h:11
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
#define ensure( InExpression)
Definition AssertionMacros.h:464
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
@ INDEX_NONE
Definition CoreMiscDefines.h:150
EConstEval
Definition CoreMiscDefines.h:161
@ ConstEval
Definition CoreMiscDefines.h:161
FPlatformTypes::CHAR16 UCS2CHAR
A 16-bit character containing a UCS2 (Unicode, 16-bit, fixed-width) code unit, used for compatibility...
Definition Platform.h:1139
FPlatformTypes::int16 int16
A 16-bit signed integer.
Definition Platform.h:1123
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
#define UE_LIFETIMEBOUND
Definition Platform.h:812
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::SIZE_T SIZE_T
An unsigned integer the same size as a pointer, the same as UPTRINT.
Definition Platform.h:1150
FPlatformTypes::UTF32CHAR UTF32CHAR
A 32-bit character containing a UTF32 (Unicode, 32-bit, fixed-width) code unit.
Definition Platform.h:1143
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::WIDECHAR WIDECHAR
A wide character. Normally a signed type.
Definition Platform.h:1133
#define CHARTEXT(CharType, x)
Definition Platform.h:1291
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::UTF8CHAR UTF8CHAR
An 8-bit character containing a UTF8 (Unicode, 8-bit, variable-width) code unit.
Definition Platform.h:1137
#define UE_FORCEINLINE_HINT
Definition Platform.h:723
FPlatformTypes::ANSICHAR ANSICHAR
An ANSI character. Normally a signed type.
Definition Platform.h:1131
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
AUTORTFM_INFER UE_FORCEINLINE_HINT constexpr auto Invoke(FuncType &&Func, ArgTypes &&... Args) -> decltype(((FuncType &&) Func)((ArgTypes &&) Args...))
Definition Invoke.h:44
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
typename TElementType< T >::Type TElementType_T
Definition ElementType.h:57
FArchive & operator<<(FArchive &Ar, FEnvQueryDebugProfileData::FStep &Data)
Definition EnvQueryTypes.cpp:489
return true
Definition ExternalRpcRegistry.cpp:601
@ Num
Definition MetalRHIPrivate.h:234
@ Char
Character type.
#define MAX_int32
Definition NumericLimits.h:25
#define Split(a, ahi, alo)
Definition Predicates.inl:204
#define PREPROCESSOR_TO_STRING(Token)
Definition PreprocessorHelpers.h:103
#define PREPROCESSOR_JOIN(TokenA, TokenB)
Definition PreprocessorHelpers.h:104
#define UE_REQUIRES(...)
Definition Requires.h:86
auto AppendChars(TStringBuilderBase< CharType > &Builder)
Definition StringBuilder.h:693
auto GetNum(const TStringConversion< Converter, DefaultConversionSize > &Conversion) -> decltype(Conversion.Length())
Definition StringConv.h:808
auto GetData(const TStringConversion< Converter, DefaultConversionSize > &Conversion) -> decltype(Conversion.Get())
Definition StringConv.h:802
bool LexTryParseString(T &OutValue, const UE_STRING_CHARTYPE *Buffer)
Definition UnrealString.h.inl:2263
int32 GetNum(const UE_STRING_CLASS &String)
Definition UnrealString.h.inl:2210
CORE_API void BytesToHex(const uint8 *Bytes, int32 NumBytes, UE_STRING_CLASS &Out)
CORE_API int32 HexToBytes(const UE_STRING_CLASS &HexString, uint8 *OutBytes)
Definition String.cpp.inl:1955
CORE_API UE_STRING_CLASS SlugStringForValidName(const UE_STRING_CLASS &DisplayString, const TCHAR *ReplaceWith=TEXT(""))
CORE_API int32 FindMatchingClosingParenthesis(const UE_STRING_CLASS &TargetString, const int32 StartSearch=0)
Definition String.cpp.inl:1960
void LexFromString(int8 &OutValue, const UE_STRING_CHARTYPE *Buffer)
Definition UnrealString.h.inl:2247
TMap< UE_STRING_CLASS, FStringFormatArg > FormatNamedArguments
Definition UnrealString.h.inl:36
UE_STRING_CHARTYPE * GetData(UE_STRING_CLASS &)
Definition UnrealString.h.inl:2200
CORE_API void BytesToHexLower(const uint8 *Bytes, int32 NumBytes, UE_STRING_CLASS &Out)
UE_FORCEINLINE_HINT StringType LexToString(UE_STRING_CLASS &&Str)
Definition UnrealString.h.inl:2304
UE_FORCEINLINE_HINT const UE_STRING_CLASS::ElementType * ToCStr(const UE_STRING_CLASS &Str)
Definition UnrealString.h.inl:2326
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
#define UE_STRING_PRINTF_FMT_CHARTYPE2
Definition Utf8String.h:14
uint32 Size
Definition VulkanMemory.cpp:4034
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Core.Build.cs:8
Definition Archive.h:1208
Definition Array.h:670
UE_NODEBUG UE_FORCEINLINE_HINT ElementType * GetData() UE_LIFETIMEBOUND
Definition Array.h:1027
Definition Array.h:64
Definition UnrealString.h.inl:34
Definition ContainerAllocationPolicies.h:830
Definition UnrealString.h.inl:55
UE_FORCEINLINE_HINT friend UE_STRING_CLASS operator+(UE_STRING_CLASS &&Lhs, UE_STRING_CLASS &&Rhs)
Definition UnrealString.h.inl:686
UE_STRING_CLASS ReplaceCharWithEscapedChar(const TArray< ElementType > *Chars=nullptr) &&
Definition UnrealString.h.inl:1958
CORE_API void PathAppend(const ElementType *Str, int32 StrLength)
Definition String.cpp.inl:824
UE_STRING_CLASS & operator/=(const ElementType *Str)
Definition UnrealString.h.inl:755
const ElementType & operator[](int32 Index) const UE_LIFETIMEBOUND
Definition UnrealString.h.inl:273
DataType::TIterator TIterator
Definition UnrealString.h.inl:282
UE_FORCEINLINE_HINT friend UE_STRING_CLASS operator+(CharRangeType &&Lhs, const UE_STRING_CLASS &Rhs)
Definition UnrealString.h.inl:702
UE_FORCEINLINE_HINT friend UE_STRING_CLASS operator+(const UE_STRING_CLASS &Lhs, const ElementType *Rhs)
Definition UnrealString.h.inl:689
UE_FORCEINLINE_HINT UE_STRING_CLASS Mid(int32 Start) &&
Definition UnrealString.h.inl:1072
bool EndsWith(const ElementType *InSuffix, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase) const
Definition UnrealString.h.inl:1608
UE_FORCEINLINE_HINT DataType & GetCharArray() UE_LIFETIMEBOUND
Definition UnrealString.h.inl:384
bool EndsWith(CharRangeType &&InSuffix, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase) const
Definition UnrealString.h.inl:1595
UE_FORCEINLINE_HINT bool UEOpGreaterThan(const CharType *Rhs) const
Definition UnrealString.h.inl:921
UE_FORCEINLINE_HINT friend UE_STRING_CLASS operator+(const ElementType *Lhs, UE_STRING_CLASS &&Rhs)
Definition UnrealString.h.inl:688
friend UE_STRING_CLASS operator/(UE_STRING_CLASS &&Lhs, const UE_STRING_CLASS &Rhs)
Definition UnrealString.h.inl:860
UE_STRING_CLASS & Append(const CharType *Str, int32 Count)
Definition UnrealString.h.inl:417
UE_STRING_CLASS(CharRangeType &&Str, int32 ExtraSlack)
Definition UnrealString.h.inl:171
UE_STRING_CLASS ConvertTabsToSpaces(const int32 InSpacesPerTab) &&
Definition UnrealString.h.inl:2016
void LeftChopInline(int32 Count, EAllowShrinking AllowShrinking=EAllowShrinking::Default)
Definition UnrealString.h.inl:1010
UE_STRING_CLASS Right(int32 Count) const &
Definition UnrealString.h.inl:1022
UE_STRING_DEPRECATED(5.4, "This constructor has been deprecated - please use " PREPROCESSOR_TO_STRING(UE_STRING_CLASS) "::ConstructWithSlack(Ptr, Size) instead.") CORE_API UE_STRING_CLASS(const UCS2CHAR *Str
int32 FindLastCharByPredicate(Predicate Pred, int32 Count) const
Definition UnrealString.h.inl:1292
friend UE_STRING_CLASS operator+(const UE_STRING_CLASS &Lhs, CharType Rhs)
Definition UnrealString.h.inl:636
bool Equals(const UE_STRING_CLASS &Other, ESearchCase::Type SearchCase=ESearchCase::CaseSensitive) const
Definition UnrealString.h.inl:1318
CORE_API void ReplaceCharWithEscapedCharInline(const TArray< ElementType > *Chars=nullptr)
Definition String.cpp.inl:1639
UE_STRING_CLASS Right(int32 Count) &&
Definition UnrealString.h.inl:1028
UE_FORCEINLINE_HINT void RightChopInline(int32 Count, EAllowShrinking AllowShrinking=EAllowShrinking::Default)
Definition UnrealString.h.inl:1056
bool RemoveFromStart(const ElementType *InPrefix, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase)
Definition UnrealString.h.inl:533
friend UE_STRING_CLASS operator/(const UE_STRING_CLASS &Lhs, const UE_STRING_CLASS &Rhs)
Definition UnrealString.h.inl:844
UE_STRING_CLASS & operator=(const UE_STRING_CLASS &)=default
UE_STRING_CLASS & Append(CharRangeType &&Str)
Definition UnrealString.h.inl:444
bool MatchesWildcard(const UE_STRING_CLASS &Wildcard, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase) const
Definition UnrealString.h.inl:1679
UE_STRING_CLASS & Append(CharType *Str)
Definition UnrealString.h.inl:431
friend UE_STRING_CLASS operator/(UE_STRING_CLASS &&Lhs, const ElementType *Rhs)
Definition UnrealString.h.inl:826
UE_STRING_CLASS ReplaceCharWithEscapedChar(const TArray< ElementType > *Chars=nullptr) const &
Definition UnrealString.h.inl:1943
bool MatchesWildcard(CharRangeType &&Wildcard, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase) const
Definition UnrealString.h.inl:1652
friend UE_STRING_CLASS operator+(UE_STRING_CLASS &&Lhs, CharType Rhs)
Definition UnrealString.h.inl:658
static UE_STRING_CLASS FromInt(int32 Num)
Definition UnrealString.h.inl:2039
bool MatchesWildcard(const ElementType *Wildcard, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase) const
Definition UnrealString.h.inl:1666
UE_FORCEINLINE_HINT bool UEOpEquals(const CharType *Rhs) const
Definition UnrealString.h.inl:948
UE_FORCEINLINE_HINT DataType::RangedForReverseIteratorType rend()
Definition UnrealString.h.inl:307
bool RemoveFromStart(const UE_STRING_CLASS &InPrefix, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase)
Definition UnrealString.h.inl:545
UE_STRING_CLASS & operator=(CharRangeType &&Range)
Definition UnrealString.h.inl:245
UE_STRING_CLASS RightChop(int32 Count) &&
Definition UnrealString.h.inl:1049
static void AutoRTFMAssignFromOpenToClosed(UE_STRING_CLASS &Closed, const UE_STRING_CLASS &Open)
Definition UnrealString.h.inl:2182
UE_STRING_PRINTF_FMT_CHARTYPE FmtCharType
Definition UnrealString.h.inl:59
bool Contains(CharRangeType &&SubStr, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase, ESearchDir::Type SearchDir=ESearchDir::FromStart) const
Definition UnrealString.h.inl:1209
static UE_STRING_CLASS Format(const FmtCharType *InFormatString, const FStringFormatOrderedArguments &InOrderedArguments)
Definition UnrealString.h.inl:1482
static UE_STRING_CLASS JoinBy(const RangeType &Range, const ElementType *Separator, ProjectionType Proj)
Definition UnrealString.h.inl:2149
UE_STRING_CLASS ConvertTabsToSpaces(const int32 InSpacesPerTab) const &
Definition UnrealString.h.inl:2004
bool RemoveFromEnd(const ElementType *InSuffix, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase)
Definition UnrealString.h.inl:589
UE_STRING_CLASS & operator+=(AppendedCharType Char)
Definition UnrealString.h.inl:465
UE_FORCEINLINE_HINT UE_STRING_CLASS(const UE_STRING_CLASS &Other, int32 ExtraSlack)
Definition UnrealString.h.inl:88
UE_FORCEINLINE_HINT const ElementType * operator*() const UE_LIFETIMEBOUND
Definition UnrealString.h.inl:373
UE_FORCEINLINE_HINT bool IsValidIndex(int32 Index) const
Definition UnrealString.h.inl:363
UE_FORCEINLINE_HINT DataType::RangedForConstIteratorType end() const
Definition UnrealString.h.inl:304
static constexpr bool bHasIntrusiveUnsetOptionalState
Definition UnrealString.h.inl:212
void CheckInvariants() const
Definition UnrealString.h.inl:318
bool UEOpEquals(FIntrusiveUnsetOptionalState Tag) const
Definition UnrealString.h.inl:219
CORE_API void ReplaceEscapedCharWithCharInline(const TArray< ElementType > *Chars=nullptr)
Definition String.cpp.inl:1656
UE_FORCEINLINE_HINT bool UEOpEquals(const UE_STRING_CLASS &Rhs) const
Definition UnrealString.h.inl:934
static CORE_API UE_STRING_CLASS ChrN(int32 NumCharacters, ElementType Char)
Definition String.cpp.inl:1274
CORE_API void AppendInt(int32 InNum)
Definition String.cpp.inl:1108
bool RemoveFromStart(CharRangeType &&InPrefix, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase)
Definition UnrealString.h.inl:520
void MidInline(int32 Start, int32 Count=MAX_int32, EAllowShrinking AllowShrinking=EAllowShrinking::Default)
Definition UnrealString.h.inl:1075
int32 Find(const UE_STRING_CLASS &SubStr, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase, ESearchDir::Type SearchDir=ESearchDir::FromStart, int32 StartPosition=INDEX_NONE) const
Definition UnrealString.h.inl:1163
CORE_API UE_STRING_CLASS & AppendChar(ElementType InChar)
Definition String.cpp.inl:368
UE_STRING_CLASS ReplaceEscapedCharWithChar(const TArray< ElementType > *Chars=nullptr) const &
Definition UnrealString.h.inl:1975
UE_FORCEINLINE_HINT friend UE_STRING_CLASS operator+(UE_STRING_CLASS &&Lhs, CharRangeType &&Rhs)
Definition UnrealString.h.inl:744
UE_STRING_CLASS LeftChop(int32 Count) &&
Definition UnrealString.h.inl:1003
void LeftInline(int32 Count, EAllowShrinking AllowShrinking=EAllowShrinking::Default)
Definition UnrealString.h.inl:984
UE_FORCEINLINE_HINT bool Contains(const ElementType *SubStr, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase, ESearchDir::Type SearchDir=ESearchDir::FromStart) const
Definition UnrealString.h.inl:1224
UE_STRING_CLASS & Appendf(UE::Core::TCheckedFormatString< FmtCharType, Types... > Fmt, Types... Args)
Definition UnrealString.h.inl:1440
int32 Find(const ElementType *SubStr, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase, ESearchDir::Type SearchDir=ESearchDir::FromStart, int32 StartPosition=INDEX_NONE) const
Definition UnrealString.h.inl:1140
UE_FORCEINLINE_HINT DataType::RangedForConstReverseIteratorType rend() const
Definition UnrealString.h.inl:308
CORE_API void ConvertTabsToSpacesInline(const int32 InSpacesPerTab)
Definition String.cpp.inl:1680
static CORE_API UE_STRING_CLASS Chr(ElementType Ch)
Definition String.cpp.inl:1267
UE_FORCEINLINE_HINT bool Contains(const ElementType *SubStr, int32 SubStrLen, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase, ESearchDir::Type SearchDir=ESearchDir::FromStart) const
Definition UnrealString.h.inl:1253
int32 Compare(const UE_STRING_CLASS &Other, ESearchCase::Type SearchCase=ESearchCase::CaseSensitive) const
Definition UnrealString.h.inl:1350
UE_FORCEINLINE_HINT void CountBytes(FArchive &Ar) const
Definition UnrealString.h.inl:2170
UE_FORCEINLINE_HINT TIterator CreateIterator()
Definition UnrealString.h.inl:286
friend UE_STRING_CLASS operator/(const UE_STRING_CLASS &Lhs, const ElementType *Rhs)
Definition UnrealString.h.inl:808
friend UE_STRING_CLASS operator/(const ElementType *Lhs, const UE_STRING_CLASS &Rhs)
Definition UnrealString.h.inl:876
bool StartsWith(const ElementType *InPrefix, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase) const
Definition UnrealString.h.inl:1552
UE_STRING_CLASS ReplaceEscapedCharWithChar(const TArray< ElementType > *Chars=nullptr) &&
Definition UnrealString.h.inl:1987
UE_FORCEINLINE_HINT bool Contains(const UE_STRING_CLASS &SubStr, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase, ESearchDir::Type SearchDir=ESearchDir::FromStart) const
Definition UnrealString.h.inl:1238
UE_STRING_CLASS & operator=(UE_STRING_CLASS &&)=default
UE_FORCEINLINE_HINT UE_STRING_CLASS(UE_STRING_CLASS &&Other, int32 ExtraSlack)
Definition UnrealString.h.inl:99
DataType::TConstIterator TConstIterator
Definition UnrealString.h.inl:283
UE_FORCEINLINE_HINT auto operator+=(StrType &&Str) -> decltype(Append(Forward< StrType >(Str)))
Definition UnrealString.h.inl:455
static CORE_API UE_STRING_CLASS ConstructWithSlack(const ANSICHAR *Str, int32 ExtraSlack)
Definition String.cpp.inl:251
const ANSICHAR * Str
Definition UnrealString.h.inl:112
UE_STRING_CLASS()=default
static UE_STRING_CLASS Format(const FmtCharType *InFormatString, const PREPROCESSOR_JOIN(UE_STRING_CLASS, FormatNamedArguments)&InNamedArguments)
Definition UnrealString.h.inl:1465
static CORE_API UE_STRING_CLASS ConstructFromPtrSize(const ANSICHAR *Str, int32 Size)
Definition String.cpp.inl:246
UE_STRING_CLASS(const UE_STRING_CLASS &)=default
UE_FORCEINLINE_HINT bool UEOpLessThan(const UE_STRING_CLASS &Rhs) const
Definition UnrealString.h.inl:893
UE_FORCEINLINE_HINT friend UE_STRING_CLASS operator+(const UE_STRING_CLASS &Lhs, UE_STRING_CLASS &&Rhs)
Definition UnrealString.h.inl:685
UE_FORCEINLINE_HINT TConstIterator CreateConstIterator() const
Definition UnrealString.h.inl:292
UE_STRING_CLASS ReplaceQuotesWithEscapedQuotes() const &
Definition UnrealString.h.inl:1916
UE_FORCEINLINE_HINT friend UE_STRING_CLASS operator+(UE_STRING_CLASS &&Lhs, const ElementType *Rhs)
Definition UnrealString.h.inl:690
bool EndsWith(const UE_STRING_CLASS &InSuffix, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase) const
Definition UnrealString.h.inl:1620
UE_FORCEINLINE_HINT DataType::RangedForConstIteratorType begin() const
Definition UnrealString.h.inl:302
bool RemoveFromEnd(const UE_STRING_CLASS &InSuffix, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase)
Definition UnrealString.h.inl:601
UE_FORCEINLINE_HINT UE_STRING_CLASS Left(int32 Count) const &
Definition UnrealString.h.inl:972
UE_STRING_DEPRECATED(5.4, "This constructor has been deprecated - please use " PREPROCESSOR_TO_STRING(UE_STRING_CLASS) "::ConstructWithSlack(Ptr, Size) instead.") CORE_API UE_STRING_CLASS(const UTF8CHAR *Str
UE_STRING_CLASS(FIntrusiveUnsetOptionalState Tag)
Definition UnrealString.h.inl:215
UE_FORCEINLINE_HINT SIZE_T NumBytesWithoutNull() const
Definition UnrealString.h.inl:960
UE_STRING_CLASS(UE_STRING_CLASS &&)=default
CORE_API void RemoveAt(int32 Index, EAllowShrinking AllowShrinking=EAllowShrinking::Default)
Definition String.cpp.inl:667
UE_FORCEINLINE_HINT friend UE_STRING_CLASS operator+(const UE_STRING_CLASS &Lhs, CharRangeType &&Rhs)
Definition UnrealString.h.inl:730
bool StartsWith(CharRangeType &&InPrefix, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase) const
Definition UnrealString.h.inl:1539
static UE_STRING_CLASS Join(const RangeType &Range, const ElementType *Separator)
Definition UnrealString.h.inl:2118
UE_FORCEINLINE_HINT DataType::RangedForConstReverseIteratorType rbegin() const
Definition UnrealString.h.inl:306
static CORE_API UE_STRING_CLASS ConstructFromPtrSizeWithSlack(const ANSICHAR *Str, int32 Size, int32 ExtraSlack)
Definition String.cpp.inl:256
UE_STRING_CLASS Left(int32 Count) &&
Definition UnrealString.h.inl:977
consteval UE_STRING_CLASS(EConstEval)
Definition UnrealString.h.inl:73
UE_STRING_DEPRECATED(5.4, "This constructor has been deprecated - please use " PREPROCESSOR_TO_STRING(UE_STRING_CLASS) "::ConstructWithSlack(Ptr, Size) instead.") CORE_API UE_STRING_CLASS(const WIDECHAR *Str
UE_FORCEINLINE_HINT friend UE_STRING_CLASS operator+(const ElementType *Lhs, const UE_STRING_CLASS &Rhs)
Definition UnrealString.h.inl:687
CORE_API void Reserve(int32 CharacterCount)
Definition String.cpp.inl:307
UE_STRING_CHARTYPE ElementType
Definition UnrealString.h.inl:58
CORE_API UE_STRING_CLASS RightChop(int32 Count) const &
Definition String.cpp.inl:856
UE_FORCEINLINE_HINT DataType::RangedForReverseIteratorType rbegin()
Definition UnrealString.h.inl:305
UE_FORCEINLINE_HINT friend UE_STRING_CLASS operator+(CharRangeType &&Lhs, UE_STRING_CLASS &&Rhs)
Definition UnrealString.h.inl:716
UE_STRING_CLASS LeftChop(int32 Count) const &
Definition UnrealString.h.inl:997
UE_FORCEINLINE_HINT bool UEOpLessThan(const CharType *Rhs) const
Definition UnrealString.h.inl:907
UE_FORCEINLINE_HINT DataType::RangedForIteratorType end()
Definition UnrealString.h.inl:303
UE_FORCEINLINE_HINT friend UE_STRING_CLASS operator+(UE_STRING_CLASS &&Lhs, const UE_STRING_CLASS &Rhs)
Definition UnrealString.h.inl:684
UE_STRING_CLASS & operator/=(CharRangeType &&Str)
Definition UnrealString.h.inl:778
UE_FORCEINLINE_HINT const DataType & GetCharArray() const UE_LIFETIMEBOUND
Definition UnrealString.h.inl:390
UE_FORCEINLINE_HINT UE_STRING_CLASS(CharRangeType &&Str)
Definition UnrealString.h.inl:155
void RightInline(int32 Count, EAllowShrinking AllowShrinking=EAllowShrinking::Default)
Definition UnrealString.h.inl:1035
UE_FORCEINLINE_HINT SIZE_T NumBytesWithNull() const
Definition UnrealString.h.inl:966
UE_STRING_CLASS & operator/=(const CharType *Str)
Definition UnrealString.h.inl:794
UE_FORCEINLINE_HINT UE_STRING_CLASS Mid(int32 Start) const &
Definition UnrealString.h.inl:1071
UE_FORCEINLINE_HINT SIZE_T GetAllocatedSize() const
Definition UnrealString.h.inl:310
bool StartsWith(const UE_STRING_CLASS &InPrefix, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase) const
Definition UnrealString.h.inl:1564
UE_FORCEINLINE_HINT bool IsEmpty() const
Definition UnrealString.h.inl:339
UE_FORCEINLINE_HINT bool FindChar(ElementType InChar, int32 &OutIndex) const
Definition UnrealString.h.inl:1266
friend UE_FORCEINLINE_HINT uint32 GetTypeHash(const UE_STRING_CLASS &S)
Definition UnrealString.h.inl:2176
UE_FORCEINLINE_HINT int32 FindLastCharByPredicate(Predicate Pred) const
Definition UnrealString.h.inl:1306
bool RemoveFromEnd(CharRangeType &&InSuffix, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase)
Definition UnrealString.h.inl:576
UE_FORCEINLINE_HINT int32 Len() const
Definition UnrealString.h.inl:954
UE_FORCEINLINE_HINT DataType::RangedForIteratorType begin()
Definition UnrealString.h.inl:301
ElementType & operator[](int32 Index) UE_LIFETIMEBOUND
Definition UnrealString.h.inl:261
UE_FORCEINLINE_HINT bool FindLastChar(ElementType InChar, int32 &OutIndex) const
Definition UnrealString.h.inl:1278
UE_FORCEINLINE_HINT friend UE_STRING_CLASS operator+(const UE_STRING_CLASS &Lhs, const UE_STRING_CLASS &Rhs)
Definition UnrealString.h.inl:683
int32 Find(CharRangeType &&SubStr, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase, ESearchDir::Type SearchDir=ESearchDir::FromStart, int32 StartPosition=INDEX_NONE) const
Definition UnrealString.h.inl:1116
Definition CString.h:19
Type
Definition CString.h:21
@ IgnoreCase
Definition CString.h:26
@ CaseSensitive
Definition CString.h:23
Type
Definition CString.h:34
@ FromStart
Definition CString.h:36
Definition AdvancedWidgetsModule.cpp:13
U16 Index
Definition radfft.cpp:71
static uint32 Strihash_DEPRECATED(const CharType *Data)
Definition IntrusiveUnsetOptionalState.h:71
static constexpr UE_FORCEINLINE_HINT T Clamp(const T X, const T MinValue, const T MaxValue)
Definition UnrealMathUtility.h:592
Definition StringFormatArg.h:11
Definition CString.h:60
static UE_FORCEINLINE_HINT int32 Strcmp(const CharType *String1, const CharType *String2)
Definition CString.h:1018
static UE_FORCEINLINE_HINT int32 Stricmp(const CharType *String1, const CharType *String2)
Definition CString.h:1030
static UE_FORCEINLINE_HINT float Atof(const CharType *String)
Definition CString.h:1185
static int32 Strlen(const CharType *String)
Definition CString.h:1047
static UE_FORCEINLINE_HINT double Atod(const CharType *String)
Definition CString.h:1191
static UE_FORCEINLINE_HINT int64 Atoi64(const CharType *String)
Definition CString.h:1179
static bool ToBool(const CharType *String)
Definition CString.h:515
static UE_FORCEINLINE_HINT uint64 Strtoui64(const CharType *Start, CharType **End, int32 Base)
Definition CString.h:1209
Definition Char.h:76
static bool IsWhitespace(CharType Char)
Definition Char.h:282
Definition Array.h:206
Definition IsContiguousContainer.h:16
Definition UnrealTypeTraits.h:172
static UE_FORCEINLINE_HINT TCHAR const * GetName()
Definition UnrealString.h.inl:2194
Definition UnrealTypeTraits.h:191