15#if CHAOS_MEMORY_TRACKING
86 template <
typename T, ESPMode Mode>
89 T* RawPtr =
const_cast<T*
>(Obj.
Get());
90 if (FSharedPtrHolder*
BaseHolder = ObjToSharedPtrHolder.FindRef(RawPtr))
99 ObjToSharedPtrHolder.Add((
void*)RawPtr,
NewHolder);
104 template <
typename T>
107 T* RawPtr =
const_cast<T*
>(Obj.
Get());
108 if (FRefCountPtrHolder*
BaseHolder = ObjToRefCountPtrHolder.FindRef(RawPtr))
117 ObjToRefCountPtrHolder.Add((
void*)RawPtr,
NewHolder);
132 class FSharedPtrHolder
135 FSharedPtrHolder() =
default;
136 virtual ~FSharedPtrHolder() {}
139 template <
typename T, ESPMode Mode>
140 class TSharedPtrHolder :
public FSharedPtrHolder
143 TSharedPtrHolder(T* Obj) : SP(Obj) {}
147 class FRefCountPtrHolder
150 FRefCountPtrHolder() =
default;
151 virtual ~FRefCountPtrHolder() {}
154 template <
typename T>
155 class TRefCountPtrHolder :
public FRefCountPtrHolder
158 TRefCountPtrHolder(T* Obj) : RCP(Obj) {}
175 template <
typename T>
178 bool bExists = Obj.
Get() !=
nullptr;
203 if (!Context->TagToObject.IsValidIndex(
Tag))
209 if (Context->TagToObject[
Tag])
215 StaticSerialize(Obj);
216 Context->TagToObject[
Tag] = (
void*)Obj.
Get();
217 Context->ObjToTag.Add((
void*)Obj.
Get(),
Tag);
223 check(Context->PendingAdds.Contains(
ObjRaw) ==
false);
224 if (Context->ObjToTag.Contains(
ObjRaw))
230 Context->PendingAdds.Add(
ObjRaw);
236 StaticSerialize(Obj);
238 Context->PendingAdds.Remove(
ObjRaw);
243 template <
typename T>
249 SerializeLegacy(Obj);
264 template <
typename T>
271 Obj = Context->ToRefCountPointerHelper<T>(
Copy);
275 template <
typename T>
282 Obj = Context->ToRefCountPointerHelper<T>(
Copy);
286 template <
typename T, ESPMode Mode>
293 Obj = Context->ToSharedPointerHelper<T,Mode>(
Copy);
297 template <
typename T, ESPMode Mode>
304 Obj = Context->ToSharedPointerHelper<T, Mode>(
Copy);
308#if CHAOS_MEMORY_TRACKING
311 if (Context) { Context->BeginSerialize(
Tell()); }
313 if (Context) { Context->EndSerialize(
Tell()); }
330 template <
typename T>
337 template <
typename T>
341 FChaosArchive& Ar = *
this;
342 if (
auto CreatedObj = T::SerializationFactory(Ar, RawPtr))
344 check(Ar.IsLoading());
350 check(!Ar.IsLoading())
353 RawPtr->Serialize(Ar);
358#if CHAOS_MEMORY_TRACKING
359 friend class FChaosArchiveScopedMemory;
367#if CHAOS_MEMORY_TRACKING
369 {
if (Ar.Context) { Ar.Context->PushSection(SectionName, Ar.Tell(),
bAbsorbChildren); } }
371 {
if (Ar.Context) { Ar.Context->PopSection(Ar.Tell()); } }
379template <
typename T,
typename TAllocator>
386 Array.Reserve(ArrayNum);
387 Array.SetNum(ArrayNum);
389 for (
int32 Idx = 0; Idx < ArrayNum; ++Idx)
445template <
typename T, ESPMode Mode>
466template <
typename T,
typename TAllocator>
473template <
typename T,
typename TAllocator>
478 Array.Reserve(ArrayNum);
479 Array.SetNum(ArrayNum);
481 for (
int32 Idx = 0; Idx < ArrayNum; ++Idx)
489template <
typename T,
typename TAllocator,
typename TAllocator2>
494 Array.Reserve(ArrayNum);
495 Array.SetNum(ArrayNum);
497 for (
int32 Idx = 0; Idx < ArrayNum; ++Idx)
505template <
typename T,
typename TAllocator>
510 Array.Reserve(ArrayNum);
511 Array.SetNum(ArrayNum);
513 for (
int32 Idx = 0; Idx < ArrayNum; ++Idx)
521template <
typename T,
typename TAllocator,
typename TAllocator2>
526 Array.Reserve(ArrayNum);
527 Array.SetNum(ArrayNum);
529 for (
int32 Idx = 0; Idx < ArrayNum; ++Idx)
537template <
typename T,
typename TAllocator, ESPMode Mode>
542 Array.Reserve(ArrayNum);
543 Array.SetNum(ArrayNum);
545 for (
int32 Idx = 0; Idx < ArrayNum; ++Idx)
553template <
typename T,
typename TAllocator,
typename TAllocator2, ESPMode Mode>
558 Array.Reserve(ArrayNum);
559 Array.SetNum(ArrayNum);
561 for (
int32 Idx = 0; Idx < ArrayNum; ++Idx)
569template <
typename T,
typename TAllocator>
574 Array.SetNum(ArrayNum);
576 for (
int32 Idx = 0; Idx < ArrayNum; ++Idx)
584template <
typename T,
typename TAllocator,
typename TAllocator2>
589 Array.Reserve(ArrayNum);
590 Array.SetNum(ArrayNum);
592 for (
int32 Idx = 0; Idx < ArrayNum; ++Idx)
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
@ LARGE_WORLD_COORDINATES
UE_FORCEINLINE_HINT TUniquePtr< T > MakeUnique(TArgs &&... Args)
Definition UniquePtr.h:918
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")
Definition ChaosArchive.h:74
TArray< void * > TagToObject
Definition ChaosArchive.h:76
TMap< void *, int32 > ObjToTag
Definition ChaosArchive.h:77
CHAOS_API ~FChaosArchiveContext()
Definition ChaosArchive.cpp:13
int32 TagCount
Definition ChaosArchive.h:79
TRefCountPtr< T > & ToRefCountPointerHelper(TSerializablePtr< T > &Obj)
Definition ChaosArchive.h:105
int32 GetObjectTag(const void *ObjectPtr) const
Definition ChaosArchive.h:122
TSet< void * > PendingAdds
Definition ChaosArchive.h:78
CHAOS_API FChaosArchiveContext()
Definition ChaosArchive.cpp:9
TSharedPtr< T, Mode > & ToSharedPointerHelper(TSerializablePtr< T > &Obj)
Definition ChaosArchive.h:87
Definition ChaosArchive.h:364
FChaosArchiveScopedMemory(FChaosArchive &ArIn, const FName &SectionName, const bool bAbsorbChildren=true)
Definition ChaosArchive.h:366
Definition ChaosArchive.h:167
void SerializePtr(TSerializablePtr< T > &Obj)
Definition ChaosArchive.h:176
void SerializePtr(TRefCountPtr< T > &Obj)
Definition ChaosArchive.h:265
FChaosArchive(FArchive &ArIn)
Definition ChaosArchive.h:169
void SerializePtr(TSharedPtr< T, Mode > &Obj)
Definition ChaosArchive.h:287
void SerializePtr(TUniquePtr< T > &Obj)
Definition ChaosArchive.h:244
void SerializeConstPtr(TSharedPtr< const T, Mode > &Obj)
Definition ChaosArchive.h:298
void SerializeConstPtr(TRefCountPtr< const T > &Obj)
Definition ChaosArchive.h:276
void SetContext(TUniquePtr< FChaosArchiveContext > &&InContext)
Definition ChaosArchive.h:317
TUniquePtr< FChaosArchiveContext > StealContext()
Definition ChaosArchive.h:322
Definition Serializable.h:10
void Reset()
Definition Serializable.h:29
const T * Get() const
Definition Serializable.h:26
void SetFromRawLowLevel(const T *InPtr)
Definition Serializable.h:46
Definition ArchiveProxy.h:19
virtual void CountBytes(SIZE_T InNum, SIZE_T InMax) override
Definition ArchiveProxy.h:122
FArchive & InnerArchive
Definition ArchiveProxy.h:327
virtual void Serialize(void *V, int64 Length) override
Definition ArchiveProxy.h:97
virtual int64 Tell() override
Definition ArchiveProxy.h:139
Definition Archive.h:1208
CORE_API void SetCriticalError()
Definition Archive.cpp:319
virtual CORE_API void UsingCustomVersion(const struct FGuid &Guid)
Definition Archive.cpp:590
UE_FORCEINLINE_HINT bool IsLoading() const
Definition Archive.h:236
CORE_API int32 CustomVer(const struct FGuid &Key) const
Definition Archive.cpp:602
UE_FORCEINLINE_HINT bool IsSaving() const
Definition Archive.h:248
UE_FORCEINLINE_HINT FPackageFileVersion UEVer() const
Definition Archive.h:204
UE_FORCEINLINE_HINT bool IsCountingMemory() const
Definition Archive.h:468
Definition NameTypes.h:617
Definition UnrealString.h.inl:34
Definition RefCounting.h:454
Definition SharedPointer.h:692
Definition UniquePtr.h:107
void Reset(T *InPtr=nullptr)
Definition UniquePtr.h:346
Definition SkeletalMeshComponent.h:307
constexpr TEnableIf< TModels_V< CSerializablePtr, T >, bool >::Type IsSerializablePtr()
Definition ChaosArchive.h:426
TEnableIf< T::AlwaysSerializable, TArray< TSerializablePtr< T > > >::Type & AsAlwaysSerializableArray(TArray< T * > &Ptrs)
Definition Serializable.h:104
FChaosArchive & operator<<(FChaosArchive &Ar, FRigidParticleControlFlags &Flags)
Definition RigidParticleControlFlags.cpp:15
FRealDouble FReal
Definition Real.h:22
TSerializablePtr< T > MakeSerializable(const TUniquePtr< T > &Unique)
Definition Serializable.h:60
float FRealSingle
Definition Real.h:14
TEnableIf< T::AlwaysSerializable, TSerializablePtr< T > >::Type & AsAlwaysSerializable(T *&Ptr)
Definition Serializable.h:97
Definition ChaosArchive.h:420
auto Requires(T *InType, FChaosArchive &InAr) -> decltype(T::SerializationFactory(InAr,(T *) nullptr))
CORE_API static const FGuid GUID
Definition DestructionObjectVersion.h:52
@ ChaosArchiveAdded
Definition DestructionObjectVersion.h:28