EM_Task/CoreUObject/Public/Serialization/ObjectWriter.h
Boshuang Zhao 5144a49c9b add
2026-02-13 16:18:33 +08:00

58 lines
1.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "UObject/Object.h"
#include "Serialization/MemoryWriter.h"
#include "Internationalization/TextPackageNamespaceUtil.h"
#include "UObject/PropertyPortFlags.h"
struct FLazyObjectPtr;
struct FSoftObjectPtr;
struct FSoftObjectPath;
struct FWeakObjectPtr;
/**
* UObject Memory Writer Archive.
*/
class FObjectWriter: public FMemoryWriter
{
public:
FObjectWriter(UObject* Obj, TArray<uint8>& InBytes, bool bIgnoreClassRef = false, bool bIgnoreArchetypeRef = false, bool bDoDelta = true, uint32 AdditionalPortFlags = 0)
: FMemoryWriter(InBytes)
{
ArIgnoreClassRef = bIgnoreClassRef;
ArIgnoreArchetypeRef = bIgnoreArchetypeRef;
ArNoDelta = !bDoDelta;
ArPortFlags |= AdditionalPortFlags;
#if USE_STABLE_LOCALIZATION_KEYS
if (GIsEditor && !(ArPortFlags & (PPF_DuplicateVerbatim | PPF_DuplicateForPIE)))
{
SetLocalizationNamespace(TextNamespaceUtil::EnsurePackageNamespace(Obj));
}
#endif // USE_STABLE_LOCALIZATION_KEYS
Obj->Serialize(*this);
}
//~ Begin FArchive Interface
COREUOBJECT_API virtual FArchive& operator<<(FName& N) override;
COREUOBJECT_API virtual FArchive& operator<<(UObject*& Res) override;
COREUOBJECT_API virtual FArchive& operator<<(FLazyObjectPtr& Value) override;
COREUOBJECT_API virtual FArchive& operator<<(FSoftObjectPtr& Value) override;
COREUOBJECT_API virtual FArchive& operator<<(FSoftObjectPath& Value) override;
COREUOBJECT_API virtual FArchive& operator<<(FWeakObjectPtr& Value) override;
COREUOBJECT_API virtual FString GetArchiveName() const override;
//~ End FArchive Interface
FObjectWriter(TArray<uint8>& InBytes)
: FMemoryWriter(InBytes)
{
ArIgnoreClassRef = false;
ArIgnoreArchetypeRef = false;
}
};