UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Guid.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
7#include "CoreTypes.h"
9#include "Hash/CityHash.h"
11#include "Misc/Crc.h"
15
16class FArchive;
19class FOutputDevice;
21class FSHA1;
22class UObject;
23struct FBlake3Hash;
24template <typename CharType> class TStringBuilderBase;
25template <typename T> struct TCanBulkSerialize;
26template <typename T> struct TIsPODType;
27
28
104
108struct FGuid
109{
110public:
111
113 constexpr FGuid()
114 : A(0)
115 , B(0)
116 , C(0)
117 , D(0)
118 { }
119
128 explicit constexpr FGuid(uint32 InA, uint32 InB, uint32 InC, uint32 InD)
129 : A(InA), B(InB), C(InC), D(InD)
130 { }
131
132 explicit FGuid(const FString& InGuidStr)
133 {
134 if (!Parse(InGuidStr, *this))
135 {
136 Invalidate();
137 }
138 }
139
140public:
141
149 friend bool operator==(const FGuid& X, const FGuid& Y)
150 {
151 return ((X.A ^ Y.A) | (X.B ^ Y.B) | (X.C ^ Y.C) | (X.D ^ Y.D)) == 0;
152 }
153
161 friend bool operator!=(const FGuid& X, const FGuid& Y)
162 {
163 return ((X.A ^ Y.A) | (X.B ^ Y.B) | (X.C ^ Y.C) | (X.D ^ Y.D)) != 0;
164 }
165
173 friend bool operator<(const FGuid& X, const FGuid& Y)
174 {
175 return ((X.A < Y.A) ? true : ((X.A > Y.A) ? false :
176 ((X.B < Y.B) ? true : ((X.B > Y.B) ? false :
177 ((X.C < Y.C) ? true : ((X.C > Y.C) ? false :
178 ((X.D < Y.D) ? true : ((X.D > Y.D) ? false : false)))))))); //-V583
179 }
180
188 {
189 checkSlow(Index >= 0);
190 checkSlow(Index < 4);
191
192 switch(Index)
193 {
194 case 0: return A;
195 case 1: return B;
196 case 2: return C;
197 case 3: return D;
198 }
199
200 return A;
201 }
202
210 {
211 checkSlow(Index >= 0);
212 checkSlow(Index < 4);
213
214 switch(Index)
215 {
216 case 0: return A;
217 case 1: return B;
218 case 2: return C;
219 case 3: return D;
220 }
221
222 return A;
223 }
224
232
240
242 {
243 Ar << *this;
244 return true;
245 }
246
250 friend FString LexToString(const FGuid& Value)
251 {
252 return Value.ToString();
253 }
254
255 friend void LexFromString(FGuid& Result, const TCHAR* String)
256 {
257 FGuid::Parse(String, Result);
258 }
259
261 {
262 Slot << *this;
263 return true;
264 }
265
266 // Allows a FGuid to be returned from AutoRTFM::Open().
267 // See AutoRTFM::Open().
269 {
270 Closed = Open;
271 }
272
273public:
274
286 CORE_API bool ExportTextItem(FString& ValueStr, FGuid const& DefaultValue, UObject* Parent, int32 PortFlags, class UObject* ExportRootScope) const;
287
298 CORE_API bool ImportTextItem(const TCHAR*& Buffer, int32 PortFlags, UObject* Parent, FOutputDevice* ErrorText);
299
306 {
307 A = B = C = D = 0;
308 }
309
318 bool IsValid() const
319 {
320 return ((A | B | C | D) != 0);
321 }
322
330 {
331 FString Out;
332 AppendString(Out, Format);
333 return Out;
334 }
335
342
349
350public:
351
359 {
360 return uint32(CityHash64((char*)&Guid, sizeof(FGuid)));
361 }
362
363public:
364
370 static CORE_API FGuid NewGuid();
380
387 static CORE_API FGuid NewGuidFromHashBytes(const void* HashData, int64 DataLen);
388
394 static CORE_API FGuid Combine(const FGuid& GuidA, const FGuid& GuidB);
395
404 static CORE_API bool Parse(const TCHAR* GuidString, FGuid& OutGuid);
405 static CORE_API bool Parse(const FString& GuidString, FGuid& OutGuid);
406 static CORE_API bool Parse(FStringView GuidString, FGuid& OutGuid);
407
417 static CORE_API bool ParseExact(const TCHAR* GuidString, EGuidFormats Format, FGuid& OutGuid);
418 static CORE_API bool ParseExact(const FString& GuidString, EGuidFormats Format, FGuid& OutGuid);
420
421//private:
422public:
423
426
429
432
435};
436template<> struct TCanBulkSerialize<FGuid> { enum { Value = true }; };
438
439template <> struct TIsPODType<FGuid> { enum { Value = true }; };
440
441template <typename CharType>
443{
444 Value.AppendString(Builder);
445 return Builder;
446}
#define checkSlow(expr)
Definition AssertionMacros.h:332
uint64 CityHash64(const char *s, uint32 len)
Definition CityHash.cpp:388
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
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::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define X(Name, Desc)
Definition FormatStringSan.h:47
EGuidFormats
Definition Guid.h:33
@ DigitsWithHyphensInBraces
@ DigitsWithHyphensInParentheses
@ DigitsWithHyphensLower
TStringBuilderBase< CharType > & operator<<(TStringBuilderBase< CharType > &Builder, const FGuid &Value)
Definition Guid.h:442
#define DECLARE_INTRINSIC_TYPE_LAYOUT(T)
Definition MemoryLayout.h:760
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition MemoryImageWriter.h:14
Definition MemoryImageWriter.h:78
Definition OutputDevice.h:133
Definition MemoryImage.h:49
Definition SecureHash.h:314
Definition StructuredArchiveSlots.h:52
Definition StringBuilder.h:79
Definition Object.h:95
U16 Index
Definition radfft.cpp:71
Definition Blake3.h:27
Definition Guid.h:109
static CORE_API FGuid NewGuidFromHashBytes(const void *HashData, int64 DataLen)
Definition Guid.cpp:269
FGuid(const FString &InGuidStr)
Definition Guid.h:132
uint32 & operator[](int32 Index)
Definition Guid.h:187
void Invalidate()
Definition Guid.h:305
friend bool operator==(const FGuid &X, const FGuid &Y)
Definition Guid.h:149
bool Serialize(FArchive &Ar)
Definition Guid.h:241
static CORE_API FGuid NewDeterministicGuid(FStringView ObjectPath, uint64 Seed=0)
Definition Guid.cpp:244
uint32 D
Definition Guid.h:434
constexpr FGuid()
Definition Guid.h:113
uint32 C
Definition Guid.h:431
CORE_API friend FArchive & operator<<(FArchive &Ar, FGuid &G)
Definition Guid.cpp:622
friend FString LexToString(const FGuid &Value)
Definition Guid.h:250
static CORE_API bool ParseExact(const TCHAR *GuidString, EGuidFormats Format, FGuid &OutGuid)
Definition Guid.cpp:362
FString ToString(EGuidFormats Format=EGuidFormats::Digits) const
Definition Guid.h:329
uint32 A
Definition Guid.h:425
uint32 B
Definition Guid.h:428
const uint32 & operator[](int32 Index) const
Definition Guid.h:209
bool Serialize(FStructuredArchive::FSlot Slot)
Definition Guid.h:260
static CORE_API FGuid NewGuidFromHash(const FBlake3Hash &Hash)
Definition Guid.cpp:262
static void AutoRTFMAssignFromOpenToClosed(FGuid &Closed, FGuid Open)
Definition Guid.h:268
friend bool operator!=(const FGuid &X, const FGuid &Y)
Definition Guid.h:161
friend bool operator<(const FGuid &X, const FGuid &Y)
Definition Guid.h:173
friend uint32 GetTypeHash(const FGuid &Guid)
Definition Guid.h:358
friend void LexFromString(FGuid &Result, const TCHAR *String)
Definition Guid.h:255
CORE_API void AppendString(FString &Out, EGuidFormats Format=EGuidFormats::Digits) const
Definition Guid.cpp:57
CORE_API bool ImportTextItem(const TCHAR *&Buffer, int32 PortFlags, UObject *Parent, FOutputDevice *ErrorText)
Definition Guid.cpp:37
static CORE_API FGuid NewGuid()
Definition Guid.cpp:236
bool IsValid() const
Definition Guid.h:318
constexpr FGuid(uint32 InA, uint32 InB, uint32 InC, uint32 InD)
Definition Guid.h:128
CORE_API bool ExportTextItem(FString &ValueStr, FGuid const &DefaultValue, UObject *Parent, int32 PortFlags, class UObject *ExportRootScope) const
Definition Guid.cpp:29
static CORE_API bool Parse(const TCHAR *GuidString, FGuid &OutGuid)
Definition Guid.cpp:307
Definition Array.h:45
@ Value
Definition Array.h:46
Definition IsPODType.h:12
@ Value
Definition IsPODType.h:13