EM_Task/CoreUObject/Public/Serialization/ArchiveUObjectFromStructuredArchive.h

81 lines
2.4 KiB
C
Raw Normal View History

2026-02-13 16:18:33 +08:00
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Serialization/StructuredArchive.h"
#include "Serialization/ArchiveUObject.h"
#include "Serialization/FileRegions.h"
#include "UObject/ObjectResource.h"
#include "UObject/SoftObjectPath.h"
#include "UObject/SoftObjectPtr.h"
#include "UObject/LazyObjectPtr.h"
#include "UObject/WeakObjectPtr.h"
#if WITH_TEXT_ARCHIVE_SUPPORT
class COREUOBJECT_API FArchiveUObjectFromStructuredArchiveImpl: public FArchiveFromStructuredArchiveImpl
{
using Super = FArchiveFromStructuredArchiveImpl;
public:
FArchiveUObjectFromStructuredArchiveImpl(FStructuredArchive::FSlot Slot);
using FArchive::operator<<; // For visibility of the overloads we don't override
//~ Begin FArchive Interface
virtual FArchive& operator<<(FLazyObjectPtr& Value) override;
virtual FArchive& operator<<(FSoftObjectPtr& Value) override;
virtual FArchive& operator<<(FSoftObjectPath& Value) override;
virtual FArchive& operator<<(FWeakObjectPtr& Value) override;
//~ End FArchive Interface
virtual void PushFileRegionType(EFileRegionType Type) override;
virtual void PopFileRegionType() override;
private:
int64 FileRegionStart = 0;
EFileRegionType CurrentFileRegionType = EFileRegionType::None;
TArray<FLazyObjectPtr> LazyObjectPtrs;
TArray<FWeakObjectPtr> WeakObjectPtrs;
TArray<FSoftObjectPtr> SoftObjectPtrs;
TArray<FSoftObjectPath> SoftObjectPaths;
TMap<FLazyObjectPtr, int32> LazyObjectPtrToIndex;
TMap<FWeakObjectPtr, int32> WeakObjectPtrToIndex;
TMap<FSoftObjectPtr, int32> SoftObjectPtrToIndex;
TMap<FSoftObjectPath, int32> SoftObjectPathToIndex;
virtual bool Finalize(FStructuredArchive::FRecord Record) override;
};
class FArchiveUObjectFromStructuredArchive
{
public:
explicit FArchiveUObjectFromStructuredArchive(FStructuredArchive::FSlot InSlot)
: Impl(InSlot)
{
}
FArchive& GetArchive() { return Impl; }
const FArchive& GetArchive() const { return Impl; }
void Close() { Impl.Close(); }
private:
FArchiveUObjectFromStructuredArchiveImpl Impl;
};
#else
class COREUOBJECT_API FArchiveUObjectFromStructuredArchive: public FArchiveFromStructuredArchive
{
public:
FArchiveUObjectFromStructuredArchive(FStructuredArchive::FSlot InSlot)
: FArchiveFromStructuredArchive(InSlot)
{
}
};
#endif