UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PackageTrailer.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6#include "Containers/Array.h"
7#include "Containers/Map.h"
9#include "CoreTypes.h"
10#include "IO/IoHash.h"
11#include "Misc/EnumClassFlags.h"
12#include "Templates/Function.h"
13#include "Templates/UniquePtr.h"
14#include "UObject/NameTypes.h"
16
17class FArchive;
18class FLinkerSave;
19class FPackagePath;
20
21namespace UE
22{
23
74{
76 Any,
78 Local,
83};
84
87{
90};
91
92// TODO: Could consider merging EPayloadStorageType and EPayloadStatus, only difference is Any vs NotFound
93
96{
98 NotFound = 0,
105};
106
109{
111 Local = 0,
116};
117
120{
122 None = 0,
123};
124
126
127enum class EPackageTrailerVersion : uint32;
128
129namespace Private
130{
131
133{
135 static constexpr uint32 SizeOnDisk = 49; // Identifier | 20 bytes
136 // OffsetInFile | 8 bytes
137 // CompressedSize | 8 bytes
138 // RawSize | 8 bytes
139 // Flags | 4 bytes
140 // AccessMode | 1 byte
141
142 FLookupTableEntry() = default;
144
146
147 [[nodiscard]] bool IsLocal() const
148 {
150 }
151
152 [[nodiscard]] bool IsReferenced() const
153 {
155 }
156
157 [[nodiscard]] bool IsVirtualized() const
158 {
160 }
161
174
176};
177
178} // namespace Private
179
180//** Info about a payload stored in the trailer
192
200{
201public:
203
214
215 UE_DEPRECATED(5.1, "Use the overload that takes a FString instead of an FName for the last parameter")
217 {
218 return FPackageTrailerBuilder::CreateFromTrailer(Trailer, Ar, PackageName.ToString());
219 }
220
230
231 UE_DEPRECATED(5.1, "Use the overload that takes a FString instead of an FName for the last parameter")
236
238 UE_DEPRECATED(5.1, "Use the overload that takes a FString instead of an FName")
240 COREUOBJECT_API FPackageTrailerBuilder(FString&& DebugContext);
242
243 // Methods that can be called while building the trailer
244
254 COREUOBJECT_API void AddPayload(const FIoHash& Identifier, FCompressedBuffer Payload, UE::Virtualization::EPayloadFilterReason Filter, AdditionalDataCallback&& Callback);
255 COREUOBJECT_API void AddPayload(const FIoHash& Identifier, FCompressedBuffer Payload, UE::Virtualization::EPayloadFilterReason Filter);
266
277
284
295
297 [[nodiscard]] COREUOBJECT_API bool IsEmpty() const;
298
302
310
313
320
322 [[nodiscard]] const FString& GetDebugContext() const
323 {
324 return DebugContext;
325 }
326
327private:
328
330 struct LocalEntry
331 {
332 LocalEntry() = default;
334 : Payload(InPayload)
335 , FilterFlags(InFilterFlags)
336 {
337
338 }
339 ~LocalEntry() = default;
340
341 FCompressedBuffer Payload;
343 };
344
346 struct ReferencedEntry
347 {
348 ReferencedEntry() = default;
349 ReferencedEntry(int64 InOffset, int64 InCompressedSize, int64 InRawSize)
350 : Offset(InOffset)
351 , CompressedSize(InCompressedSize)
352 , RawSize(InRawSize)
353 {
354
355 }
356 ~ReferencedEntry() = default;
357
359 int64 CompressedSize = INDEX_NONE;
360 int64 RawSize = INDEX_NONE;
361 };
362
363
365 struct VirtualizedEntry
366 {
367 VirtualizedEntry() = default;
368 VirtualizedEntry(int64 InRawSize)
369 : RawSize(InRawSize)
370 {
371
372 }
373 ~VirtualizedEntry() = default;
374
375 int64 RawSize = INDEX_NONE;
376 };
377
379 COREUOBJECT_API uint32 CalculatePotentialHeaderSize() const;
381 COREUOBJECT_API uint64 CalculatePotentialPayloadSize() const;
382
383 COREUOBJECT_API void RemoveDuplicateEntries();
384
385 // Members used when building the trailer
386
388 FString DebugContext;
389
391 TMap<FIoHash, LocalEntry> LocalEntries;
393 TMap<FIoHash, ReferencedEntry> ReferencedEntries;
395 TMap<FIoHash, VirtualizedEntry> VirtualizedEntries;
398};
399
407{
408public:
414 UE_DEPRECATED(5.3, "FPackageTrailer::IsEnabled will always return true as the system is no longer optional")
415 [[nodiscard]] static bool IsEnabled()
416 {
417 return true;
418 }
419
422
424 [[nodiscard]] static COREUOBJECT_API bool TryLoadFromFile(const FString& Path, FPackageTrailer& OutTrailer);
425
428
429 FPackageTrailer() = default;
430 ~FPackageTrailer() = default;
431
434
437
442 [[nodiscard]] bool IsValid() const
443 {
444 return Header.Tag == FHeader::HeaderTag;
445 }
446
456
466
478
486
491
494
497
500
503
505
508
511
514
517
518 struct FHeader
519 {
521 static constexpr uint64 HeaderTag = 0xD1C43B2E80A5F697;
522
527 static constexpr uint32 StaticHeaderSizeOnDisk = 28; // HeaderTag | 8 bytes
528 // Version | 4 bytes
529 // HeaderLength | 4 bytes
530 // PayloadsDataLength | 8 bytes
531 // NumPayloads | 4 bytes
532
543
545 friend FArchive& operator<<(FArchive& Ar, FHeader& Header);
546 };
547
548 struct FFooter
549 {
551 static constexpr uint64 FooterTag = 0x29BFCA045138DE76;
552
554 static constexpr uint32 SizeOnDisk = 20; // Tag | 8 bytes
555 // TrailerLength | 8 bytes
556 // PackageTag | 4 bytes
557
564
567 };
568
569private:
571
573 COREUOBJECT_API FFooter CreateFooter() const;
574
576 int64 TrailerPositionInFile = INDEX_NONE;
577
582};
583
596
598template <typename CharType>
600{
601 switch (Mode)
602 {
604 Builder << TEXT("Local");
605 break;
607 Builder << TEXT("Referenced");
608 break;
610 Builder << TEXT("Virtualized");
611 break;
612 default:
613 Builder << TEXT("Invalid");
614 break;
615 }
616
617 return Builder;
618}
619
620
621} //namespace UE
622
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#define TEXT(x)
Definition Platform.h:1272
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
COREUOBJECT_API FString LexToString(UE::Virtualization::EPayloadFilterReason FilterFlags)
Definition PackageTrailer.cpp:1002
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
Definition CompressedBuffer.h:50
Definition LinkerSave.h:48
Definition NameTypes.h:617
Definition PackagePath.h:89
Definition Array.h:670
Definition AssetRegistryState.h:50
Definition AndroidPlatformMisc.h:14
Definition UnrealString.h.inl:34
Definition StringBuilder.h:79
Definition UniquePtr.h:107
Definition PackageTrailer.h:200
COREUOBJECT_API bool IsVirtualizedPayloadEntry(const FIoHash &Identifier) const
Definition PackageTrailer.cpp:425
COREUOBJECT_API uint64 CalculateTrailerLength()
Definition PackageTrailer.cpp:430
COREUOBJECT_API int32 GetNumPayloads() const
Definition PackageTrailer.cpp:443
const FString & GetDebugContext() const
Definition PackageTrailer.h:322
COREUOBJECT_API int32 GetNumLocalPayloads() const
Definition PackageTrailer.cpp:448
static COREUOBJECT_API FPackageTrailerBuilder CreateFromTrailer(const class FPackageTrailer &Trailer, FArchive &Ar, FString DebugContext)
COREUOBJECT_API void AddPayload(const FIoHash &Identifier, FCompressedBuffer Payload, UE::Virtualization::EPayloadFilterReason Filter, AdditionalDataCallback &&Callback)
Definition PackageTrailer.cpp:245
COREUOBJECT_API bool IsLocalPayloadEntry(const FIoHash &Identifier) const
Definition PackageTrailer.cpp:415
COREUOBJECT_API bool IsEmpty() const
Definition PackageTrailer.cpp:410
COREUOBJECT_API void AddVirtualizedPayload(const FIoHash &Identifier, int64 RawSize)
Definition PackageTrailer.cpp:273
static COREUOBJECT_API TUniquePtr< UE::FPackageTrailerBuilder > CreateReferenceToTrailer(const class FPackageTrailer &Trailer, FString DebugContext)
Definition PackageTrailer.cpp:193
COREUOBJECT_API bool BuildAndAppendTrailer(FLinkerSave *Linker, FArchive &DataArchive)
Definition PackageTrailer.cpp:296
COREUOBJECT_API int32 GetNumReferencedPayloads() const
Definition PackageTrailer.cpp:453
COREUOBJECT_API int32 GetNumVirtualizedPayloads() const
Definition PackageTrailer.cpp:458
COREUOBJECT_API bool IsReferencedPayloadEntry(const FIoHash &Identifier) const
Definition PackageTrailer.cpp:420
COREUOBJECT_API bool UpdatePayloadAsLocal(const FIoHash &Identifier, FCompressedBuffer Payload)
Definition PackageTrailer.cpp:281
Definition PackageTrailer.h:407
static bool IsEnabled()
Definition PackageTrailer.h:415
static COREUOBJECT_API bool TryLoadFromArchive(FArchive &Ar, FPackageTrailer &OutTrailer)
Definition PackageTrailer.cpp:545
FPackageTrailer & operator=(FPackageTrailer &&Other)=default
static COREUOBJECT_API bool TryLoadFromFile(const FString &Path, FPackageTrailer &OutTrailer)
Definition PackageTrailer.cpp:529
COREUOBJECT_API FCompressedBuffer LoadLocalPayload(const FIoHash &Id, FArchive &Ar) const
Definition PackageTrailer.cpp:670
bool IsValid() const
Definition PackageTrailer.h:442
static COREUOBJECT_API bool TryLoadFromPackage(const FPackagePath &PackagePath, FPackageTrailer &OutTrailer)
Definition PackageTrailer.cpp:512
COREUOBJECT_API bool UpdatePayloadAsVirtualized(const FIoHash &Identifier)
Definition PackageTrailer.cpp:690
COREUOBJECT_API bool TryLoadBackwards(FArchive &Ar)
Definition PackageTrailer.cpp:622
COREUOBJECT_API EPayloadStatus FindPayloadStatus(const FIoHash &Id) const
Definition PackageTrailer.cpp:716
FPackageTrailer & operator=(const FPackageTrailer &Other)=default
FPackageTrailer()=default
COREUOBJECT_API int64 FindPayloadOffsetInFile(const FIoHash &Id) const
Definition PackageTrailer.cpp:742
FPackageTrailer(FPackageTrailer &&Other)=default
COREUOBJECT_API int64 FindPayloadSizeOnDisk(const FIoHash &Id) const
Definition PackageTrailer.cpp:775
COREUOBJECT_API void ForEachPayload(TFunctionRef< void(const FIoHash &, uint64, uint64, EPayloadAccessMode, UE::Virtualization::EPayloadFilterReason)> Callback) const
Definition PackageTrailer.cpp:708
~FPackageTrailer()=default
COREUOBJECT_API TArray< FIoHash > GetPayloads(EPayloadStorageType StorageType) const
Definition PackageTrailer.cpp:818
COREUOBJECT_API bool TryLoad(FArchive &Ar)
Definition PackageTrailer.cpp:551
FPackageTrailer(const FPackageTrailer &Other)=default
COREUOBJECT_API int32 GetNumPayloads(EPayloadStorageType Type) const
Definition PackageTrailer.cpp:853
COREUOBJECT_API int64 GetTrailerLength() const
Definition PackageTrailer.cpp:790
COREUOBJECT_API FPayloadInfo GetPayloadInfo(const FIoHash &Id) const
Definition PackageTrailer.cpp:795
const FVector Offset(0, 0, 20)
Definition Linker.cpp:38
Definition OverriddenPropertySet.cpp:45
EPayloadFilterReason
Definition VirtualizationTypes.h:69
Definition AdvancedWidgetsModule.cpp:13
EPayloadFlags
Definition PackageTrailer.h:120
EPackageTrailerVersion
Definition PackageTrailer.cpp:20
EPayloadAccessMode
Definition PackageTrailer.h:109
FStringBuilderBase & operator<<(FStringBuilderBase &Builder, const FDerivedData &Data)
Definition DerivedData.cpp:255
EPayloadFilter
Definition PackageTrailer.h:87
EPayloadStorageType
Definition PackageTrailer.h:74
bool FindPayloadsInPackageFile(const FPackagePath &PackagePath, EPayloadStorageType Filter, TArray< FIoHash > &OutPayloadIds)
Definition PackageTrailer.cpp:966
EPayloadStatus
Definition PackageTrailer.h:96
Definition IoHash.h:33
Definition PackageTrailer.h:549
uint64 Tag
Definition PackageTrailer.h:559
uint32 PackageTag
Definition PackageTrailer.h:563
static constexpr uint32 SizeOnDisk
Definition PackageTrailer.h:554
friend FArchive & operator<<(FArchive &Ar, FFooter &Footer)
Definition PackageTrailer.cpp:957
uint64 TrailerLength
Definition PackageTrailer.h:561
static constexpr uint64 FooterTag
Definition PackageTrailer.h:551
Definition PackageTrailer.h:519
int32 Version
Definition PackageTrailer.h:536
friend FArchive & operator<<(FArchive &Ar, FHeader &Header)
Definition PackageTrailer.cpp:936
static constexpr uint64 HeaderTag
Definition PackageTrailer.h:521
uint32 HeaderLength
Definition PackageTrailer.h:538
static constexpr uint32 StaticHeaderSizeOnDisk
Definition PackageTrailer.h:527
uint64 PayloadsDataLength
Definition PackageTrailer.h:540
TArray< Private::FLookupTableEntry > PayloadLookupTable
Definition PackageTrailer.h:542
uint64 Tag
Definition PackageTrailer.h:534
Definition PackageTrailer.h:182
uint64 RawSize
Definition PackageTrailer.h:186
EPayloadFlags Flags
Definition PackageTrailer.h:189
Virtualization::EPayloadFilterReason FilterFlags
Definition PackageTrailer.h:190
int64 OffsetInFile
Definition PackageTrailer.h:183
EPayloadAccessMode AccessMode
Definition PackageTrailer.h:188
uint64 CompressedSize
Definition PackageTrailer.h:185
Definition PackageTrailer.h:133
bool IsVirtualized() const
Definition PackageTrailer.h:157
EPayloadAccessMode AccessMode
Definition PackageTrailer.h:175
bool IsLocal() const
Definition PackageTrailer.h:147
FIoHash Identifier
Definition PackageTrailer.h:163
int64 OffsetInFile
Definition PackageTrailer.h:165
uint64 RawSize
Definition PackageTrailer.h:169
Virtualization::EPayloadFilterReason FilterFlags
Definition PackageTrailer.h:173
uint64 CompressedSize
Definition PackageTrailer.h:167
static constexpr uint32 SizeOnDisk
Definition PackageTrailer.h:135
bool IsReferenced() const
Definition PackageTrailer.h:152
EPayloadFlags Flags
Definition PackageTrailer.h:171