UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AssetIdentifier.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6
7class FCbFieldView;
8class FCbWriter;
9
12{
21
26
29 : PackageName(), PrimaryAssetType(PrimaryAssetId.PrimaryAssetType), ObjectName(PrimaryAssetId.PrimaryAssetName), ValueName(InValueName)
30 {}
31
33
35
45
47 bool IsPackage() const
48 {
49 return PackageName != NAME_None && !IsObject() && !IsValue();
50 }
51
53 bool IsObject() const
54 {
55 return ObjectName != NAME_None && !IsValue();
56 }
57
59 bool IsValue() const
60 {
61 return ValueName != NAME_None;
62 }
63
65 bool IsValid() const
66 {
68 }
69
71 FString ToString() const
72 {
73 TStringBuilder<256> Builder;
74 AppendString(Builder);
75 return FString::ConstructFromPtrSize(Builder.GetData(), Builder.Len());
76 }
77
79 void AppendString(FStringBuilderBase& Builder) const
80 {
82 {
84 }
85 else
86 {
88 if (ObjectName != NAME_None)
89 {
90 Builder.Append(TEXT("."));
91 ObjectName.AppendString(Builder);
92 }
93 }
94 if (ValueName != NAME_None)
95 {
96 Builder.Append(TEXT("::"));
97 ValueName.AppendString(Builder);
98 }
99 }
100
102 static FAssetIdentifier FromString(const FString& String)
103 {
104 // To right of :: is value
105 FString PackageString;
106 FString ObjectString;
107 FString ValueString;
108
109 // Try to split value out
110 if (!String.Split(TEXT("::"), &PackageString, &ValueString))
111 {
113 }
114
115 // Check if it's a valid primary asset id
117
118 if (PrimaryId.IsValid())
119 {
120 return FAssetIdentifier(PrimaryId, *ValueString);
121 }
122
123 // Try to split on first . , if it fails PackageString will stay the same
124 FString(PackageString).Split(TEXT("."), &PackageString, &ObjectString);
125
126 return FAssetIdentifier(*PackageString, *ObjectString, *ValueString);
127 }
128
129 friend inline bool operator==(const FAssetIdentifier& A, const FAssetIdentifier& B)
130 {
131 return A.PackageName == B.PackageName && A.PrimaryAssetType == B.PrimaryAssetType
132 && A.ObjectName == B.ObjectName && A.ValueName == B.ValueName;
133 }
134
135 friend inline uint32 GetTypeHash(const FAssetIdentifier& Key)
136 {
137 uint32 Hash = 0;
138
139 // Most of the time only packagename is set
140 if (Key.ObjectName.IsNone() && Key.ValueName.IsNone())
141 {
142 return GetTypeHash(Key.PackageName);
143 }
144
145 Hash = HashCombine(Hash, GetTypeHash(Key.PackageName));
146 Hash = HashCombine(Hash, GetTypeHash(Key.PrimaryAssetType));
147 Hash = HashCombine(Hash, GetTypeHash(Key.ObjectName));
148 Hash = HashCombine(Hash, GetTypeHash(Key.ValueName));
149 return Hash;
150 }
151
154 {
155 // Serialize bitfield of which elements to serialize, in general many are empty
156 uint8 FieldBits = 0;
157
158 if (Ar.IsSaving())
159 {
160 FieldBits |= (AssetIdentifier.PackageName != NAME_None) << 0;
161 FieldBits |= (AssetIdentifier.PrimaryAssetType.IsValid()) << 1;
162 FieldBits |= (AssetIdentifier.ObjectName != NAME_None) << 2;
163 FieldBits |= (AssetIdentifier.ValueName != NAME_None) << 3;
164 }
165
166 Ar << FieldBits;
167
168 if (FieldBits & (1 << 0))
169 {
170 Ar << AssetIdentifier.PackageName;
171 }
172 if (FieldBits & (1 << 1))
173 {
174 FName TypeName = AssetIdentifier.PrimaryAssetType.GetName();
175 Ar << TypeName;
176
177 if (Ar.IsLoading())
178 {
179 AssetIdentifier.PrimaryAssetType = TypeName;
180 }
181 }
182 if (FieldBits & (1 << 2))
183 {
184 Ar << AssetIdentifier.ObjectName;
185 }
186 if (FieldBits & (1 << 3))
187 {
188 Ar << AssetIdentifier.ValueName;
189 }
190
191 return Ar;
192 }
193
195 {
196 if (PrimaryAssetType != Other.PrimaryAssetType)
197 {
198 return PrimaryAssetType.LexicalLess(Other.PrimaryAssetType);
199 }
200 if (PackageName != Other.PackageName)
201 {
202 return PackageName.LexicalLess(Other.PackageName);
203 }
204 if (ObjectName != Other.ObjectName)
205 {
206 return ObjectName.LexicalLess(Other.ObjectName);
207 }
208 return ValueName.LexicalLess(Other.ValueName);
209 }
210
211 bool FastLess(const FAssetIdentifier& Other) const
212 {
213 if (PrimaryAssetType != Other.PrimaryAssetType)
214 {
215 return PrimaryAssetType.FastLess(Other.PrimaryAssetType);
216 }
217 if (PackageName != Other.PackageName)
218 {
219 return PackageName.FastLess(Other.PackageName);
220 }
221 if (ObjectName != Other.ObjectName)
222 {
223 return ObjectName.FastLess(Other.ObjectName);
224 }
225 return ValueName.FastLess(Other.ValueName);
226 }
227
228 COREUOBJECT_API void WriteCompactBinary(FCbWriter& Writer) const;
229private:
231 {
232 // Hidden friend function needs to be inline, but call a subfunction to hide the implementation
233 Identifier.WriteCompactBinary(Writer);
234 return Writer;
235 }
236 // Load Cannot be inline because we need to hide implementation and copy-by-value is invalid without definition
239};
240
#define TEXT(x)
Definition Platform.h:1272
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
UE_FORCEINLINE_HINT bool IsLoading() const
Definition Archive.h:236
UE_FORCEINLINE_HINT bool IsSaving() const
Definition Archive.h:248
Definition CompactBinary.h:610
Definition CompactBinaryWriter.h:68
Definition NameTypes.h:617
FORCEINLINE bool LexicalLess(const FName &Other) const
Definition NameTypes.h:821
FORCEINLINE bool FastLess(const FName &Other) const
Definition NameTypes.h:815
CORE_API void AppendString(FWideString &Out) const
Definition UnrealNames.cpp:3717
CharType * GetData() UE_LIFETIMEBOUND
Definition StringBuilder.h:120
BuilderType & Append(const OtherCharType *const String, const int32 Length)
Definition StringBuilder.h:238
int32 Len() const
Definition StringBuilder.h:114
Definition StringBuilder.h:509
Definition Object.h:95
Definition FieldSystemNoiseAlgo.cpp:6
Definition AssetIdentifier.h:12
COREUOBJECT_API friend bool LoadFromCompactBinary(FCbFieldView Field, FAssetIdentifier &Identifier)
Definition AssetData.cpp:53
COREUOBJECT_API void WriteCompactBinary(FCbWriter &Writer) const
Definition AssetData.cpp:40
friend uint32 GetTypeHash(const FAssetIdentifier &Key)
Definition AssetIdentifier.h:135
FPrimaryAssetId GetPrimaryAssetId() const
Definition AssetIdentifier.h:37
bool IsValue() const
Definition AssetIdentifier.h:59
FPrimaryAssetType PrimaryAssetType
Definition AssetIdentifier.h:16
bool IsObject() const
Definition AssetIdentifier.h:53
bool IsPackage() const
Definition AssetIdentifier.h:47
friend bool operator==(const FAssetIdentifier &A, const FAssetIdentifier &B)
Definition AssetIdentifier.h:129
FName ValueName
Definition AssetIdentifier.h:20
static FAssetIdentifier FromString(const FString &String)
Definition AssetIdentifier.h:102
bool LexicalLess(const FAssetIdentifier &Other) const
Definition AssetIdentifier.h:194
FAssetIdentifier(FName InPackageName, FName InObjectName=FName(), FName InValueName=FName())
Definition AssetIdentifier.h:23
FName PackageName
Definition AssetIdentifier.h:14
bool FastLess(const FAssetIdentifier &Other) const
Definition AssetIdentifier.h:211
COREUOBJECT_API friend void SerializeForLog(FCbWriter &Writer, const FAssetIdentifier &Value)
Definition AssetData.cpp:87
FName ObjectName
Definition AssetIdentifier.h:18
FAssetIdentifier(const FPrimaryAssetId &PrimaryAssetId, FName InValueName=FName())
Definition AssetIdentifier.h:28
friend FArchive & operator<<(FArchive &Ar, FAssetIdentifier &AssetIdentifier)
Definition AssetIdentifier.h:153
bool IsValid() const
Definition AssetIdentifier.h:65
friend FCbWriter & operator<<(FCbWriter &Writer, const FAssetIdentifier &Identifier)
Definition AssetIdentifier.h:230
FString ToString() const
Definition AssetIdentifier.h:71
FAssetIdentifier()
Definition AssetIdentifier.h:34
void AppendString(FStringBuilderBase &Builder) const
Definition AssetIdentifier.h:79
Definition PrimaryAssetId.h:126
bool IsValid() const
Definition PrimaryAssetId.h:166
void AppendString(FStringBuilderBase &Builder) const
Definition PrimaryAssetId.h:180
static FPrimaryAssetId FromString(const FString &String)
Definition PrimaryAssetId.h:191
Definition PrimaryAssetId.h:28
bool FastLess(const FPrimaryAssetType &Other) const
Definition PrimaryAssetId.h:96
bool LexicalLess(const FPrimaryAssetType &Other) const
Definition PrimaryAssetId.h:91
bool IsValid() const
Definition PrimaryAssetId.h:64