UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DerivedData.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6#include "CoreTypes.h"
8#include "Memory/MemoryFwd.h"
9#include "Memory/MemoryView.h"
10#include "Misc/EnumClassFlags.h"
11#include "Templates/PimplPtr.h"
12
13#define UE_API COREUOBJECT_API
14
15class FArchive;
17class UObject;
18struct FIoHash;
19template <typename FuncType> class TUniqueFunction;
20
21namespace UE::DerivedData { struct FCacheKey; }
22namespace UE::DerivedData { struct FValueId; }
23namespace UE::DerivedData::Private { class FCookedData; }
24namespace UE::DerivedData::Private { class FEditorData; }
25namespace UE::DerivedData::Private { class FIoResponse; }
26
27namespace UE
28{
29
32{
33 None = 0,
35 Required = 1 << 0,
37 Optional = 1 << 1,
39 MemoryMapped = 1 << 2,
40};
41
43
45{
46public:
47 inline explicit operator bool() const
48 {
49 // Check the last byte of ChunkId, which is type of the FIoChunkId, where 0 is EIoChunkType::Invalid.
50 return ChunkId[11] != 0;
51 }
52
53 bool ReferenceEquals(const FCookedData& Other) const;
54 uint32 ReferenceHash() const;
55
56 void Serialize(FArchive& Ar);
57
64
67};
68
80{
81public:
83 static const FDerivedData Null;
84
86 FDerivedData() = default;
87
89 inline explicit FDerivedData(const DerivedData::Private::FCookedData& CookedData);
90
92 inline void Reset() { *this = FDerivedData(); }
93
95 inline bool IsNull() const;
96
98 inline explicit operator bool() const { return !IsNull(); }
99
101 inline bool HasData() const { return !IsNull(); }
102
104 inline bool IsCooked() const { return !!CookedData; }
105
107 inline EDerivedDataFlags GetFlags() const { return CookedData.Flags; }
108
110 UE_API friend FStringBuilderBase& operator<<(FStringBuilderBase& Builder, const FDerivedData& DerivedData);
111
113 UE_API bool ReferenceEquals(const FDerivedData& Other) const;
114
117
120
121#if WITH_EDITORONLY_DATA
123 UE_API FDerivedData(const FSharedString& Name, const FSharedBuffer& Data);
124 UE_API FDerivedData(const FSharedString& Name, const FCompositeBuffer& Data);
125 UE_API FDerivedData(const FSharedString& Name, const FCompressedBuffer& Data);
126
128 UE_API FDerivedData(const FSharedString& Name, const DerivedData::FCacheKey& Key);
130 UE_API FDerivedData(const FSharedString& Name, const DerivedData::FCacheKey& Key, const DerivedData::FValueId& ValueId);
131
133 UE_API const FSharedString& GetName() const;
134
136 UE_API void SetFlags(EDerivedDataFlags Flags);
137
138private:
140#endif // WITH_EDITORONLY_DATA
141
142private:
144
146};
147
148inline const FDerivedData FDerivedData::Null;
149
154
155inline bool FDerivedData::IsNull() const
156{
157#if WITH_EDITORONLY_DATA
158 return !EditorData && !CookedData;
159#else
160 return !CookedData;
161#endif
162}
163
165
168{
175 constexpr FDerivedDataIoPriority InterpolateTo(const FDerivedDataIoPriority Target, const float Alpha) const
176 {
177 // Blocking input produces Blocking output.
178 if (*this == Blocking() || Target == Blocking())
179 {
180 return Blocking();
181 }
182 return {Value + int32((int64(Target.Value) - int64(Value)) * double(Alpha))};
183 }
184
185 static constexpr FDerivedDataIoPriority Lowest() { return {MIN_int32}; }
186 static constexpr FDerivedDataIoPriority Low() { return {MIN_int32 / 2}; }
187 static constexpr FDerivedDataIoPriority Normal() { return {0}; }
188 static constexpr FDerivedDataIoPriority High() { return {MAX_int32 / 2}; }
189 static constexpr FDerivedDataIoPriority Highest() { return {MAX_int32 - 1}; }
190 static constexpr FDerivedDataIoPriority Blocking() { return {MAX_int32}; }
191
192 friend constexpr bool operator==(FDerivedDataIoPriority A, FDerivedDataIoPriority B) { return A.Value == B.Value; }
193 friend constexpr bool operator!=(FDerivedDataIoPriority A, FDerivedDataIoPriority B) { return A.Value != B.Value; }
194 friend constexpr bool operator<(FDerivedDataIoPriority A, FDerivedDataIoPriority B) { return A.Value < B.Value; }
195
198};
199
202{
204 Ok,
206 Error,
208 Canceled,
210 Unknown,
211};
212
217{
218public:
220 constexpr inline void Reset() { Index = -1; }
221
223 constexpr inline bool IsNull() const { return Index == -1; }
224
226 constexpr inline explicit operator bool() const { return !IsNull(); }
227
228private:
229 int32 Index = -1;
230
232};
233
242{
243public:
245 inline void Reset() { Response.Reset(); }
246
248 inline bool IsNull() const { return !Response; }
249
251 inline explicit operator bool() const { return !IsNull(); }
252
255
261 UE_API bool Cancel();
262
264 UE_API bool Poll() const;
265
276
279
282
285
286#if WITH_EDITORONLY_DATA
288 UE_API const FIoHash* GetHash(FDerivedDataIoRequest Handle) const;
289
291 UE_API const DerivedData::FCacheKey* GetCacheKey(FDerivedDataIoRequest Handle) const;
292
294 UE_API const DerivedData::FValueId* GetCacheValueId(FDerivedDataIoRequest Handle) const;
295
297 UE_API const FCompressedBuffer* GetCompressedData(FDerivedDataIoRequest Handle) const;
298#endif // WITH_EDITORONLY_DATA
299
300private:
302
304};
305
308{
309public:
312
318 constexpr explicit FDerivedDataIoOptions(FMutableMemoryView TargetView, uint64 SourceOffset = 0)
319 : Target(TargetView.GetData())
320 , Size(TargetView.GetSize())
321 , Offset(SourceOffset)
322 {
323 }
324
330 constexpr explicit FDerivedDataIoOptions(uint64 SourceOffset, uint64 SourceSize = MAX_uint64)
331 : Size(SourceSize)
332 , Offset(SourceOffset)
333 {
334 }
335
336 constexpr void* GetTarget() const { return Target; }
337 constexpr uint64 GetSize() const { return Size; }
338 constexpr uint64 GetOffset() const { return Offset; }
339
340private:
342 void* Target = nullptr;
343
345 uint64 Size = MAX_uint64;
346
348 uint64 Offset = 0;
349};
350
352
359{
360public:
362 inline void Reset() { Response.Reset(); }
363
365 inline bool IsEmpty() const { return !Response; }
366
374 UE_API FDerivedDataIoRequest Read(const FDerivedData& Data, const FDerivedDataIoOptions& Options = {});
375
383 UE_API FDerivedDataIoRequest Cache(const FDerivedData& Data, const FDerivedDataIoOptions& Options = {});
384
392 UE_API FDerivedDataIoRequest Exists(const FDerivedData& Data, const FDerivedDataIoOptions& Options = {});
393
394#if WITH_EDITORONLY_DATA
402 UE_API FDerivedDataIoRequest Compress(const FDerivedData& Data);
403#endif // WITH_EDITORONLY_DATA
404
414 UE_API void Dispatch(FDerivedDataIoResponse& OutResponse);
415 UE_API void Dispatch(FDerivedDataIoResponse& OutResponse, FDerivedDataIoPriority Priority);
416 UE_API void Dispatch(FDerivedDataIoResponse& OutResponse, FDerivedDataIoPriority Priority, FDerivedDataIoComplete&& OnComplete);
417 UE_API void Dispatch(FDerivedDataIoResponse& OutResponse, FDerivedDataIoComplete&& OnComplete);
418
419private:
421
422 constexpr uint32 GetTypeHash(const FDerivedDataIoPriority& Priority)
423 {
424 return uint32(Priority.Value);
425 }
426};
427
428} // UE
429
431{
432
433inline void InitializeIoDispatcher()
434{
435}
436
437inline void TearDownIoDispatcher()
438{
439}
440
441} // UE::DerivedData::IoStore
442
443#undef UE_API
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
OnComplete(MoveTemp(Response))
const bool
Definition NetworkReplayStreaming.h:178
#define MAX_int32
Definition NumericLimits.h:25
#define MIN_int32
Definition NumericLimits.h:16
#define MAX_uint64
Definition NumericLimits.h:22
#define UE_API
Definition SColorGradingComponentViewer.h:12
auto GetData(const TStringConversion< Converter, DefaultConversionSize > &Conversion) -> decltype(Conversion.Get())
Definition StringConv.h:802
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 CompositeBuffer.h:27
Definition CompressedBuffer.h:50
Definition SharedBuffer.h:341
Definition FunctionFwd.h:19
Definition DerivedData.h:45
uint64 ChunkSize
Definition DerivedData.h:61
uint64 ChunkOffset
Definition DerivedData.h:59
bool ReferenceEquals(const FCookedData &Other) const
Definition DerivedData.cpp:60
uint8 ChunkId[12]
Definition DerivedData.h:63
uint32 ReferenceHash() const
Definition DerivedData.cpp:65
EDerivedDataFlags Flags
Definition DerivedData.h:66
Definition DerivedData.cpp:542
Definition DerivedData.h:359
UE_API FDerivedDataIoRequest Exists(const FDerivedData &Data, const FDerivedDataIoOptions &Options={})
Definition DerivedData.cpp:1300
UE_API void Dispatch(FDerivedDataIoResponse &OutResponse)
Definition DerivedData.cpp:1315
void Reset()
Definition DerivedData.h:362
UE_API FDerivedDataIoRequest Cache(const FDerivedData &Data, const FDerivedDataIoOptions &Options={})
Definition DerivedData.cpp:1293
bool IsEmpty() const
Definition DerivedData.h:365
Definition DerivedData.h:308
constexpr uint64 GetOffset() const
Definition DerivedData.h:338
constexpr FDerivedDataIoOptions(FMutableMemoryView TargetView, uint64 SourceOffset=0)
Definition DerivedData.h:318
constexpr uint64 GetSize() const
Definition DerivedData.h:337
constexpr void * GetTarget() const
Definition DerivedData.h:336
constexpr FDerivedDataIoOptions(uint64 SourceOffset, uint64 SourceSize=MAX_uint64)
Definition DerivedData.h:330
Definition DerivedData.h:217
constexpr bool IsNull() const
Definition DerivedData.h:223
constexpr void Reset()
Definition DerivedData.h:220
Definition DerivedData.h:242
UE_API FSharedBuffer GetData(FDerivedDataIoRequest Handle) const
Definition DerivedData.cpp:1176
void Reset()
Definition DerivedData.h:245
UE_API EDerivedDataIoStatus GetStatus(FDerivedDataIoRequest Handle) const
Definition DerivedData.cpp:1166
UE_API EDerivedDataIoStatus GetOverallStatus() const
Definition DerivedData.cpp:1161
UE_API bool Poll() const
Definition DerivedData.cpp:1156
bool IsNull() const
Definition DerivedData.h:248
UE_API uint64 GetSize(FDerivedDataIoRequest Handle) const
Definition DerivedData.cpp:1189
UE_API void SetPriority(FDerivedDataIoPriority Priority)
Definition DerivedData.cpp:1143
UE_API bool Cancel()
Definition DerivedData.cpp:1151
Definition DerivedData.h:80
UE_API friend FStringBuilderBase & operator<<(FStringBuilderBase &Builder, const FDerivedData &DerivedData)
Definition DerivedData.cpp:255
UE_API uint32 ReferenceHash() const
Definition DerivedData.cpp:284
bool IsNull() const
Definition DerivedData.h:155
void Reset()
Definition DerivedData.h:92
EDerivedDataFlags GetFlags() const
Definition DerivedData.h:107
bool HasData() const
Definition DerivedData.h:101
UE_API bool ReferenceEquals(const FDerivedData &Other) const
Definition DerivedData.cpp:273
static const FDerivedData Null
Definition DerivedData.h:83
FDerivedData()=default
bool IsCooked() const
Definition DerivedData.h:104
Definition Object.h:95
Definition DerivedData.h:431
Definition DerivedData.cpp:40
Definition DerivedData.cpp:40
Definition AdvancedWidgetsModule.cpp:13
TUniqueFunction< void()> FDerivedDataIoComplete
Definition DerivedData.h:351
EDerivedDataFlags
Definition DerivedData.h:32
EDerivedDataIoStatus
Definition DerivedData.h:202
U16 Index
Definition radfft.cpp:71
Definition IoHash.h:33
Definition PimplPtr.h:50
Definition DerivedData.h:168
static constexpr FDerivedDataIoPriority High()
Definition DerivedData.h:188
friend constexpr bool operator<(FDerivedDataIoPriority A, FDerivedDataIoPriority B)
Definition DerivedData.h:194
static constexpr FDerivedDataIoPriority Low()
Definition DerivedData.h:186
friend constexpr bool operator!=(FDerivedDataIoPriority A, FDerivedDataIoPriority B)
Definition DerivedData.h:193
friend constexpr bool operator==(FDerivedDataIoPriority A, FDerivedDataIoPriority B)
Definition DerivedData.h:192
int32 Value
Definition DerivedData.h:197
static constexpr FDerivedDataIoPriority Blocking()
Definition DerivedData.h:190
static constexpr FDerivedDataIoPriority Highest()
Definition DerivedData.h:189
static constexpr FDerivedDataIoPriority Normal()
Definition DerivedData.h:187
static constexpr FDerivedDataIoPriority Lowest()
Definition DerivedData.h:185
constexpr FDerivedDataIoPriority InterpolateTo(const FDerivedDataIoPriority Target, const float Alpha) const
Definition DerivedData.h:175