UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SignedArchiveReader.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"
8#include "IPlatformFilePak.h"
10#include "HAL/Runnable.h"
11#include "Math/BigInt.h"
12
43
49{
64
70 , Offset(0)
71 , Size(0)
72 , Buffer(nullptr)
73 , IsTrusted(0)
74 , RefCount(0)
75 , Event(nullptr)
76 {}
77
82 {
83 while (IsTrusted.GetValue() == 0)
84 {
85 FPlatformProcess::Sleep(0.0f);
86 }
87 }
91 FORCEINLINE bool IsReady() const
92 {
93 return IsTrusted.GetValue() != 0;
94 }
95};
96
103{
104 enum
105 {
107 MaxCachedChunks = 8
108 };
109
113 TPakChunkHash OriginalSignatureFileHash;
115 FRunnableThread* Thread;
119 FChunkBuffer CachedChunks[MaxCachedChunks];
121 TArray<FChunkRequest*> RequestQueue;
123 FCriticalSection QueueLock;
125 FThreadSafeCounter PendingQueueCounter;
127 FEvent* QueuedRequestsEvent;
129 TArray<FChunkRequest*> ActiveRequests;
131 FThreadSafeCounter StopTaskCounter;
136
142 int32 ProcessQueue();
146 bool CheckSignature(const FChunkRequest& ChunkInfo);
150 FChunkBuffer* GetCachedChunkBuffer(int32 ChunkIndex);
154 FChunkBuffer* GetFreeBuffer();
158 void ReleaseBuffer(int32 ChunkIndex);
162 FORCEINLINE bool IsMultithreaded() const
163 {
164 return Thread != nullptr;
165 }
169 FEvent* AcquireNotificationEvent() const;
173 void ReleaseNotificationEvent(FEvent* Event);
174
175public:
176
178 virtual ~FChunkCacheWorker();
179
180 //~ Begin FRunnable Interface.
181 virtual bool Init();
182 virtual uint32 Run();
183 virtual void Stop();
184 //~ End FRunnable Interface
185
190
200 FChunkRequest& RequestChunk(int32 ChunkIndex, int64 StartOffset, int64 ChunkSize, FEvent* Event);
204 void ReleaseChunk(FChunkRequest& Chunk);
205
206
211 bool IsValid() const;
212
214};
215
217
222{
223 struct FReadInfo
224 {
225 FChunkRequest* Request;
226 FChunkBuffer* PreCachedChunk;
227 int64 SourceOffset;
228 int64 DestOffset;
229 int64 Size;
230 };
231
233 int64 ChunkCount;
235 FArchive* PakReader;
237 int64 SizeOnDisk;
239 int64 PakSize;
241 int64 PakOffset;
243 FChunkCacheWorker* SignatureChecker;
245 FChunkBuffer LastCachedChunk;
246
250 FORCEINLINE int64 CalculateChunkIndex(int64 ReadOffset) const
251 {
252 return (ReadOffset / FPakInfo::MaxChunkDataSize);
253 }
254
258 FORCEINLINE int64 CalculateChunkOffsetFromIndex(int64 BufferIndex) const
259 {
260 return BufferIndex * FPakInfo::MaxChunkDataSize;
261 }
262
270 FORCEINLINE int64 CalculateChunkOffset(int64 ReadOffset, int64& OutDataOffset) const
271 {
272 const int64 ChunkIndex = CalculateChunkIndex(ReadOffset);
273 OutDataOffset = ReadOffset;
274 return CalculateChunkOffsetFromIndex(ChunkIndex);
275 }
276
280 int64 CalculateChunkSize(int64 ChunkIndex) const;
281
289 int64 PrecacheChunks(TArray<FReadInfo>& Chunks, int64 Length, FEvent* Event);
290
291public:
292
294 virtual ~FSignedArchiveReader();
295
296 //~ Begin FArchive Interface
297 virtual void Serialize(void* Data, int64 Length) override;
298 virtual int64 Tell() override
299 {
300 return PakOffset;
301 }
302 virtual int64 TotalSize() override
303 {
304 return PakSize;
305 }
306 virtual void Seek(int64 InPos) override
307 {
308 PakOffset = InPos;
309 }
310 //~ End FArchive Interface
311};
#define NULL
Definition oodle2base.h:134
#define FORCEINLINE
Definition AndroidPlatform.h:140
@ INDEX_NONE
Definition CoreMiscDefines.h:150
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
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
uint32 TPakChunkHash
Definition IPlatformFilePak.h:93
uint32 Size
Definition VulkanMemory.cpp:4034
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition SignedArchiveReader.h:103
TSharedPtr< const FPakSignatureFile, ESPMode::ThreadSafe > GetSignatures() const
Definition SignedArchiveReader.h:186
virtual void Stop()
Definition SignedArchiveReader.cpp:80
void ReleaseChunk(FChunkRequest &Chunk)
Definition SignedArchiveReader.cpp:330
virtual bool Init()
Definition SignedArchiveReader.cpp:62
virtual uint32 Run()
Definition SignedArchiveReader.cpp:67
virtual ~FChunkCacheWorker()
Definition SignedArchiveReader.cpp:51
bool IsValid() const
Definition SignedArchiveReader.cpp:325
FChunkRequest & RequestChunk(int32 ChunkIndex, int64 StartOffset, int64 ChunkSize, FEvent *Event)
Definition SignedArchiveReader.cpp:297
Definition Event.h:21
Definition RunnableThread.h:20
Definition Runnable.h:20
Definition SignedArchiveReader.h:222
virtual int64 TotalSize() override
Definition SignedArchiveReader.h:302
virtual void Seek(int64 InPos) override
Definition SignedArchiveReader.h:306
virtual ~FSignedArchiveReader()
Definition SignedArchiveReader.cpp:353
virtual int64 Tell() override
Definition SignedArchiveReader.h:298
Definition ThreadSafeCounter.h:14
int32 GetValue() const
Definition ThreadSafeCounter.h:120
Definition Array.h:670
Definition LockFreeList.h:904
Definition SharedPointer.h:692
Definition UniquePtr.h:107
U16 Index
Definition radfft.cpp:71
Definition SignedArchiveReader.h:18
~FChunkBuffer()
Definition SignedArchiveReader.h:37
double LastAccessTime
Definition SignedArchiveReader.h:26
FChunkBuffer()
Definition SignedArchiveReader.h:28
int32 LockCount
Definition SignedArchiveReader.h:22
uint8 * Data
Definition SignedArchiveReader.h:20
int32 ChunkIndex
Definition SignedArchiveReader.h:24
Definition SignedArchiveReader.h:49
FThreadSafeCounter IsTrusted
Definition SignedArchiveReader.h:59
FChunkRequest()
Definition SignedArchiveReader.h:68
FThreadSafeCounter RefCount
Definition SignedArchiveReader.h:61
int64 Offset
Definition SignedArchiveReader.h:53
int32 Index
Definition SignedArchiveReader.h:51
FEvent * Event
Definition SignedArchiveReader.h:63
FORCEINLINE void WaitUntilReady() const
Definition SignedArchiveReader.h:81
FChunkBuffer * Buffer
Definition SignedArchiveReader.h:57
FORCEINLINE bool IsReady() const
Definition SignedArchiveReader.h:91
int64 Size
Definition SignedArchiveReader.h:55
static FORCENOINLINE CORE_API void Free(void *Original)
Definition UnrealMemory.cpp:685
@ MaxChunkDataSize
Definition IPlatformFilePak.h:144