UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
UniquePageList.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
7#include "Containers/HashTable.h"
8
10{
11public:
13
14 void Initialize();
15
16 void Add( uint32 Page, uint32 Count );
17
18 uint32 GetNum() const { return NumPages; }
19 uint32 GetPage( uint32 Index ) const { return Pages[ Index ]; }
20 uint32 GetCount( uint32 Index ) const { return Counts[ Index ]; }
21
23
24private:
25 enum
26 {
27 HashSize = 16*1024,
28 MaxUniquePages = 8*1024,
29 };
30
31 bool bInitialized;
32 uint32 NumPages;
33 uint32 MaxNumCollisions;
34 uint16 HashIndices[HashSize];
35 uint32 Pages[ MaxUniquePages ];
36 uint16 Counts[ MaxUniquePages ];
37};
38
40 : bInitialized( false )
41 , NumPages( 0 )
42 , MaxNumCollisions( 0 )
43{}
44
46{
47 if (!bInitialized)
48 {
49 FMemory::Memset(HashIndices, 0xff);
50 bInitialized = true;
51 }
52}
53
55{
56 uint32 HashIndex = MurmurFinalize32(Page) & (HashSize - 1u);
58 while (true)
59 {
60 uint32 PageIndex = HashIndices[HashIndex];
61 if (PageIndex == 0xffff)
62 {
63 if (NumPages < MaxUniquePages)
64 {
65 PageIndex = NumPages++;
66 HashIndices[HashIndex] = PageIndex;
67 Pages[PageIndex] = Page;
68 Counts[PageIndex] = Count;
69 }
70 break;
71 }
72 else if (Pages[PageIndex] == Page)
73 {
74 const uint32 PrevCount = Counts[PageIndex];
75 Counts[PageIndex] = FMath::Min<uint32>(PrevCount + Count, 0xffff);
76 break;
77 }
78 HashIndex = (HashIndex + 1u) & (HashSize - 1u);
80 }
81#if DO_GUARD_SLOW
82 MaxNumCollisions = FMath::Max(MaxNumCollisions, NumCollisions);
83#endif // DO_GUARD_SLOW
84}
85
87{
88 for (uint32 Index = 0u; Index < Other->NumPages; ++Index)
89 {
90 Add(Other->Pages[Index], Other->Counts[Index]);
91 }
92}
uint32 MurmurFinalize32(uint32 Hash)
Definition HashTable.h:23
#define RESTRICT
Definition Platform.h:706
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition UniquePageList.h:10
uint32 GetPage(uint32 Index) const
Definition UniquePageList.h:19
void MergePages(const FUniquePageList *RESTRICT Other)
Definition UniquePageList.h:86
FUniquePageList()
Definition UniquePageList.h:39
uint32 GetNum() const
Definition UniquePageList.h:18
void Initialize()
Definition UniquePageList.h:45
uint32 GetCount(uint32 Index) const
Definition UniquePageList.h:20
void Add(uint32 Page, uint32 Count)
Definition UniquePageList.h:54
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
static UE_FORCEINLINE_HINT void * Memset(void *Dest, uint8 Char, SIZE_T Count)
Definition UnrealMemory.h:119