UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
BulkData.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6#include "BulkDataBuffer.h"
7#include "Containers/Array.h"
9#include "Containers/Map.h"
14#include "CoreMinimal.h"
15#include "CoreTypes.h"
17#include "HAL/MemoryBase.h"
18#include "IO/IoChunkId.h"
20#include "IO/PackageId.h"
21#include "Math/NumericLimits.h"
24#include "Misc/EnumClassFlags.h"
25#include "Misc/OptionalFwd.h"
26#include "Misc/PackagePath.h"
27#include "Misc/PackageSegment.h"
32#include "Templates/Function.h"
33#include "Templates/IsPODType.h"
35#include "Templates/UniquePtr.h"
36#include "Templates/PimplPtr.h"
37#include "UObject/NameTypes.h"
38
39class FIoBuffer;
40class FLinkerLoad;
41class FOutputDevice;
44class UObject;
45struct FTimespan;
47namespace UE { namespace Serialization { class FEditorBulkData; } }
48enum class EFileRegionType : uint8;
49
50#if WITH_EDITOR == 0 && WITH_EDITORONLY_DATA == 0
51 #define USE_RUNTIME_BULKDATA 1
52#else
53 #define USE_RUNTIME_BULKDATA 0
54#endif
55
56// When set to 1 attempting to reload inline data will fail with the old loader in the same way that it fails in
57// the new loader to keep the results consistent.
58#define UE_KEEP_INLINE_RELOADING_CONSISTENT 0
59
62
63/*-----------------------------------------------------------------------------
64 I/O filename helper(s)
65-----------------------------------------------------------------------------*/
66
76
84{
85public:
87
88 virtual bool PollCompletion() const = 0;
89 virtual bool WaitCompletion(float TimeLimitSeconds = 0.0f) = 0;
90
91 virtual uint8* GetReadResults() = 0;
92 virtual int64 GetSize() const = 0;
93
94 virtual void Cancel() = 0;
95};
96
101{
113 BULKDATA_Unused UE_DEPRECATED(5.3, "This feature is being removed") = 1 << 5,
119 BULKDATA_ForceStreamPayload UE_DEPRECATED(5.3, "This flag has had no purpose for sometime") = 1 << 7,
122 BULKDATA_PayloadInSeperateFile UE_DEPRECATED(5.7, "This flag has been renamed to BULKDATA_PayloadInSeparateFile") = BULKDATA_PayloadInSeparateFile,
124 BULKDATA_SerializeCompressedBitWindow UE_DEPRECATED(5.3, "This flag has had no purpose for sometime") = 1 << 9,
146 BULKDATA_BadDataVersion UE_DEPRECATED(5.3, "This flag has had no purpose for sometime") = 1 << 15,
159
160 /* Runtime only flags below this point! Note that they take the high bits in reverse order! */
161
167 BULKDATA_HasAsyncReadPending UE_DEPRECATED(5.5, "This flag no longer does anything") = 1 << 29,
170};
171
174
180{
181 Ar << (uint32&)Flags;
182 return Ar;
183}
184
197
206
211
216{
218 : AllocatedData(InAllocatedData)
219 , MappedHandle(nullptr)
220 , MappedRegion(nullptr)
221 {
222
223 }
224
226 : AllocatedData(nullptr)
227 , MappedHandle(Handle)
228 , MappedRegion(Region)
229 {
230
231 }
232
234 COREUOBJECT_API const void* GetPointer();
235
237 {
238 return MappedHandle;
239 }
241 {
242 return MappedRegion;
243 }
245 {
246 return MappedHandle != nullptr;
247 }
248
250 {
251 AllocatedData = nullptr;
252 MappedHandle = nullptr;
253 MappedRegion = nullptr;
254 }
255
256private:
257 // hidden
259
260
261 // if allocated memory was used, this will be non-null
262 void* AllocatedData;
263
264 // if memory mapped IO was used, these will be non-null
265 IMappedFileHandle* MappedHandle;
266 IMappedFileRegion* MappedRegion;
267};
268
269namespace UE::BulkData::Private
270{
271
275struct FBulkMetaResource
276{
279
281 int64 ElementCount = -1;
282
284 int64 SizeOnDisk = -1;
285
287 int64 Offset = -1;
288
290 EBulkDataFlags DuplicateFlags = BULKDATA_None;
291
293 int64 DuplicateSizeOnDisk = -1;
294
296 int64 DuplicateOffset = -1;
297
298 COREUOBJECT_API friend FArchive& operator<<(FArchive& Ar, FBulkMetaResource& BulkMeta);
299};
300
308class FBulkMetaData
309{
310public:
312 static constexpr int64 MaxSize = 0xFFffFFffFF;
314 static constexpr int64 MaxOffset = 0xFFffFFffFE;
315
316 FBulkMetaData()
317 {
318 SetOffset(-1);
319#if !USE_RUNTIME_BULKDATA
320 SetSizeOnDisk(-1);
321#endif
322 }
323
324 explicit FBulkMetaData(EBulkDataFlags Flags)
325 : FBulkMetaData()
326 {
328 }
329
330 inline int64 GetSize() const
331 {
332 return static_cast<int64>(ReadUInt40(Data));
333 }
334
335 inline void SetSize(int64 Size)
336 {
337 check(Size <= MaxSize);
338 WriteUInt40(Data, uint64(Size));
339 }
340
341 int64 GetSizeOnDisk() const
342 {
343#if USE_RUNTIME_BULKDATA
344 return GetSize();
345#else
346 return static_cast<int64>(*reinterpret_cast<const int64*>(&Data[16]));
347#endif
348 }
349
350 void SetSizeOnDisk(int64 SizeOnDisk)
351 {
352#if !USE_RUNTIME_BULKDATA
353 *reinterpret_cast<int64*>(&Data[16]) = SizeOnDisk;
354#endif // !USE_RUNTIME_BULKDATA
355 }
356
357 inline int64 GetOffset() const
358 {
359 const int64 Offset = static_cast<int64>(ReadUInt40(Data + 5));
360 return Offset > MaxOffset ? INDEX_NONE : Offset;
361 }
362
363 inline void SetOffset(int64 Offset)
364 {
365 check(Offset <= MaxOffset);
366
367 if (Offset < 0)
368 {
370 }
371
372 WriteUInt40(Data + 5, uint64(Offset));
373 }
374
375 FIoOffsetAndLength GetOffsetAndLength() const;
376
377 EBulkDataLockStatus GetLockStatus() const
378 {
379 return static_cast<EBulkDataLockStatus>(Data[11]);
380 }
381
382 void SetLockStatus(EBulkDataLockStatus Status)
383 {
384 Data[11] = uint8(Status);
385 }
386
388 {
389 return static_cast<EBulkDataFlags>(*reinterpret_cast<const uint32*>(&Data[12]));
390 }
391
393 {
394 *reinterpret_cast<uint32*>(&Data[12]) = static_cast<uint32>(Flags);
395 }
396
397 void AddFlags(EBulkDataFlags Flags)
398 {
399 *reinterpret_cast<uint32*>(&Data[12]) |= static_cast<uint32>(Flags);
400 }
401
402 void ClearFlags(EBulkDataFlags Flags)
403 {
404 *reinterpret_cast<uint32*>(&Data[12]) &= ~static_cast<uint32>(Flags);
405 }
406
407 inline bool HasAnyFlags(EBulkDataFlags Flags) const
408 {
409 return (GetFlags() & Flags) != 0;
410 }
411
412 inline bool HasAllFlags(EBulkDataFlags Flags) const
413 {
414 return (GetFlags() & Flags) == Flags;
415 }
416
423 COREUOBJECT_API static bool FromSerialized(FArchive& Ar, int64 ElementSize, FBulkMetaData& OutMetaData, int64& OutDuplicateOffset);
424
426 static bool FromSerialized(FArchive& Ar, int64 ElementSize, FBulkMetaData& OutMetaData)
427 {
428 int64 DuplicateOffset = INDEX_NONE;
429 return FromSerialized(Ar, ElementSize, OutMetaData, DuplicateOffset);
430 }
431
432private:
433 static uint64 ReadUInt40(const uint8* Memory)
434 {
435 return static_cast<int64>(uint64(Memory[0]) | uint64(Memory[1]) << 8 | uint64(Memory[2]) << 16 | uint64(Memory[3]) << 24 | uint64(Memory[4]) << 32);
436 }
437
438 static void WriteUInt40(uint8* Memory, uint64 Value)
439 {
440 Memory[0] = uint8(Value); Memory[1] = uint8(Value >> 8); Memory[2] = uint8(Value >> 16); Memory[3] = uint8(Value >> 24); Memory[4] = uint8(Value >> 32);
441 }
442#if USE_RUNTIME_BULKDATA
443 uint8 Data[16] = {0};
444#else
445 uint8 Data[24] = {0};
446#endif // USE_RUNTIME_BULKDATA
447};
448
449} // namespace UE::BulkData::Private
450
465
470{
471 // This struct represents an optional allocation.
472 struct FAllocatedPtr
473 {
474 FAllocatedPtr() = default;
475 ~FAllocatedPtr() = default;
476
477 inline bool IsLoaded() const
478 {
479 return Allocation.RawData != nullptr; // Doesn't matter which allocation we test
480 }
481
482 void Free(FBulkData* Owner);
483
484 void* ReallocateData(FBulkData* Owner, int64 SizeInBytes);
485
486 void SetData(FBulkData* Owner, void* Buffer);
487 void SetMemoryMappedData(FBulkData* Owner, IMappedFileHandle* MappedHandle, IMappedFileRegion* MappedRegion);
488
489 void* GetAllocationForWrite(const FBulkData* Owner) const;
490 const void* GetAllocationReadOnly(const FBulkData* Owner) const;
491
493 void Swap(FBulkData* Owner, void** DstBuffer);
494
495 private:
496
497 union FAllocation
498 {
500 void* RawData;
502 FOwnedBulkDataPtr* MemoryMappedData;
503 };
504
505 FAllocation Allocation{ nullptr };
506 };
507
508public:
509 friend class FLinkerLoad;
510 friend class FLinkerSave;
511 friend class FExportArchive;
512 friend class UE::Serialization::FEditorBulkData; // To allow access to AttachedAr
514
516
517 static constexpr SIZE_T MaxBulkDataSize = (1ull << 40) - 1;
518
519 /*-----------------------------------------------------------------------------
520 Constructors and operators
521 -----------------------------------------------------------------------------*/
522
526 FBulkData() = default;
527
534
539
546
547 /*-----------------------------------------------------------------------------
548 Static functions.
549 -----------------------------------------------------------------------------*/
550
557
558 /*-----------------------------------------------------------------------------
559 Accessors
560 -----------------------------------------------------------------------------*/
561
587
591 COREUOBJECT_API bool CanLoadFromDisk() const;
592
596 COREUOBJECT_API bool DoesExist() const;
597
604
611
617 UE_DEPRECATED(5.5, "No longer provides any functionality (assume that this will always return true")
619
624 UE_DEPRECATED(5.3, "The feature is being removed, it is assumed that all bulkdata is available for use")
626
631 bool IsOptional() const
632 {
634 }
635
640 bool IsInlined() const
641 {
643 }
644
649 bool IsInSeparateFile() const
650 {
652 }
653
662
668 {
670 }
671
676 {
678 }
679
683 bool IsSingleUse() const
684 {
685 return (GetBulkDataFlags() & BULKDATA_SingleUse) != 0;
686 }
687
693 {
695 }
696
703
712
719
720#if WITH_EDITOR
722#endif //WITH_EDITOR
728 COREUOBJECT_API uint32 GetBulkDataAlignment() const;
729
736
742 FIoFilenameHash GetIoFilenameHash() const { return MakeIoFilenameHash(BulkChunkId); }
743
746
748 COREUOBJECT_API FString GetDebugName() const;
749
750 /*-----------------------------------------------------------------------------
751 Data retrieval and manipulation.
752 -----------------------------------------------------------------------------*/
753
760 COREUOBJECT_API void GetCopy( void** Dest, bool bDiscardInternalCopy = true );
761
767 COREUOBJECT_API void* Lock( uint32 LockFlags );
768
773 COREUOBJECT_API const void* LockReadOnly() const;
774
781 COREUOBJECT_API void* Realloc(int64 ElementCount, int64 ElementSize);
782
786 COREUOBJECT_API void Unlock() const;
787
791 bool IsLocked() const { return BulkMeta.GetLockStatus() != LOCKSTATUS_Unlocked; }
792
796 bool IsUnlocked() const { return BulkMeta.GetLockStatus() == LOCKSTATUS_Unlocked; }
797
805
806#if !USE_RUNTIME_BULKDATA
812
818#endif // USE_RUNTIME_BULKDATA
819
824
834 COREUOBJECT_API void StoreCompressedOnDisk( FName CompressionFormat );
835
843
844 /*-----------------------------------------------------------------------------
845 Serialization.
846 -----------------------------------------------------------------------------*/
847
849
860
872
874 {
875 // @todo if non-mapped bulk data, do we need to detach this, or mimic GetCopy more than we do?
876 return DataAllocation.StealFileMapping(this);
877 }
878
889
890#if WITH_EDITOR
898#endif
899
900 /*-----------------------------------------------------------------------------
901 Async Streaming Interface.
902 -----------------------------------------------------------------------------*/
903
910
921
934
943
944 /*-----------------------------------------------------------------------------
945 Class specific virtuals.
946 -----------------------------------------------------------------------------*/
947
948protected:
949
951
952private:
953
955#if WITH_EDITOR
964#endif // WITH_EDITOR
965
966 /*-----------------------------------------------------------------------------
967 Internal helpers
968 -----------------------------------------------------------------------------*/
969
973 COREUOBJECT_API void MakeSureBulkDataIsLoaded();
974
983 COREUOBJECT_API bool TryLoadDataIntoMemory(FIoBuffer Dest);
984
985 UE_DEPRECATED(5.5, "No longer provides any functionality")
987
989 COREUOBJECT_API bool NeedsOffsetFixup() const;
990
991 COREUOBJECT_API bool CanDiscardInternalData() const;
992
994 inline void* ReallocateData(int64 SizeInBytes) { return DataAllocation.ReallocateData(this, SizeInBytes); }
995
997 inline void FreeData() { DataAllocation.Free(this); }
998
1000 inline void* GetDataBufferForWrite() const { return DataAllocation.GetAllocationForWrite(this); }
1001
1003 inline const void* GetDataBufferReadOnly() const { return DataAllocation.GetAllocationReadOnly(this); }
1004
1005 /*-----------------------------------------------------------------------------
1006 Member variables.
1007 -----------------------------------------------------------------------------*/
1008
1009 FAllocatedPtr DataAllocation;
1010 UE::BulkData::Private::FBulkMetaData BulkMeta;
1012
1013protected:
1014#if WITH_EDITOR
1016 FArchive* AttachedAr = nullptr;
1018 FLinkerLoad* Linker = nullptr;
1020 FBulkDataCookedIndex CookedIndex;
1021#endif // WITH_EDITOR
1022 //
1023#if !USE_RUNTIME_BULKDATA
1026#endif // !USE_RUNTIME_BULKDATA
1027};
1028
1034template<typename ElementType>
1035class TBulkData : public FBulkData
1036{
1037public:
1038
1039 static_assert(TIsPODType<ElementType>::Value, "Bulk data is limited to POD types");
1040
1047 {
1048 return sizeof(ElementType);
1049 }
1050
1057 {
1058 return GetBulkDataSize() / sizeof(ElementType);
1059 }
1060
1066 ElementType* Realloc(int64 ElementCount)
1067 {
1068 return (ElementType*)FBulkData::Realloc(ElementCount, sizeof(ElementType));
1069 }
1070
1081 {
1082 const int64 MaxElementCount = GetElementCount();
1083
1084 check(RequestedElementCount <= MaxElementCount);
1085
1086 ElementType* Ptr = nullptr;
1087 GetCopy((void**)& Ptr, bDiscardInternalCopy);
1088
1089 const int64 BufferSize = (RequestedElementCount > 0 ? RequestedElementCount : MaxElementCount);
1090
1091 return FBulkDataBuffer<ElementType>(Ptr, BufferSize);
1092 }
1093
1107
1131};
1132
1137
1139{
1140 friend class UBodySetup;
1141
1143public:
1145 {
1146 FlushData();
1147 }
1149 {
1150 return Formats.Contains(Format);
1151 }
1157 {
1158 FByteBulkData* Result = Formats.FindRef(Format);
1159 if (!Result)
1160 {
1161 Result = new FByteBulkData;
1162 Formats.Add(Format, Result);
1163 }
1164 return *Result;
1165 }
1167 {
1168 for (const TPair<FName, FByteBulkData*>& Format : Formats)
1169 {
1170 FByteBulkData* BulkData = Format.Value;
1171 delete BulkData;
1172 }
1173 Formats.Empty();
1174 }
1175
1177 {
1178 // Safely clean up any entries that the current FFormatContainer has before creating/adding copies from the provided container.
1179 FlushData();
1180
1181 for (const TPair<FName, FByteBulkData*>& Format : Other.Formats)
1182 {
1183 FByteBulkData* Copy = new FByteBulkData(*Format.Value);
1184 Formats.Add(Format.Key, Copy);
1185 }
1186 }
1187
1188 COREUOBJECT_API void Serialize(FArchive& Ar, UObject* Owner, const TArray<FName>* FormatsToSave = nullptr, bool bSingleUse = true, uint16 InAlignment = DEFAULT_ALIGNMENT, bool bInline = true, bool bMapped = false);
1190};
1191
1194{
1195public:
1197 enum class EStatus : uint32
1198 {
1200 None,
1202 Pending,
1204 Ok,
1206 Cancelled,
1208 Error
1209 };
1210
1211protected:
1213 {
1214 public:
1215 virtual ~IHandle();
1216
1217 virtual void AddRef() = 0;
1218 virtual void Release() = 0;
1219 virtual uint32 GetRefCount() const = 0;
1220
1222 virtual bool Cancel() = 0;
1223 virtual bool Wait(uint32 Milliseconds) = 0;
1225 };
1226
1227public:
1230
1233
1235 FBulkDataRequest() = default;
1236
1239
1243
1247
1249 EStatus GetStatus() const { return Handle.IsValid() ? Handle->GetStatus() : EStatus::None; }
1250
1253
1256
1258 bool IsOk() const { return FBulkDataRequest::EStatus::Ok == GetStatus(); }
1259
1261 bool IsCompleted() const { return GetStatus() > EStatus::Pending; }
1262
1264 void Cancel() { if (Handle.IsValid()) { Handle->Cancel(); } }
1265
1267 void Reset() { Handle.SafeRelease(); }
1268
1269protected:
1270 friend class FHandleBase;
1273
1279
1281};
1282
1285
1295{
1296public:
1297 class FBatchHandle;
1298
1299private:
1300 class FBuilder
1301 {
1302 public:
1303 COREUOBJECT_API ~FBuilder();
1304 FBuilder(const FBuilder&) = delete;
1305 FBuilder& operator=(const FBuilder&) = delete;
1306
1307 protected:
1308 COREUOBJECT_API explicit FBuilder(int32 MaxCount);
1311
1312 int32 BatchCount = 0;
1313 int32 NumLoaded = 0;
1314
1315 private:
1316 int32 BatchMax = -1;
1318 };
1319
1320public:
1322
1324 COREUOBJECT_API void Wait();
1325
1331
1336 COREUOBJECT_API bool WaitFor(const FTimespan& WaitTime);
1337
1343
1400
1402 class FScatterGatherBuilder : public FBuilder
1403 {
1404 public:
1418
1419 private:
1420 struct FRequest
1421 {
1422 const FBulkData* BulkData = nullptr;
1423 uint64 Offset = 0;
1425 };
1426
1428 };
1429
1431 static FBatchBuilder NewBatch(int32 MaxCount = -1) { return FBatchBuilder(MaxCount); }
1432
1434 static FScatterGatherBuilder ScatterGather(int32 MaxCount = -1) { return FScatterGatherBuilder(MaxCount); }
1435};
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define check(expr)
Definition AssertionMacros.h:314
void FlushAsyncLoading(int32 RequestId)
Definition AsyncPackageLoader.cpp:313
TFunction< void(bool bWasCancelled, IBulkDataIORequest *)> FBulkDataIORequestCallBack
Definition BulkData.h:210
EBulkDataFlags
Definition BulkData.h:101
@ BULKDATA_DuplicateNonOptionalPayload
Definition BulkData.h:144
@ BULKDATA_None
Definition BulkData.h:103
@ BULKDATA_Size64Bit
Definition BulkData.h:139
@ BULKDATA_Force_NOT_InlinePayload
Definition BulkData.h:126
@ BULKDATA_LazyLoadable
Definition BulkData.h:158
@ BULKDATA_OptionalPayload
Definition BulkData.h:131
@ UE_DEPRECATED
Definition BulkData.h:113
@ BULKDATA_UsesIoDispatcher
Definition BulkData.h:163
@ BULKDATA_PayloadInSeparateFile
Definition BulkData.h:121
@ BULKDATA_ForceInlinePayload
Definition BulkData.h:115
@ BULKDATA_ForceSingleElementSerialization
Definition BulkData.h:109
@ BULKDATA_MemoryMappedPayload
Definition BulkData.h:137
@ BULKDATA_NoOffsetFixUp
Definition BulkData.h:148
@ BULKDATA_SingleUse
Definition BulkData.h:111
@ BULKDATA_PayloadAtEndOfFile
Definition BulkData.h:105
@ BULKDATA_AlwaysAllowDiscard
Definition BulkData.h:169
@ BULKDATA_DataIsMemoryMapped
Definition BulkData.h:165
@ BULKDATA_SerializeCompressedZLIB
Definition BulkData.h:107
@ BULKDATA_SerializeCompressed
Definition BulkData.h:117
@ BULKDATA_WorkspaceDomainPayload
Definition BulkData.h:153
TBulkData< uint8 > FByteBulkData
Definition BulkData.h:1133
COREUOBJECT_API FStringBuilderBase & LexToString(EBulkDataFlags Flags, FStringBuilderBase &Sb)
Definition BulkData.cpp:37
FArchive & operator<<(FArchive &Ar, EBulkDataFlags &Flags)
Definition BulkData.h:179
const FIoFilenameHash INVALID_IO_FILENAME_HASH
Definition BulkData.h:69
EBulkDataLockFlags
Definition BulkData.h:202
@ LOCK_READ_ONLY
Definition BulkData.h:203
@ LOCK_READ_WRITE
Definition BulkData.h:204
uint32 FIoFilenameHash
Definition BulkData.h:68
COREUOBJECT_API FIoFilenameHash MakeIoFilenameHash(const FString &Filename)
Definition BulkData.cpp:110
EBulkDataLockStatus
Definition BulkData.h:189
@ LOCKSTATUS_ReadOnlyLock
Definition BulkData.h:193
@ LOCKSTATUS_ReadWriteLock
Definition BulkData.h:195
@ LOCKSTATUS_Unlocked
Definition BulkData.h:191
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FPlatformTypes::SIZE_T SIZE_T
An unsigned integer the same size as a pointer, the same as UPTRINT.
Definition Platform.h:1150
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
FArchive & operator<<(FArchive &Ar, FEnvQueryDebugProfileData::FStep &Data)
Definition EnvQueryTypes.cpp:489
EFileRegionType
Definition FileRegions.h:15
EAsyncIOPriorityAndFlags
Definition GenericPlatformFile.h:31
@ AIOP_BelowNormal
Definition GenericPlatformFile.h:43
@ DEFAULT_ALIGNMENT
Definition MemoryBase.h:24
#define MAX_int64
Definition NumericLimits.h:26
#define MAX_uint64
Definition NumericLimits.h:22
@ Milliseconds
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
uint32 Offset
Definition VulkanMemory.cpp:4033
uint32 Size
Definition VulkanMemory.cpp:4034
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
UE_FORCEINLINE_HINT bool IsSaving() const
Definition Archive.h:248
Definition BulkData.h:1346
COREUOBJECT_API bool IsEmpty() const
Definition BulkDataStreaming.cpp:813
FBatchBuilder & Read(const FBulkData &BulkData, uint64 Offset, uint64 Size, EAsyncIOPriorityAndFlags Priority, FIoBuffer &Dst, FBulkDataBatchReadRequest &OutRequest)
Definition BulkData.h:1374
COREUOBJECT_API void Issue()
Definition BulkDataStreaming.cpp:901
FBatchBuilder & Read(const FBulkData &BulkData, uint64 Offset, uint64 Size, EAsyncIOPriorityAndFlags Priority, FIoBuffer &Dst)
Definition BulkData.h:1361
Definition BulkDataStreaming.cpp:614
COREUOBJECT_API void Issue(FIoBuffer &Dst, EAsyncIOPriorityAndFlags Priority, FCompletionCallback &&Callback, FBulkDataBatchRequest &OutRequest)
Definition BulkDataStreaming.cpp:950
Definition BulkData.h:1295
static FScatterGatherBuilder ScatterGather(int32 MaxCount=-1)
Definition BulkData.h:1434
static FBatchBuilder NewBatch(int32 MaxCount=-1)
Definition BulkData.h:1431
COREUOBJECT_API bool WaitFor(uint32 Milliseconds)
Definition BulkDataStreaming.cpp:750
COREUOBJECT_API void Wait()
Definition BulkDataStreaming.cpp:742
COREUOBJECT_API void UpdatePriority(const EAsyncIOPriorityAndFlags Priority)
Definition BulkDataStreaming.cpp:765
FBulkDataRequest()=default
Definition BulkDataBuffer.h:16
Definition BulkDataCookedIndex.h:34
Definition BulkData.h:1213
virtual bool Cancel()=0
virtual FBulkDataRequest::EStatus GetStatus() const =0
virtual void UpdatePriority(const EAsyncIOPriorityAndFlags Priority)=0
virtual uint32 GetRefCount() const =0
virtual void AddRef()=0
virtual void Release()=0
virtual bool Wait(uint32 Milliseconds)=0
virtual ~IHandle()
Definition BulkDataStreaming.cpp:472
Definition BulkData.h:1194
FBulkDataRequest & operator=(const FBulkDataRequest &)=delete
FBulkDataRequest & operator=(FBulkDataRequest &&)=default
EStatus GetStatus() const
Definition BulkData.h:1249
bool IsPending() const
Definition BulkData.h:1255
bool IsNone() const
Definition BulkData.h:1252
FBulkDataRequest(const FBulkDataRequest &)=delete
FBulkDataRequest(FBulkDataRequest::IHandle *InHandle)
Definition BulkData.h:1274
FBulkDataRequest(FBulkDataRequest &&)=default
bool IsCompleted() const
Definition BulkData.h:1261
static constexpr EAsyncIOPriorityAndFlags DefaultPriority
Definition BulkData.h:1232
EStatus
Definition BulkData.h:1198
~FBulkDataRequest()=default
bool IsOk() const
Definition BulkData.h:1258
void Cancel()
Definition BulkData.h:1264
FBulkDataRequest()=default
void Reset()
Definition BulkData.h:1267
TRefCountPtr< IHandle > Handle
Definition BulkData.h:1280
Definition BulkData.h:470
COREUOBJECT_API void ClearBulkDataFlags(uint32 BulkDataFlagsToClear)
Definition BulkData.cpp:1193
COREUOBJECT_API void RemoveBulkData()
Definition BulkData.cpp:1049
static COREUOBJECT_API bool HasFlags(EBulkDataFlags Flags, EBulkDataFlags Contains)
Definition BulkData.cpp:1235
bool IsLocked() const
Definition BulkData.h:791
COREUOBJECT_API bool DoesExist() const
Definition BulkData.cpp:813
bool IsUsingIODispatcher() const
Definition BulkData.h:667
COREUOBJECT_API int64 GetBulkDataSize() const
Definition BulkData.cpp:770
COREUOBJECT_API void GetBulkDataVersions(FArchive &InlineArchive, FPackageFileVersion &OutUEVersion, int32 &OutLicenseeUEVersion, FCustomVersionContainer &OutCustomVersions) const
Definition BulkData.cpp:1422
COREUOBJECT_API void StoreCompressedOnDisk(FName CompressionFormat)
Definition BulkData.cpp:1484
FIoFilenameHash GetIoFilenameHash() const
Definition BulkData.h:742
COREUOBJECT_API bool IsStoredCompressedOnDisk() const
Definition BulkData.cpp:799
static COREUOBJECT_API void ClearBulkDataFlagsOn(EBulkDataFlags &InOutAccumulator, EBulkDataFlags FlagsToClear)
Definition BulkData.cpp:1230
COREUOBJECT_API bool CanLoadFromDisk() const
Definition BulkData.cpp:804
FBulkData()=default
COREUOBJECT_API void SetBulkDataFlags(uint32 BulkDataFlagsToSet)
Definition BulkData.cpp:1149
COREUOBJECT_API void Serialize(FArchive &Ar, UObject *Owner, bool bAttemptFileMapping, int32 ElementSize, EFileRegionType FileRegionType)
Definition BulkData.cpp:1240
bool IsSingleUse() const
Definition BulkData.h:683
COREUOBJECT_API int64 GetBulkDataOffsetInFile() const
Definition BulkData.cpp:790
TFunction< void(FArchive &, void *, int64, EBulkDataFlags)> FSerializeBulkDataElements
Definition BulkData.h:848
COREUOBJECT_API bool UnloadBulkData()
Definition BulkData.cpp:1071
COREUOBJECT_API FIoChunkId CreateChunkId() const
Definition BulkData.cpp:1198
COREUOBJECT_API FString GetDebugName() const
Definition BulkData.cpp:1203
FOwnedBulkDataPtr * StealFileMapping()
Definition BulkData.h:873
static constexpr SIZE_T MaxBulkDataSize
Definition BulkData.h:517
COREUOBJECT_API IBulkDataIORequest * CreateStreamingRequest(EAsyncIOPriorityAndFlags Priority, FBulkDataIORequestCallBack *CompleteCallback, uint8 *UserSuppliedMemory) const
Definition BulkData.cpp:1586
COREUOBJECT_API void ForceBulkDataResident()
Definition BulkData.cpp:1128
COREUOBJECT_API bool IsAsyncLoadingComplete() const
Definition BulkData.cpp:849
COREUOBJECT_API void ResetBulkDataFlags(uint32 BulkDataFlagsToSet)
Definition BulkData.cpp:1154
bool IsOptional() const
Definition BulkData.h:631
COREUOBJECT_API uint32 GetBulkDataFlags() const
Definition BulkData.cpp:1164
bool IsDataMemoryMapped() const
Definition BulkData.h:675
COREUOBJECT_API IAsyncReadFileHandle * OpenAsyncReadHandle() const
Definition BulkData.cpp:1574
COREUOBJECT_API void * Realloc(int64 ElementCount, int64 ElementSize)
Definition BulkData.cpp:1010
bool IsInSeparateFile() const
Definition BulkData.h:649
static COREUOBJECT_API void DumpBulkDataUsage(FOutputDevice &Log)
Definition BulkData.cpp:682
COREUOBJECT_API void GetCopy(void **Dest, bool bDiscardInternalCopy=true)
Definition BulkData.cpp:872
COREUOBJECT_API void Unlock() const
Definition BulkData.cpp:1031
COREUOBJECT_API FBulkData & operator=(const FBulkData &Other)
Definition BulkData.cpp:643
bool IsInExternalResource() const
Definition BulkData.h:658
COREUOBJECT_API int64 GetBulkDataSizeOnDisk() const
Definition BulkData.cpp:781
void SerializeBulkData(FArchive &Ar, void *Data, EBulkDataFlags InBulkDataFlags)
Definition BulkData.h:868
COREUOBJECT_API const void * LockReadOnly() const
Definition BulkData.cpp:995
COREUOBJECT_API ~FBulkData()
Definition BulkData.cpp:617
COREUOBJECT_API bool IsAvailableForUse() const
Definition BulkData.cpp:855
static COREUOBJECT_API void SetBulkDataFlagsOn(EBulkDataFlags &InOutAccumulator, EBulkDataFlags FlagsToSet)
Definition BulkData.cpp:1225
bool IsInlined() const
Definition BulkData.h:640
COREUOBJECT_API FName GetDecompressionFormat() const
Definition BulkData.cpp:829
bool IsUnlocked() const
Definition BulkData.h:796
bool IsDuplicateNonOptional() const
Definition BulkData.h:692
COREUOBJECT_API bool IsBulkDataLoaded() const
Definition BulkData.cpp:844
Definition BulkDataStreaming.cpp:556
Definition CustomVersion.h:111
Definition AsyncLoading2.cpp:2479
Definition BulkData.h:1139
~FFormatContainer()
Definition BulkData.h:1144
bool Contains(FName Format) const
Definition BulkData.h:1148
void GetContainedFormats(TArray< FName > &OutFormats) const
Definition BulkData.h:1152
void FlushData()
Definition BulkData.h:1166
void DeepCopy(const FFormatContainer &Other)
Definition BulkData.h:1176
FByteBulkData & GetFormat(FName Format)
Definition BulkData.h:1156
COREUOBJECT_API void SerializeAttemptMappedLoad(FArchive &Ar, UObject *Owner)
Definition BulkData.cpp:1763
Definition BulkDataStreaming.cpp:479
Definition IoBuffer.h:15
Definition IoChunkId.h:64
static CORE_API const FIoChunkId InvalidChunkId
Definition IoChunkId.h:66
Definition LinkerLoad.h:124
Definition LinkerSave.h:48
Definition NameTypes.h:617
Definition OutputDevice.h:133
Definition PackagePath.h:89
Definition AsyncFileHandle.h:211
Definition AsyncFileHandle.h:31
Definition BulkData.h:84
virtual int64 GetSize() const =0
virtual bool WaitCompletion(float TimeLimitSeconds=0.0f)=0
virtual uint8 * GetReadResults()=0
virtual void Cancel()=0
virtual bool PollCompletion() const =0
virtual ~IBulkDataIORequest()
Definition BulkData.h:86
Definition MappedFileHandle.h:115
Definition MappedFileHandle.h:17
Definition Array.h:670
Definition BulkData.h:1036
int32 GetElementSize() const
Definition BulkData.h:1046
int64 GetElementCount() const
Definition BulkData.h:1056
void SerializeWithFlags(FArchive &Ar, UObject *Owner, uint32 SaveOverrideFlags, bool bAttemptFileMapping=false, EFileRegionType FileRegionType=EFileRegionType::None)
Definition BulkData.h:1117
FBulkDataBuffer< ElementType > GetCopyAsBuffer(int64 RequestedElementCount, bool bDiscardInternalCopy)
Definition BulkData.h:1080
ElementType * Realloc(int64 ElementCount)
Definition BulkData.h:1066
void Serialize(FArchive &Ar, UObject *Owner, int32 Idx=INDEX_NONE, bool bAttemptFileMapping=false, EFileRegionType FileRegionType=EFileRegionType::None)
Definition BulkData.h:1103
Definition AndroidPlatformMisc.h:14
Definition RefCounting.h:454
Definition SortedMap.h:20
UE_FORCEINLINE_HINT ValueType & Add(const KeyType &InKey, const ValueType &InValue)
Definition SortedMap.h:194
UE_FORCEINLINE_HINT void Empty(int32 ExpectedNumElements=0)
Definition SortedMap.h:124
void GenerateKeyArray(TArray< KeyType, Allocator > &OutArray) const
Definition SortedMap.h:415
ValueType FindRef(KeyConstPointerType Key) const
Definition SortedMap.h:338
bool Contains(KeyConstPointerType Key) const
Definition SortedMap.h:387
Definition BodySetup.h:128
Definition EditorBulkData.h:132
Definition Object.h:95
Flags
Definition SoundFileIOEnums.h:78
uint32 GetFlags(uint32 Word3)
Definition CollisionFilterData.cpp:21
void SetFlags(uint32 &Word3, uint32 Flags)
Definition CollisionFilterData.cpp:27
GeometryCollection::Facades::FMuscleActivationData Data
Definition MuscleActivationConstraints.h:15
const FVector Offset(0, 0, 20)
Definition Linker.cpp:38
Definition BulkData.cpp:140
bool HasAnyFlags(const UObject *Obj, int32 FlagsToCheck)
Definition ObjectFwd.cpp:43
Definition AdvancedWidgetsModule.cpp:13
U16 Index
Definition radfft.cpp:71
Definition BulkData.h:453
bool bAttemptMemoryMapping
Definition BulkData.h:461
FBulkDataCookedIndex CookedIndex
Definition BulkData.h:463
EFileRegionType RegionType
Definition BulkData.h:459
int32 ElementSize
Definition BulkData.h:457
UObject * Owner
Definition BulkData.h:455
Definition IoOffsetLength.h:12
Definition BulkData.h:216
IMappedFileRegion * GetMappedRegion()
Definition BulkData.h:240
FOwnedBulkDataPtr(IMappedFileHandle *Handle, IMappedFileRegion *Region)
Definition BulkData.h:225
bool IsDataMemoryMapped() const
Definition BulkData.h:244
void RelinquishOwnership()
Definition BulkData.h:249
IMappedFileHandle * GetMappedHandle()
Definition BulkData.h:236
COREUOBJECT_API ~FOwnedBulkDataPtr()
Definition BulkData.cpp:578
COREUOBJECT_API const void * GetPointer()
Definition BulkData.cpp:594
FOwnedBulkDataPtr(void *InAllocatedData)
Definition BulkData.h:217
Definition ObjectVersion.h:762
Definition Timespan.h:76
Definition IsPODType.h:12
Definition Optional.h:131
Definition Tuple.h:652