UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
StructuredArchiveAdapters.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
7#include "Templates/Models.h"
10#include "Templates/UniqueObj.h"
11
13{
15
16 static constexpr inline uint32 ImplSize = 400;
17 static constexpr inline uint32 ImplAlignment = 8;
18
19 struct FImpl;
20
21public:
24
26
27private:
28 // Implmented as a pimpl in order to reduce dependencies, but an inline one to avoid heap allocations
29 alignas(ImplAlignment) uint8 ImplStorage[ImplSize];
30};
31
32#if WITH_TEXT_ARCHIVE_SUPPORT
33
34class FArchiveFromStructuredArchiveImpl : public FArchiveProxy
35{
36 UE_NONCOPYABLE(FArchiveFromStructuredArchiveImpl)
37
38 struct FImpl;
39
40public:
41 CORE_API explicit FArchiveFromStructuredArchiveImpl(FStructuredArchiveSlot Slot);
43
44 CORE_API virtual void Flush() override;
45 CORE_API virtual bool Close() override;
46
47 CORE_API virtual int64 Tell() override;
48 CORE_API virtual int64 TotalSize() override;
49 CORE_API virtual void Seek(int64 InPos) override;
50 CORE_API virtual bool AtEnd() override;
51
52 using FArchive::operator<<; // For visibility of the overloads we don't override
53
54 //~ Begin FArchive Interface
55 CORE_API virtual FArchive& operator<<(class FName& Value) override;
56 CORE_API virtual FArchive& operator<<(class UObject*& Value) override;
57 CORE_API virtual FArchive& operator<<(class FText& Value) override;
58 //~ End FArchive Interface
59
60 CORE_API virtual void Serialize(void* V, int64 Length) override;
61
62 CORE_API virtual FArchive* GetCacheableArchive() override;
63
64 CORE_API bool ContainsData() const;
65
66protected:
67 CORE_API virtual bool Finalize(FStructuredArchiveRecord Record);
68 CORE_API void OpenArchive();
69
70private:
71 void Commit();
72
73 // Implmented as a pimpl in order to reduce dependencies
75};
76
78{
79public:
81 : Impl(InSlot)
82 {
83 }
84
85 FArchive& GetArchive() { return Impl; }
86 const FArchive& GetArchive() const { return Impl; }
87
88 void Close() { Impl.Close(); }
89
90private:
91 FArchiveFromStructuredArchiveImpl Impl;
92};
93
94#else
95
97{
98public:
100 : Ar(InSlot.GetUnderlyingArchive())
101 {
102 }
103
104 FArchive& GetArchive() { return Ar; }
105 const FArchive& GetArchive() const { return Ar; }
106
107 void Close() {}
108
109private:
110 FArchive& Ar;
111};
112
113#endif
114
123template <typename T,
124 std::enable_if_t<!TModels_V<CInsertable<FArchive&>, T> && TModels_V<CInsertable<FStructuredArchiveSlot>, T>, int> = 0>
126{
128 ArAdapt.GetSlot() << Obj;
129 return Ar;
130}
131
138template <typename T,
139 std::enable_if_t<TModels_V<CInsertable<FArchive&>, T> && !TModels_V<CInsertable<FStructuredArchiveSlot>, T>, int> = 0>
141{
142#if WITH_TEXT_ARCHIVE_SUPPORT
143 FArchiveFromStructuredArchive Adapter(Slot);
144 FArchive& Ar = Adapter.GetArchive();
145#else
146 FArchive& Ar = Slot.GetUnderlyingArchive();
147#endif
148 Ar << Obj;
149#if WITH_TEXT_ARCHIVE_SUPPORT
150 Adapter.Close();
151#endif
152}
153
#define UE_NONCOPYABLE(TypeName)
Definition CoreMiscDefines.h:457
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
FArchive & operator<<(FArchive &Ar, T &Obj)
Definition StructuredArchiveAdapters.h:125
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition StructuredArchiveAdapters.h:97
FArchive & GetArchive()
Definition StructuredArchiveAdapters.h:104
FArchiveFromStructuredArchive(FStructuredArchiveSlot InSlot)
Definition StructuredArchiveAdapters.h:99
void Close()
Definition StructuredArchiveAdapters.h:107
const FArchive & GetArchive() const
Definition StructuredArchiveAdapters.h:105
Definition ArchiveProxy.h:19
virtual bool AtEnd() override
Definition ArchiveProxy.h:149
virtual void Flush() override
Definition ArchiveProxy.h:184
virtual bool Close() override
Definition ArchiveProxy.h:189
virtual int64 TotalSize() override
Definition ArchiveProxy.h:144
virtual FArchive * GetCacheableArchive() override
Definition ArchiveProxy.h:314
virtual int64 Tell() override
Definition ArchiveProxy.h:139
Definition Archive.h:1208
friend FArchive & operator<<(FArchive &Ar, ANSICHAR &Value)
Definition Archive.h:1387
Definition NameTypes.h:617
Definition StructuredArchiveAdapters.h:13
CORE_API FStructuredArchiveSlot GetSlot()
Definition StructuredArchiveFromArchive.cpp:37
CORE_API ~FStructuredArchiveFromArchive()
Definition StructuredArchiveFromArchive.cpp:32
Definition StructuredArchiveSlots.h:144
Definition StructuredArchiveSlots.h:52
Definition Text.h:385
Definition UniqueObj.h:13
CORE_API FArchive & GetUnderlyingArchive() const
Definition StructuredArchiveSlots.cpp:7
Definition Object.h:95
Definition ExpressionParserTypes.h:21
Definition StructuredArchiveFromArchive.cpp:11