UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
GenericHash.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
8#include "HAL/UnrealMemory.h"
10#include "Memory/MemoryView.h"
12
13struct FIoHash;
14
15namespace UE
16{
17
18namespace GenericHash
19{
20
21FString ToHex(FMemoryView Memory);
23
24} // namespace UE::GenericHash
25
26template<SIZE_T BitCount>
27struct THash
28{
29 static constexpr SIZE_T Size = BitCount >> 3;
31
32 THash() = default;
33 const uint8* GetData() const { return Hash; }
34 SIZE_T GetSize() const { return Size; }
35 FMemoryView GetView() const { return FMemoryView(Hash, Size); }
36
38 static THash From(const uint8* Data, SIZE_T DataSize);
39 static THash From(const FIoHash& IoHash);
40 static const THash Zero;
41
42 friend inline bool operator==(const THash& A, const THash& B)
43 {
44 return FMemory::Memcmp(A.Hash, B.Hash, Size) == 0;
45 }
46
47 friend inline bool operator!=(const THash& A, const THash& B)
48 {
49 return FMemory::Memcmp(A.Hash, B.Hash, Size) != 0;
50 }
51
52 friend inline bool operator<(const THash& A, const THash& B)
53 {
54 return FMemory::Memcmp(A.Hash, B.Hash, Size) < 0;
55 }
56
57 friend inline uint32 GetTypeHash(const THash& H)
58 {
59 return *reinterpret_cast<const uint32*>(H.Hash);
60 }
61
62 friend inline FString LexToString(const THash& H)
63 {
64 return GenericHash::ToHex(H.GetView());
65 }
66
68 {
69 return GenericHash::ToHex(H.GetView(), Out);
70 }
71
73 {
74 Ar.Serialize(const_cast<uint8*>(H.GetData()), H.GetSize());
75 return Ar;
76 }
77
78private:
79 FMutableMemoryView GetMutableView() { return FMutableMemoryView(Hash, Size); }
80
81 alignas(uint32) ByteArray Hash{};
82};
83
84template<SIZE_T BitCount>
86
87template<SIZE_T BitCount>
94
95template<SIZE_T BitCount>
100
101template<SIZE_T BitCount>
108
115
116} // namespace UE
FPlatformTypes::SIZE_T SIZE_T
An unsigned integer the same size as a pointer, the same as UPTRINT.
Definition Platform.h:1150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
TMemoryView< const void > FMemoryView
Definition MemoryFwd.h:11
TMemoryView< void > FMutableMemoryView
Definition MemoryFwd.h:14
constexpr TMemoryView< void > MakeMemoryView(void *Data, uint64 Size)
Definition MemoryView.h:257
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
virtual void Serialize(void *V, int64 Length)
Definition Archive.h:1689
TMemoryView CopyFrom(FMemoryView InView) const
Definition MemoryView.h:216
FStringBuilderBase & ToHex(FMemoryView Memory, FStringBuilderBase &Out)
Definition GenericHash.cpp:15
Definition AdvancedWidgetsModule.cpp:13
Definition IoHash.h:33
static UE_FORCEINLINE_HINT int32 Memcmp(const void *Buf1, const void *Buf2, SIZE_T Count)
Definition UnrealMemory.h:114
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160
Definition GenericHash.h:28
static const THash Zero
Definition GenericHash.h:40
friend bool operator!=(const THash &A, const THash &B)
Definition GenericHash.h:47
friend FString LexToString(const THash &H)
Definition GenericHash.h:62
uint8[Size] ByteArray
Definition GenericHash.h:30
friend FArchive & operator<<(FArchive &Ar, THash &H)
Definition GenericHash.h:72
static constexpr SIZE_T Size
Definition GenericHash.h:29
static THash From(FMemoryView Memory)
Definition GenericHash.h:88
FMemoryView GetView() const
Definition GenericHash.h:35
friend bool operator<(const THash &A, const THash &B)
Definition GenericHash.h:52
friend FStringBuilderBase & LexToString(const THash &H, FStringBuilderBase &Out)
Definition GenericHash.h:67
friend uint32 GetTypeHash(const THash &H)
Definition GenericHash.h:57
THash()=default
friend bool operator==(const THash &A, const THash &B)
Definition GenericHash.h:42
SIZE_T GetSize() const
Definition GenericHash.h:34
const uint8 * GetData() const
Definition GenericHash.h:33