UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PreloadableFile.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
6#include "Containers/Map.h"
10#include "CoreTypes.h"
11#include "HAL/CriticalSection.h"
14#include "Templates/Atomic.h"
15#include "Templates/Function.h"
17#include "Templates/UniquePtr.h"
18
19class FEvent;
22class IFileHandle;
23
24#define FPRELOADABLEFILE_TEST_ENABLED 0
25
50{
51public:
54
55 enum Flags
56 {
57 None = 0x0,
58
59 // Mode (mutually exclusive)
60 ModeBits = 0x1,
61 PreloadHandle = 0x0, // Asynchronously open the Lower-Level Archive, but do not read bytes from it. The Lower-Level Archive can be detached or can be accessed through Serialize.
62 PreloadBytes = 0x1, // Asynchronously open the Lower-Level Archive and read bytes from it into an In-Memory cache of the file. Serialize will read from the cached bytes if available, otherwise will read from the Lower-Level Archive.
63
64 // Options (independently selectable, do not necessarily apply to all modes)
65 Prime = 0x2, // Only applicable to PreloadHandle mode. After asynchronously opening the LowerLevel archive, asychronously call Precache(0, <PrimeSize>).
66 };
67 enum
68 {
69 DefaultPrimeSize = 1024, // The default argument for PrimeSize in IntializeAsync. How many bytes are requested in the initial PrimeSize call.
70 DefaultPageSize = 64*1024 // The default size of read requests made to the LowerLevel Archive in PreloadBytes mode when reading bytes into the In-Memory cache.
71 };
72
75
76 // Initialization
83 CORE_API bool IsInitialized() const;
86
87 // Preloading
91 CORE_API void StopPreload();
93 CORE_API bool IsPreloading() const;
99 CORE_API bool IsCacheAllocated() const;
103 CORE_API bool HasValidData() const;
104
105 // FArchive
106 CORE_API virtual void Serialize(void* V, int64 Length) final;
107 CORE_API virtual void Seek(int64 InPos) final;
108 CORE_API virtual int64 Tell() final;
111 CORE_API virtual bool Close() final;
112 CORE_API virtual FString GetArchiveName() const final;
113
119#if FPRELOADABLEFILE_TEST_ENABLED
120 CORE_API void SerializeInternal(void* V, int64 Length);
121#endif
122 CORE_API void PausePreload();
123 CORE_API void ResumePreload();
125 CORE_API void OnReadComplete(bool bCanceled, IAsyncReadRequest* ReadRequest);
128
129 FString ArchiveName;
134
143
145 uint8* CacheBytes = nullptr;
152
157#if FPRELOADABLEFILE_TEST_ENABLED
160#endif
165
172
175 {
176 public:
178 {
179 bCanceled = bInCanceled;
180 ReadRequest = InReadRequest;
181 }
183 {
184 bOutCanceled = bCanceled;
185 OutReadRequest = ReadRequest;
186 ReadRequest = nullptr;
187 }
188 private:
189 bool bCanceled = false;
190 IAsyncReadRequest* ReadRequest = nullptr;
191 }
193
195};
196
210{
211public:
213
216
217 // Registration
231 static CORE_API FArchive* TryTakeArchive(const TCHAR* FileName);
234
235private:
237 static TMap<FString, TSharedPtr<FPreloadableFile>> RegisteredFiles;
238};
239
246{
247public:
249 :Archive(InArchive)
250 {
251 check(Archive);
252 }
253 virtual void Seek(int64 InPos) final
254 {
255 Archive->Seek(InPos);
256 }
257 virtual int64 Tell() final
258 {
259 return Archive->Tell();
260 }
261 virtual int64 TotalSize() final
262 {
263 return Archive->TotalSize();
264 }
265 virtual bool Close() final
266 {
267 return Archive->Close();
268 }
269 virtual void Serialize(void* V, int64 Length) final
270 {
271 Archive->Serialize(V, Length);
272 }
273 virtual FString GetArchiveName() const final
274 {
275 return Archive->GetArchiveName();
276 }
277
278private:
280};
281
#define check(expr)
Definition AssertionMacros.h:314
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
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
void SerializeInternal(FArchive &Ar, TUniquePtr< FFieldNode< T > > &Field)
Definition FieldSystemNodes.cpp:80
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 Event.h:21
Definition PreloadableFile.h:246
virtual int64 Tell() final
Definition PreloadableFile.h:257
virtual void Serialize(void *V, int64 Length) final
Definition PreloadableFile.h:269
FPreloadableArchiveProxy(const TSharedPtr< FPreloadableArchive > &InArchive)
Definition PreloadableFile.h:248
virtual bool Close() final
Definition PreloadableFile.h:265
virtual FString GetArchiveName() const final
Definition PreloadableFile.h:273
virtual void Seek(int64 InPos) final
Definition PreloadableFile.h:253
virtual int64 TotalSize() final
Definition PreloadableFile.h:261
Definition PreloadableFile.h:50
TAtomic< int64 > CacheEnd
Definition PreloadableFile.h:151
bool bReadCompleteWasCalledInline
Definition PreloadableFile.h:169
FCriticalSection PreloadLock
Definition PreloadableFile.h:167
CORE_API bool IsPreloading() const
Definition PreloadableFile.cpp:233
FString ArchiveName
Definition PreloadableFile.h:129
CORE_API void ResumePreload()
Definition PreloadableFile.cpp:311
CORE_API bool AllocateCache()
Definition PreloadableFile.cpp:240
CORE_API void SetPageSize(int64 PageSize)
Definition PreloadableFile.cpp:61
TArray< IAsyncReadRequest * > RetiredRequests
Definition PreloadableFile.h:162
CORE_API bool HasValidData() const
Definition PreloadableFile.cpp:294
TAtomic< bool > bIsPreloadingPaused
Definition PreloadableFile.h:142
CORE_API bool StartPreload()
Definition PreloadableFile.cpp:193
CORE_API FArchive * DetachLowerLevel()
Definition PreloadableFile.cpp:288
virtual CORE_API bool Close() final
Definition PreloadableFile.cpp:644
uint8 * CacheBytes
Definition PreloadableFile.h:145
CORE_API bool ResumePreloadNonRecursive()
Definition PreloadableFile.cpp:339
TAtomic< bool > bIsPreloading
Definition PreloadableFile.h:140
CORE_API void SerializeSynchronously(void *V, int64 Length)
Definition PreloadableFile.cpp:557
int64 PageSize
Definition PreloadableFile.h:164
CORE_API void OnReadComplete(bool bCanceled, IAsyncReadRequest *ReadRequest)
Definition PreloadableFile.cpp:375
CORE_API void ReleaseCache()
Definition PreloadableFile.cpp:265
CORE_API void WaitForInitialization() const
Definition PreloadableFile.cpp:92
int64 Pos
Definition PreloadableFile.h:131
CORE_API bool IsCacheAllocated() const
Definition PreloadableFile.cpp:283
CORE_API void StopPreload()
Definition PreloadableFile.cpp:220
struct FPreloadableArchive::FSavedReadCompleteArguments SavedReadCompleteArguments
virtual CORE_API void Seek(int64 InPos) final
Definition PreloadableFile.cpp:627
CORE_API void InitializeInternalAsync(FCreateArchive &&InCreateArchiveFunction, FCreateAsyncArchive &&InCreateAsyncArchiveFunction, uint32 InFlags, int64 PrimeSize)
Definition PreloadableFile.cpp:101
int64 Size
Definition PreloadableFile.h:133
friend class FPreloadableFileProxy
Definition PreloadableFile.h:194
bool bIsInlineReadComplete
Definition PreloadableFile.h:171
CORE_API bool IsInitialized() const
Definition PreloadableFile.cpp:87
CORE_API void InitializeInternal(FCreateArchive &&InCreateArchiveFunction, FCreateAsyncArchive &&InCreateAsyncArchiveFunction, uint32 Flags, int64 PrimeSize)
Definition PreloadableFile.cpp:121
virtual CORE_API int64 Tell() final
Definition PreloadableFile.cpp:634
Flags
Definition PreloadableFile.h:56
@ PreloadBytes
Definition PreloadableFile.h:62
@ Prime
Definition PreloadableFile.h:65
@ None
Definition PreloadableFile.h:57
@ PreloadHandle
Definition PreloadableFile.h:61
@ ModeBits
Definition PreloadableFile.h:60
TUniqueFunction< IAsyncReadFileHandle *()> FCreateAsyncArchive
Definition PreloadableFile.h:53
@ DefaultPageSize
Definition PreloadableFile.h:70
@ DefaultPrimeSize
Definition PreloadableFile.h:69
TUniquePtr< FArchive > SynchronousArchive
Definition PreloadableFile.h:156
virtual CORE_API int64 TotalSize() final
Definition PreloadableFile.cpp:639
TUniqueFunction< FArchive *()> FCreateArchive
Definition PreloadableFile.h:52
TAtomic< bool > bInitialized
Definition PreloadableFile.h:138
CORE_API void FreeRetiredRequests()
Definition PreloadableFile.cpp:442
virtual CORE_API void Serialize(void *V, int64 Length) final
Definition PreloadableFile.cpp:453
TUniquePtr< IAsyncReadFileHandle > AsynchronousHandle
Definition PreloadableFile.h:154
CORE_API void PausePreload()
Definition PreloadableFile.cpp:300
FEvent * PendingAsyncComplete
Definition PreloadableFile.h:136
CORE_API void InitializeAsync(FCreateArchive &&InCreateArchiveFunction, uint32 InFlags=Flags::None, int64 PrimeSize=DefaultPrimeSize)
Definition PreloadableFile.cpp:75
virtual CORE_API ~FPreloadableArchive()
Definition PreloadableFile.cpp:51
virtual CORE_API FString GetArchiveName() const final
Definition PreloadableFile.cpp:662
Definition PreloadableFile.h:210
static CORE_API FArchive * TryTakeArchive(const TCHAR *FileName)
Definition PreloadableFile.cpp:730
static CORE_API bool TryRegister(const TSharedPtr< FPreloadableFile > &PreloadableFile)
Definition PreloadableFile.cpp:713
CORE_API void InitializeAsync(uint32 InFlags=Flags::None, int64 PrimeSize=DefaultPrimeSize)
Definition PreloadableFile.cpp:686
static CORE_API bool UnRegister(const TSharedPtr< FPreloadableFile > &PreloadableFile)
Definition PreloadableFile.cpp:759
Definition AsyncFileHandle.h:211
Definition AsyncFileHandle.h:31
Definition GenericPlatformFile.h:117
Definition Array.h:670
Definition Atomic.h:538
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition FunctionFwd.h:19
Definition UniquePtr.h:107
Definition PreloadableFile.h:175
void Set(bool bInCanceled, IAsyncReadRequest *InReadRequest)
Definition PreloadableFile.h:177
void Get(bool &bOutCanceled, IAsyncReadRequest *&OutReadRequest)
Definition PreloadableFile.h:182