UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SavePackage.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"
7#include "Containers/Set.h"
9#include "CoreGlobals.h"
10#include "CoreTypes.h"
11#include "Delegates/Delegate.h"
12#include "Logging/LogMacros.h"
13#include "Misc/DateTime.h"
14#include "Misc/EnumClassFlags.h"
15#include "Misc/Optional.h"
17#include "ObjectMacros.h"
22#include "Templates/Function.h"
23#include "Templates/UniquePtr.h"
25#include "UObject/NameTypes.h"
27#include "UObject/Package.h"
28
29class ITargetPlatform;
30class UObject;
31
32#if !defined(UE_WITH_SAVEPACKAGE)
33# define UE_WITH_SAVEPACKAGE 1
34#endif
35
36class FArchive;
37class FCbFieldView;
38class FCbWriter;
39class FIoBuffer;
40class FOutputDevice;
41class FPackagePath;
43class IPackageWriter;
44namespace UE { class FLogRecord; }
47
52{
53 class UPackage* Package = nullptr;
54 class UObject* Asset = nullptr;
55 FString Filename;
56};
57
63{
64 /* nullptr if not cooking, passed to the FArchive */
66
67 bool IsCooking() const { return ArchiveCookData != nullptr; }
69
76 /* Flags to control saving, a bitwise-or'd combination of values from ESaveFlags */
78 /* Whether we should forcefully byte swap before writing header and exports to disk. Passed into FLinkerSave. */
79 bool bForceByteSwapping = false;
80 /* If true (the default), warn when saving to a long filename. */
83 bool bSlowTask = true;
84 /*
85 * If not FDateTime::MinValue() (the default), the timestamp the saved file should be set to.
86 * (Intended for cooking only...)
87 */
93
99
100 FSavePackageArgs() = default;
105
106 UE_DEPRECATED(5.6, "Use the default constructor and assign elements individually.")
130};
131
133class UE_DEPRECATED(5.2, "Use a FSavePackageContext::ExternalValidationFunc if you need to run external validation") ISavePackageValidator;
135{
136public:
138 {
139 }
140
141 virtual ESavePackageResult ValidateImports(const UPackage* Package, const TSet<TObjectPtr<UObject>>& Imports) = 0;
142};
143
144
158
184
185
187{
188public:
191
193
195 COREUOBJECT_API static FSavePackageSettings& GetDefaultSettings();
196
197 bool IsDefault() const
198 {
199 return ExternalImportValidations.Num() == 0 && ExternalExportValidations.Num() == 0;
200 }
201
203 {
204 return ExternalImportValidations;
205 }
207 {
208 return ExternalExportValidations;
209 }
210
219
220private:
221 TArray<TFunction<ExternalImportValidationFunc>> ExternalImportValidations;
222 TArray<TFunction<ExternalExportValidationFunc>> ExternalExportValidations;
223};
224
226{
227public:
228
239
240 UE_DEPRECATED(5.0, "bInForceLegacyOffsets is no longer supported; remove the variable from your constructor call")
245
247
250 {
251 return Validator.Get();
252 }
258
263
268
272
273private:
277 FSavePackageSettings SavePackageSettings;
278public:
279
280 UE_DEPRECATED(5.0, "bForceLegacyOffsets is no longer supported; remove uses of the variable")
282};
283
284namespace UE::SavePackageUtilities
285{
290 COREUOBJECT_API bool IsUpdatingLoadedPath(bool bIsCooking, const FPackagePath& TargetPackagePath, uint32 SaveFlags);
291
297 COREUOBJECT_API bool IsProceduralSave(bool bIsCooking, const FPackagePath& TargetPackagePath, uint32 SaveFlags);
298
300 COREUOBJECT_API void CallPreSave(UObject* Object, FObjectSaveContextData& ObjectSaveContext);
301
302#if WITH_EDITOR
305#endif
306
308 COREUOBJECT_API void CallPreSaveRoot(UObject* Object, FObjectSaveContextData& ObjectSaveContext);
309
311 COREUOBJECT_API void CallPostSaveRoot(UObject* Object, FObjectSaveContextData& ObjectSaveContext, bool bCleanupRequired);
312
314 COREUOBJECT_API EObjectFlags NormalizeTopLevelFlags(EObjectFlags TopLevelFlags, bool bIsCooking);
315
316 COREUOBJECT_API void IncrementOutstandingAsyncWrites();
317 COREUOBJECT_API void DecrementOutstandingAsyncWrites();
318
319 COREUOBJECT_API void ResetCookStats();
320 COREUOBJECT_API int32 GetNumPackagesSaved();
321
322 UE_DEPRECATED(5.6, "Functionality has moved into private cooker implementation; contact Epic if you need this functionality.")
323 COREUOBJECT_API void StartSavingEDLCookInfoForVerification();
326 UE_DEPRECATED(5.6, "Functionality has moved into private cooker implementation; contact Epic if you need this functionality.")
327 COREUOBJECT_API void VerifyEDLCookInfo(bool bFullReferencesExpected = true);
328 UE_DEPRECATED(5.5, "Functionality has moved into private cooker implementation; contact Epic if you need this functionality.")
330 UE_DEPRECATED(5.6, "Functionality has moved into private cooker implementation; contact Epic if you need this functionality.")
332 UE_DEPRECATED(5.6, "Functionality has moved into private cooker implementation; contact Epic if you need this functionality.")
333 COREUOBJECT_API void EDLCookInfoAddIterativelySkippedPackage(FName LongPackageName);
334 UE_DEPRECATED(5.6, "Functionality has moved into private cooker implementation; contact Epic if you need this functionality.")
335 COREUOBJECT_API void EDLCookInfoMoveToCompactBinaryAndClear(FCbWriter& Writer, bool& bOutHasData);
336 UE_DEPRECATED(5.6, "Functionality has moved into private cooker implementation; contact Epic if you need this functionality.")
337 COREUOBJECT_API void EDLCookInfoMoveToCompactBinaryAndClear(FCbWriter& Writer, bool& bOutHasData, FName PackageName);
338 UE_DEPRECATED(5.6, "Functionality has moved into private cooker implementation; contact Epic if you need this functionality.")
339 COREUOBJECT_API bool EDLCookInfoAppendFromCompactBinary(FCbFieldView Field);
340
341 UE_DEPRECATED(5.5, "No longer used; skiponlyeditoronly is used instead and tracks editoronly references via savepackage results.")
342 inline bool CanSkipEditorReferencedPackagesWhenCooking() { return false; }
343
344
345#if WITH_EDITOR
353#endif
354
355}
356
358{
359
378
381
382}
383
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_DELEGATE_TwoParams(DelegateName, Param1Type, Param2Type)
Definition DelegateCombinations.h:57
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
return true
Definition ExternalRpcRegistry.cpp:601
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
Definition LogMacros.h:361
@ SAVE_None
No flags.
Definition ObjectMacros.h:98
EObjectFlags
Definition ObjectMacros.h:552
@ RF_NoFlags
No flags, used to avoid a cast.
Definition ObjectMacros.h:555
CORE_API FOutputDeviceError * GError
Definition OutputDevice.cpp:92
ESavePackageResult
Definition Package.h:74
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
if(Failed) console_printf("Failed.\n")
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition ArchiveUObject.h:17
Definition Archive.h:1208
Definition CompactBinary.h:610
Definition CompactBinaryWriter.h:68
Definition IoBuffer.h:15
Definition NameTypes.h:617
Definition UnrealType.h:3087
Definition OutputDevice.h:133
Definition PackagePath.h:89
Definition SavePackage.h:226
COREUOBJECT_API ~FSavePackageContext()
FSavePackageContext(const ITargetPlatform *InTargetPlatform, IPackageWriter *InPackageWriter, FSavePackageSettings InSettings=FSavePackageSettings())
Definition SavePackage.h:229
const ITargetPlatform *const TargetPlatform
Definition SavePackage.h:269
PRAGMA_DISABLE_DEPRECATION_WARNINGS ISavePackageValidator * GetValidator()
Definition SavePackage.h:249
PRAGMA_ENABLE_DEPRECATION_WARNINGS const TArray< TFunction< FSavePackageSettings::ExternalImportValidationFunc > > & GetExternalImportValidations() const
Definition SavePackage.h:259
IPackageWriter::FCapabilities PackageWriterCapabilities
Definition SavePackage.h:271
const TArray< TFunction< FSavePackageSettings::ExternalExportValidationFunc > > & GetExternalExportValidations() const
Definition SavePackage.h:264
const bool bForceLegacyOffsets
Definition SavePackage.h:281
IPackageWriter *const PackageWriter
Definition SavePackage.h:270
void SetValidator(TUniquePtr< ISavePackageValidator > &&InValidator)
Definition SavePackage.h:253
Definition SavePackage.h:187
const TArray< TFunction< ExternalExportValidationFunc > > & GetExternalExportValidations() const
Definition SavePackage.h:206
const TArray< TFunction< ExternalImportValidationFunc > > & GetExternalImportValidations() const
Definition SavePackage.h:202
void AddExternalExportValidation(TFunction< ExternalExportValidationFunc > InValidation)
Definition SavePackage.h:215
bool IsDefault() const
Definition SavePackage.h:197
ESavePackageResult ExternalExportValidationFunc(const FExportsValidationContext &InValidationContext)
Definition SavePackage.h:190
ESavePackageResult ExternalImportValidationFunc(const FImportsValidationContext &InValidationContext)
Definition SavePackage.h:189
FSavePackageSettings()=default
void AddExternalImportValidation(TFunction< ExternalImportValidationFunc > InValidation)
Definition SavePackage.h:211
Definition PackageWriter.h:41
virtual FCapabilities GetCapabilities() const
Definition PackageWriter.h:69
Definition SavePackage.h:135
virtual ~ISavePackageValidator()
Definition SavePackage.h:137
virtual ESavePackageResult ValidateImports(const UPackage *Package, const TSet< TObjectPtr< UObject > > &Imports)=0
Definition Array.h:670
Definition AndroidPlatformMisc.h:14
Definition UnrealString.h.inl:34
Definition UniquePtr.h:107
UE_FORCEINLINE_HINT T * Get() const
Definition UniquePtr.h:324
Definition StructuredLog.h:182
Definition Object.h:95
Definition Package.h:216
Type
Definition LogVerbosity.h:17
Definition FieldSystemNoiseAlgo.cpp:6
Definition PackageHarvester.cpp:207
uint32 GetSavePackagePortFlags()
Definition PackageHarvester.cpp:231
Definition AdvancedWidgetsModule.cpp:13
@ false
Definition radaudio_common.h:23
Definition ArchiveCookData.h:13
const ITargetPlatform & TargetPlatform
Definition ArchiveCookData.h:14
Definition ArchiveSavePackageData.h:11
Definition DateTime.h:76
Definition SavePackage.h:161
const TMap< UObject *, FObjectSaveOverride > & SaveOverrides
Definition SavePackage.h:179
EFlags
Definition SavePackage.h:163
const UPackage * Package
Definition SavePackage.h:177
const TSet< UObject * > & Exports
Definition SavePackage.h:178
const EFlags Flags
Definition SavePackage.h:180
FExportsValidationContext(const UPackage *InPackage, const TSet< UObject * > &InExports, const TMap< UObject *, FObjectSaveOverride > &InSaveOverrides, EFlags InFlags, FOutputDevice *InOutputDevice)
Definition SavePackage.h:168
FOutputDevice * OutputDevice
Definition SavePackage.h:181
Definition SavePackage.h:147
const TSet< TObjectPtr< UObject > > & Imports
Definition SavePackage.h:155
FOutputDevice * OutputDevice
Definition SavePackage.h:156
const UPackage * Package
Definition SavePackage.h:154
FImportsValidationContext(const UPackage *InPackage, const TSet< TObjectPtr< UObject > > &InImports, FOutputDevice *InOutputDevice)
Definition SavePackage.h:148
Definition ObjectSaveContext.h:70
Definition SavePackage.h:52
class UPackage * Package
Definition SavePackage.h:53
class UObject * Asset
Definition SavePackage.h:54
FString Filename
Definition SavePackage.h:55
Definition SavePackage.h:63
bool IsCooking() const
Definition SavePackage.h:67
FSavePackageContext * SavePackageContext
Definition SavePackage.h:92
const ITargetPlatform * GetTargetPlatform() const
Definition SavePackage.h:68
FOutputDevice * Error
Definition SavePackage.h:90
FDateTime FinalTimeStamp
Definition SavePackage.h:88
bool bWarnOfLongFilename
Definition SavePackage.h:81
FSavePackageArgs()=default
FSavePackageArgs & operator=(const FSavePackageArgs &)=default
FSavePackageArgs(FSavePackageArgs &&)=default
bool bForceByteSwapping
Definition SavePackage.h:79
FSavePackageArgs & operator=(FSavePackageArgs &&)=default
TMap< UObject *, FObjectSaveOverride > * InOutSaveOverrides
Definition SavePackage.h:98
bool bSlowTask
Definition SavePackage.h:83
FArchiveCookData * ArchiveCookData
Definition SavePackage.h:65
EObjectFlags TopLevelFlags
Definition SavePackage.h:75
FSavePackageArgs(const FSavePackageArgs &)=default
uint32 SaveFlags
Definition SavePackage.h:77
Definition PackageWriter.h:46
Definition ObjectPtr.h:488