UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
VVMUniqueString.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#if WITH_VERSE_VM || defined(__INTELLISENSE__)
6
7#include "Containers/Set.h"
10#include "VerseVM/VVMArray.h"
11#include "VerseVM/VVMCell.h"
12#include "VerseVM/VVMContext.h"
17
18namespace Verse
19{
20enum class EValueStringFormat;
21
22struct VUniqueString;
24
25template <typename T>
27
30template <typename T>
32{
33 typedef FUtf8StringView KeyInitType;
34 typedef VUniqueString& ElementInitType;
35
36 static FUtf8StringView GetSetKey(VUniqueString& Element);
37
38 static FUtf8StringView GetSetKey(const T& Element);
39
41
42 static uint32 GetKeyHash(FUtf8StringView Key);
43};
44
45template <>
47{
48};
49
50template <>
52{
53};
54
56{
57private:
60 VStringInternPool() = default;
61
63
65 COREUOBJECT_API virtual void ConductCensus() override;
66
67 // The pool doesn't own the string data, the context does. So these strings are stored as weakrefs.
68 // When the GC conducts a census, this string pool is also cleared of the strings that are unmarked.
70 static UE::FMutex Mutex;
71
72 friend struct VUniqueString;
74};
75
77struct VUniqueString final : VArray
78{
81
86 static VUniqueString& New(FAllocationContext Context, FUtf8StringView String)
87 {
88 return StringPool->Intern(Context, String);
89 }
90
91 bool operator==(const VUniqueString& Other) const
92 {
93 return this == &Other;
94 }
95
96 // Shadow `VArrayBase::AsStringView`, avoiding type test.
97 FUtf8StringView AsStringView() const
98 {
100 }
101
102 static constexpr bool SerializeIdentity = false;
103 static void SerializeLayout(FAllocationContext Context, VUniqueString*& This, FStructuredArchiveVisitor& Visitor);
104 void SerializeImpl(FAllocationContext Context, FStructuredArchiveVisitor& Visitor);
105
106private:
107 static VUniqueString& Make(FAllocationContext Context, FUtf8StringView String)
108 {
109 return *new (Context.AllocateFastCell(sizeof(VUniqueString))) VUniqueString(Context, String);
110 }
111
112 VUniqueString(FAllocationContext Context, FUtf8StringView String)
114 {
115 }
116
120 friend class VStringInternPool;
121};
122
125{
126 return PointerHash(&String);
127}
128
131struct VUniqueStringSet : VCell
132{
136
137 // This allows for this type to be used in range-based loops.
138 class FConstIterator
139 {
140 public:
141 const TWriteBarrier<VUniqueString>* operator->() const;
143 bool operator==(const FConstIterator& Rhs) const;
144 bool operator!=(const FConstIterator& Rhs) const;
145 FConstIterator& operator++();
146
147 private:
148 friend struct VUniqueStringSet;
149 FConstIterator(SetType::TRangedForConstIterator InCurrentIteration);
150 SetType::TRangedForConstIterator CurrentIteration;
151 };
152 FConstIterator begin() const;
153 FConstIterator end() const;
154
155 static VUniqueStringSet& New(FAllocationContext Context, const TSet<VUniqueString*> InSet);
156 static VUniqueStringSet& New(FAllocationContext Context, const std::initializer_list<FUtf8StringView>& InStrings);
157
158 bool operator==(const VUniqueStringSet& Other) const;
159
161 bool Equals(const VUniqueStringSet& Other) const;
162
163 uint32 Num() const;
164
165 FSetElementId FindId(const FUtf8StringView& String) const;
166
167 bool IsValidId(const FSetElementId& Id) const;
168
169 COREUOBJECT_API void AppendToStringImpl(FAllocationContext Context, FUtf8StringBuilderBase& Builder, EValueStringFormat Format, TSet<const void*>& VisitedObjects, uint32 RecursionDepth);
170
171private:
172 static SetType FormSet(FAllocationContext Context, const TSet<VUniqueString*>& InSet);
173 VUniqueStringSet(FAllocationContext Context, const TSet<VUniqueString*>& InSet);
174
175 static VUniqueStringSet& Make(FAllocationContext Context, const TSet<VUniqueString*>& InSet);
176 static bool Equals(const TSet<VUniqueString*>& A, const TSet<VUniqueString*>& B);
177
181
183 SetType Strings;
184
185 friend class VUniqueStringSetInternPool;
187};
188
191
193{
194 enum class EType : uint8
195 {
196 Cell,
197 Set,
198
203 Invalid
204 };
205
206 union
207 {
208 const VUniqueStringSet* Cell;
210 };
211
212 EType Type;
213
218};
219
221struct FHashableUniqueStringSetKeyFuncs : BaseKeyFuncs<TWeakBarrier<VUniqueStringSet>, TWeakBarrier<VUniqueStringSet>, /*bAllowDuplicateKeys*/ false>
222{
223 typedef FHashableUniqueStringSetKey KeyInitType;
224 typedef VUniqueStringSet& ElementInitType;
225
226 static KeyInitType GetSetKey(ElementInitType& Element);
227
228 static KeyInitType GetSetKey(const TWeakBarrier<VUniqueStringSet>& Element);
229
230 static bool Matches(KeyInitType A, KeyInitType B);
231
232 static uint32 GetKeyHash(KeyInitType Key);
233};
234
237{
238private:
241 VUniqueStringSetInternPool() = default;
242
245
247 COREUOBJECT_API virtual void ConductCensus() override;
248
250
251 static UE::FMutex Mutex;
252
253 friend struct VUniqueStringSet;
255};
256
257} // namespace Verse
258#endif // WITH_VERSE_VM
UE_FORCEINLINE_HINT FLinearColor operator*(float Scalar, const FLinearColor &Color)
Definition Color.h:473
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE_FORCEINLINE_HINT bool operator!=(const FIndexedPointer &Other) const
Definition LockFreeList.h:76
T * New(FMemStackBase &Mem, int32 Count=1, int32 Align=DEFAULT_ALIGNMENT)
Definition MemStack.h:259
@ Num
Definition MetalRHIPrivate.h:234
TStringView< UTF8CHAR > FUtf8StringView
Definition StringFwd.h:48
uint32 PointerHash(const void *Key)
Definition TypeHash.h:91
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition SetUtilities.h:95
Definition StringBuilder.h:79
Definition Mutex.h:18
Type
Definition PawnAction_Move.h:11
UE::FRecursiveMutex Mutex
Definition MeshPaintVirtualTexture.cpp:164
FORCEINLINE T * Get(const FObjectPtr &ObjectPtr)
Definition ObjectPtr.h:426
bool SerializeImpl(const UScriptStruct *InSourceEventType, const void *InSourceEventData, FLiveLinkSerializedFrameData &OutSerializedData)
Definition LiveLinkCompression.cpp:126
EType
Definition AccessDetection.h:11
bool operator==(const FCachedAssetKey &A, const FCachedAssetKey &B)
Definition AssetDataMap.h:501
FORCEINLINE FStridedReferenceIterator begin(FStridedReferenceView View)
Definition FastReferenceCollector.h:490
FORCEINLINE FStridedReferenceIterator end(FStridedReferenceView View)
Definition FastReferenceCollector.h:491
Definition Archive.h:36
EValueStringFormat
Definition VVMValuePrinting.h:17
uint32 GetTypeHash(TPtrVariant< Ts... > Ptr)
Definition VVMPtrVariant.h:83
VERSECOMPILER_API bool Matches(const CTypeBase *PositiveType1, const CTypeBase *NegativeType2, const uint32_t UploadedAtFnVersion)
Determine if argument PositiveType1 is a match for parameter NegativeType2
Definition SemanticTypes.cpp:2971
Definition SetUtilities.h:23