UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
TextFilterUtils.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "Containers/Array.h"
6#include "CoreTypes.h"
8#include "Misc/CString.h"
9#include "UObject/NameTypes.h"
10
21
30
32
38{
39public:
42
46
48 CORE_API FTextFilterString(const FString& InString);
52
55
59
64
67
70
73
76
79
82
84 UE_FORCEINLINE_HINT const FString& AsString() const
85 {
86 return InternalString;
87 }
88
91 {
92 return FName(*InternalString);
93 }
94
97 {
98 return InternalString.IsEmpty();
99 }
100
101private:
103 CORE_API void UppercaseInternalString();
104
106 FString InternalString;
107
109 TArray<ANSICHAR> InternalStringAnsi;
110};
111
113{
114 template <typename CharType>
115 void IntToStringBuffer(CharType* Dest, int32 Source, int32 MaxLen)
116 {
117 int64 Num = Source; // This avoids having to deal with negating -MAX_int32-1
118 bool bIsNumberNegative = false;
119 const int32 TempBufferSize = 16; // 16 is big enough
120 CharType TempNum[TempBufferSize];
121 int32 TempAt = TempBufferSize; // fill the temp string from the top down.
122
123 // Correctly handle negative numbers and convert to positive integer.
124 if( Num < 0 )
125 {
126 bIsNumberNegative = true;
127 Num = -Num;
128 }
129
130 TempNum[--TempAt] = 0; // NULL terminator
131
132 // Convert to string assuming base ten and a positive integer.
133 do
134 {
135 TempNum[--TempAt] = CharType('0') + (Num % 10);
136 Num /= 10;
137 } while( Num );
138
139 // Append sign as we're going to reverse string afterwards.
141 {
142 TempNum[--TempAt] = CharType('-');
143 }
144
145 const CharType* CharPtr = TempNum + TempAt;
146 const int32 NumChars = TempBufferSize - TempAt - 1;
147 if (NumChars < MaxLen)
148 {
150 }
151 else if (MaxLen > 0)
152 {
153 *Dest = 0;
154 }
155 }
156
157 /*
158 * Fills string buffer with FName including number without forcing converting to wide character
159 */
160 struct FNameBufferWithNumber
161 {
162 public:
163
164 FNameBufferWithNumber() : bIsWide(false)
165 {
166 }
167
168 FNameBufferWithNumber(const FName& Name) : bIsWide(false)
169 {
170 Init(Name.GetDisplayNameEntry(), Name.GetNumber());
171 }
172
173 FNameBufferWithNumber(const FNameEntry* const NameEntry, int32 NumberInternal) : bIsWide(false)
174 {
176 }
177
179 {
180 Init(Name.GetDisplayNameEntry(), Name.GetNumber());
181 }
182
183 inline void Init(const FNameEntry* const NameEntry, int32 NumberInternal)
184 {
185 if (NameEntry == nullptr)
186 {
187 bIsWide = true;
188 FCString::Strncpy(WideName, TEXT("*INVALID*"), NAME_SIZE);
189 return;
190 }
191
192 if (NameEntry->IsWide())
193 {
194 bIsWide = true;
195 NameEntry->GetWideName(_WideName);
197 {
198 int32 Len = FCStringWide::Strlen(WideName);
199 WideName[Len++] = TEXT('_');
200 IntToStringBuffer(WideName + Len, NAME_INTERNAL_TO_EXTERNAL(NumberInternal), 16);
201 }
202 }
203 else
204 {
205 bIsWide = false;
206 NameEntry->GetAnsiName(_AnsiName);
208 {
209 int32 Len = FCStringAnsi::Strlen(AnsiName);
210 AnsiName[Len++] = '_';
211 IntToStringBuffer(AnsiName + Len, NAME_INTERNAL_TO_EXTERNAL(NumberInternal), 16);
212 }
213 }
214 }
215
216 UE_FORCEINLINE_HINT bool IsWide() const
217 {
218 return bIsWide;
219 }
220
221 inline ANSICHAR* GetAnsiNamePtr()
222 {
223 checkSlow(!IsWide());
224 return AnsiName;
225 }
226
227 inline WIDECHAR* GetWideNamePtr()
228 {
229 checkSlow(IsWide());
230 return WideName;
231 }
232
233 UE_FORCEINLINE_HINT int32 GetMaxBufferLength()
234 {
236 }
237
238 private:
239
240 bool bIsWide;
241
242 union
243 {
246 ANSICHAR _AnsiName[NAME_SIZE];
247 WIDECHAR _WideName[NAME_SIZE];
248 };
249 };
250
252 CORE_API bool TryConvertWideToAnsi(const FString& SourceWideString, TArray<ANSICHAR>& DestAnsiString);
253
255 CORE_API int32 NameStrincmp(const FName& Name, const FString& WideOther, const TArray<ANSICHAR>& AnsiOther, int32 Length);
256
259
262}
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define TEXT(x)
Definition Platform.h:1272
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
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define UE_FORCEINLINE_HINT
Definition Platform.h:723
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
void Init()
Definition LockFreeList.h:4
@ Num
Definition MetalRHIPrivate.h:234
#define NAME_NO_NUMBER_INTERNAL
Definition NameTypes.h:157
@ NAME_SIZE
Definition NameTypes.h:57
#define NAME_INTERNAL_TO_EXTERNAL(x)
Definition NameTypes.h:160
ETextFilterTextComparisonMode
Definition TextFilterUtils.h:24
@ NAME_WITH_NUMBER_SIZE
Definition TextFilterUtils.h:31
ETextFilterComparisonOperation
Definition TextFilterUtils.h:13
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition NameTypes.h:617
Definition TextFilterUtils.h:38
CORE_API FTextFilterString(FTextFilterString &&Other)
CORE_API bool CompareFString(const FString &InOther, const ETextFilterTextComparisonMode InTextComparisonMode) const
Definition TextFilterUtils.cpp:302
CORE_API FTextFilterString & operator=(const FTextFilterString &Other)
CORE_API FTextFilterString & operator=(FTextFilterString &&Other)
CORE_API FTextFilterString()
UE_FORCEINLINE_HINT FName AsName() const
Definition TextFilterUtils.h:90
CORE_API FTextFilterString(const FTextFilterString &Other)
CORE_API bool CanCompareNumeric(const FTextFilterString &InOther) const
Definition TextFilterUtils.cpp:329
CORE_API bool CompareName(const FName &InOther, const ETextFilterTextComparisonMode InTextComparisonMode) const
Definition TextFilterUtils.cpp:312
CORE_API bool CompareFStringView(FStringView InOther, const ETextFilterTextComparisonMode InTextComparisonMode) const
Definition TextFilterUtils.cpp:307
CORE_API bool CompareNumeric(const FTextFilterString &InOther, const ETextFilterComparisonOperation InComparisonOperation) const
Definition TextFilterUtils.cpp:334
CORE_API bool CompareText(const FTextFilterString &InOther, const ETextFilterTextComparisonMode InTextComparisonMode) const
Definition TextFilterUtils.cpp:297
UE_FORCEINLINE_HINT const FString & AsString() const
Definition TextFilterUtils.h:84
UE_FORCEINLINE_HINT bool IsEmpty() const
Definition TextFilterUtils.h:96
Definition Array.h:670
Definition TextFilterUtils.h:113
Definition NameTypes.h:279
static int32 Strlen(const CharType *String)
Definition CString.h:1047
static CharType * Strncpy(CharType *Dest, const CharType *Src, SIZE_T MaxLen)
Definition CString.h:991