7#include "Containers/Array.h"
38 if (InnerArchive && bRegisteredCommitHandler)
41 AutoRTFM::PopOnCommitHandler(
this);
42 AutoRTFM::PushOnCommitHandler(
this, [Archive = InnerArchive.
Release(), WriteBuffer =
MoveTemp(DeferredWrites),
bFlush = bFlushRequested]()
mutable
44 DoDeferredWrites(*Archive, WriteBuffer,
bFlush);
56 check(!AutoRTFM::IsTransactional());
79 if (MaybeRegisterCommitHandler())
82 bFlushRequested =
true;
87 InnerArchive->
Flush();
95 if (MaybeRegisterCommitHandler())
109 bool MaybeRegisterCommitHandler()
112 if (bRegisteredCommitHandler)
115 check(AutoRTFM::IsTransactional() || AutoRTFM::IsCommittingOrAborting());
118 else if (AutoRTFM::IsTransactional())
121 RegisterCommitHandler();
128 void RegisterCommitHandler()
130 check(!bRegisteredCommitHandler);
131 bRegisteredCommitHandler =
true;
133 AutoRTFM::PushOnCommitHandler(
this, [
this]
135 DoDeferredWrites(*InnerArchive, DeferredWrites, bFlushRequested);
136 bRegisteredCommitHandler =
false;
140 static void DoDeferredWrites(
FArchive& Archive, DeferredWriteBuffer& WriteBuffer,
bool& bFlushRequested)
142 Archive.
Serialize(WriteBuffer.GetData(), WriteBuffer.NumBytes());
148 bFlushRequested =
false;
153 DeferredWriteBuffer DeferredWrites;
154 bool bRegisteredCommitHandler =
false;
155 bool bFlushRequested =
false;
#define check(expr)
Definition AssertionMacros.h:314
#define unimplemented()
Definition AssertionMacros.h:321
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition Archive.h:1208
virtual CORE_API void SetIsSaving(bool bInIsSaving)
Definition Archive.cpp:1523
virtual void Serialize(void *V, int64 Length)
Definition Archive.h:1689
UE_FORCEINLINE_HINT bool IsSaving() const
Definition Archive.h:248
virtual CORE_API FString GetArchiveName() const
Definition Archive.cpp:335
virtual void Flush()
Definition Archive.h:1842
Definition TransactionallySafeArchiveWriter.h:25
FTransactionallySafeArchiveWriter(TUniquePtr< FArchive > Ar)
Definition TransactionallySafeArchiveWriter.h:29
virtual void Seek(int64 InPos) final
Definition TransactionallySafeArchiveWriter.h:65
virtual void Serialize(void *Data, int64 Num) override
Definition TransactionallySafeArchiveWriter.h:91
~FTransactionallySafeArchiveWriter()
Definition TransactionallySafeArchiveWriter.h:36
virtual void Flush() override
Definition TransactionallySafeArchiveWriter.h:77
virtual FString GetArchiveName() const override
Definition TransactionallySafeArchiveWriter.h:60
virtual int64 Tell() final
Definition TransactionallySafeArchiveWriter.h:70
TUniquePtr< FArchive > Release()
Definition TransactionallySafeArchiveWriter.h:54
UE_REWRITE bool IsEmpty() const
Definition Array.h:1133
void Append(const TArray< OtherElementType, OtherAllocatorType > &Source)
Definition Array.h:2412
Definition UniquePtr.h:107
T * Release()
Definition UniquePtr.h:334