UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AsyncFileHandle.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 "Stats/Stats.h"
10#include "Templates/Function.h"
11
13
17
18// Note on threading. Like the rest of the filesystem platform abstraction, these methods are threadsafe, but it is expected you are not concurrently _using_ these data structures.
19
22
23// Hacky base class to avoid 8 bytes of padding after the vtable
25{
26public:
27 virtual ~IAsyncReadRequestFixLayout() = default;
28};
29
31{
32protected:
33 union
34 {
37 };
42 TSAN_ATOMIC(bool) bCanceled;
43 const bool bSizeRequest;
45public:
46
71
72 /* Not legal to destroy the request until it is complete. */
74 {
75 // check(bCompleteAndCallbackCalled && (bSizeRequest || !Memory)); // must be complete, and if it was a read request, the memory should be gone
77 LogHAL, Fatal, TEXT("IAsyncReadRequests must not be deleted until they are completed.")
78 );
80 }
81
90
96 inline bool WaitCompletion(float TimeLimitSeconds = 0.0f)
97 {
98 if (PollCompletion())
99 {
100 return true;
101 }
102 WaitCompletionImpl(TimeLimitSeconds);
103 return PollCompletion();
104 }
105
110 virtual void EnsureCompletion()
111 {
112 // Default implementation is the same as WaitCompletion(0.0f) except that it skips the testing of
113 // PollCompletion. This is potentially slower because we do not early exit if PollCompletion is true, but it
114 // provides a stronger guarantee of completion because PollCompletion can sometimes return true while
115 // completion steps are still in progress.
116 WaitCompletionImpl(0.0f);
117 }
118
120 inline void Cancel()
121 {
122 if (!bCanceled)
123 {
124 bCanceled = true;
125 bDataIsReady = true;
127 if (!PollCompletion())
128 {
129 return CancelImpl();
130 }
131 }
132 }
133
139 {
141 return bCanceled ? -1 : Size;
142 }
143
149 {
151 uint8* Result = Memory;
152 if (bCanceled && Result)
153 {
154 Result = nullptr;
155 }
156 else
157 {
159 {
161 }
162
163 Memory = nullptr;
164 }
165 return Result;
166 }
167
168protected:
174 virtual void WaitCompletionImpl(float TimeLimitSeconds) = 0;
175
177 virtual void CancelImpl() = 0;
178
184 virtual void ReleaseMemoryOwnershipImpl() = 0;
185
187 {
188 bDataIsReady = true;
190 if (Callback)
191 {
192 Callback(bCanceled, this);
193 }
195 }
196
202
204 {
207 }
208};
209
211{
212public:
222
228 virtual IAsyncReadRequest* SizeRequest(FAsyncFileCallBack* CompleteCallback = nullptr) = 0;
229
238 virtual IAsyncReadRequest* ReadRequest(int64 Offset, int64 BytesToRead, EAsyncIOPriorityAndFlags PriorityAndFlags = AIOP_Normal, FAsyncFileCallBack* CompleteCallback = nullptr, uint8* UserSuppliedMemory = nullptr) = 0;
239
241 virtual bool UsesCache()
242 {
243 return true;
244 }
245
247 virtual void ShrinkHandleBuffers()
248 { }
249
250 // Non-copyable
253};
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define check(expr)
Definition AssertionMacros.h:314
TFunction< void(bool bWasCancelled, IAsyncReadRequest *)> FAsyncFileCallBack
Definition AsyncFileHandle.h:21
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::PTRINT PTRINT
A signed integer the same size as a pointer.
Definition Platform.h:1148
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
#define UE_FORCEINLINE_HINT
Definition Platform.h:723
#define INC_DWORD_STAT(StatId)
Definition Stats.h:696
#define DEC_DWORD_STAT(StatId)
Definition Stats.h:701
#define DECLARE_DWORD_ACCUMULATOR_STAT_EXTERN(CounterName, StatId, GroupId, API)
Definition Stats.h:684
#define DECLARE_MEMORY_STAT_EXTERN(CounterName, StatId, GroupId, API)
Definition Stats.h:687
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EAsyncIOPriorityAndFlags
Definition GenericPlatformFile.h:31
@ AIOP_Normal
Definition GenericPlatformFile.h:44
#define UE_CLOG(Condition, CategoryName, Verbosity, Format,...)
Definition LogMacros.h:298
uint32 Offset
Definition VulkanMemory.cpp:4033
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition AsyncFileHandle.h:211
virtual IAsyncReadRequest * SizeRequest(FAsyncFileCallBack *CompleteCallback=nullptr)=0
virtual ~IAsyncReadFileHandle()
Definition AsyncFileHandle.h:218
virtual bool UsesCache()
Definition AsyncFileHandle.h:241
virtual IAsyncReadRequest * ReadRequest(int64 Offset, int64 BytesToRead, EAsyncIOPriorityAndFlags PriorityAndFlags=AIOP_Normal, FAsyncFileCallBack *CompleteCallback=nullptr, uint8 *UserSuppliedMemory=nullptr)=0
IAsyncReadFileHandle(const IAsyncReadFileHandle &)=delete
IAsyncReadFileHandle()
Definition AsyncFileHandle.h:213
virtual void ShrinkHandleBuffers()
Definition AsyncFileHandle.h:247
IAsyncReadFileHandle & operator=(const IAsyncReadFileHandle &)=delete
Definition AsyncFileHandle.h:25
virtual ~IAsyncReadRequestFixLayout()=default
Definition AsyncFileHandle.h:31
virtual ~IAsyncReadRequest()
Definition AsyncFileHandle.h:73
TSAN_ATOMIC(bool) bDataIsReady
TSAN_ATOMIC(bool) bCanceled
UE_FORCEINLINE_HINT bool PollCompletion()
Definition AsyncFileHandle.h:86
virtual void ReleaseMemoryOwnershipImpl()=0
IAsyncReadRequest(FAsyncFileCallBack *InCallback, bool bInSizeRequest, uint8 *UserSuppliedMemory)
Definition AsyncFileHandle.h:47
const bool bUserSuppliedMemory
Definition AsyncFileHandle.h:44
void SetAllComplete()
Definition AsyncFileHandle.h:197
void SetDataComplete()
Definition AsyncFileHandle.h:186
virtual void WaitCompletionImpl(float TimeLimitSeconds)=0
void Cancel()
Definition AsyncFileHandle.h:120
PTRINT Size
Definition AsyncFileHandle.h:35
int64 GetSizeResults()
Definition AsyncFileHandle.h:138
uint8 * Memory
Definition AsyncFileHandle.h:36
TSAN_ATOMIC(bool) bCompleteSync
virtual void CancelImpl()=0
const bool bSizeRequest
Definition AsyncFileHandle.h:43
uint8 * GetReadResults()
Definition AsyncFileHandle.h:148
virtual void EnsureCompletion()
Definition AsyncFileHandle.h:110
bool WaitCompletion(float TimeLimitSeconds=0.0f)
Definition AsyncFileHandle.h:96
void SetComplete()
Definition AsyncFileHandle.h:203
TSAN_ATOMIC(bool) bCompleteAndCallbackCalled
FAsyncFileCallBack Callback
Definition AsyncFileHandle.h:38
Definition AndroidPlatformMisc.h:14
@ false
Definition radaudio_common.h:23
static UE_FORCEINLINE_HINT void MemoryBarrier()
Definition AndroidPlatformMisc.h:249