UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Serializable.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "CoreMinimal.h"
5
6namespace Chaos
7{
8template <typename T>
10{
11public:
12 TSerializablePtr() : Ptr(nullptr) {}
13 template <typename R>
14 explicit TSerializablePtr(const TUniquePtr<R>& Unique) : Ptr(Unique.Get()) {}
16
17 //template <typename R>
18 //TSerializablePtr(const TSerializablePtr<R>& Other) : Ptr(Other.Get()) {}
19
20 template<ESPMode TESPMode>
22
23 explicit TSerializablePtr(const TRefCountPtr<T>& RefCount) : Ptr(RefCount.GetReference()) {}
24
25 const T* operator->() const { return Ptr; }
26 const T* Get() const { return Ptr; }
27 const T* GetReference() const { return Ptr; }
28 const T& operator*() const { return *Ptr; }
29 void Reset() { Ptr = nullptr; }
30 bool operator!() const { return Ptr == nullptr; }
31 bool operator==(const TSerializablePtr<T>& Serializable) const { return Ptr == Serializable.Ptr; }
32 bool operator!=(const TSerializablePtr<T>& Serializable) const { return Ptr != Serializable.Ptr; }
33 operator bool() const { return Ptr != nullptr; }
34 bool IsValid() const { return Ptr != nullptr; }
35
36 template <typename R>
37 operator TSerializablePtr<R>() const
38 {
39 const R* RCast = Ptr;
42 return Ret;
43 }
44
45 //NOTE: this is needed for serialization. This should NOT be used directly
47 {
48 Ptr = InPtr;
49 }
50
51private:
52 TSerializablePtr(T* InPtr) : Ptr(InPtr) {}
53 const T* Ptr;
54};
55
56template <typename T>
57inline uint32 GetTypeHash(const TSerializablePtr<T>& Ptr) { return ::GetTypeHash(Ptr.Get()); }
58
59template <typename T>
64
65template <typename Ret, typename T>
70
71template <typename T>
76
77template <typename T>
79
80template <typename Ret, typename T>
82
83template<typename T, ESPMode TESPMode>
88
89template<typename T>
91{
92 return TSerializablePtr<T>(RefCount);
93}
94
95//This is only available for types that are guaranteed to be serializable. This is done by having a factory that returns unique pointers for example
96template <typename T>
98{
99 return reinterpret_cast<TSerializablePtr<T>&>(Ptr);
100}
101
102
103template <typename T>
108
109class FChaosArchive;
110
111}
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
const bool
Definition NetworkReplayStreaming.h:178
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Serializable.h:10
void Reset()
Definition Serializable.h:29
bool IsValid() const
Definition Serializable.h:34
bool operator==(const TSerializablePtr< T > &Serializable) const
Definition Serializable.h:31
bool operator!() const
Definition Serializable.h:30
const T * Get() const
Definition Serializable.h:26
const T * operator->() const
Definition Serializable.h:25
const T & operator*() const
Definition Serializable.h:28
bool operator!=(const TSerializablePtr< T > &Serializable) const
Definition Serializable.h:32
const T * GetReference() const
Definition Serializable.h:27
TSerializablePtr(const TSharedPtr< T, TESPMode > &Shared)
Definition Serializable.h:21
TSerializablePtr(const TUniquePtr< R > &Unique)
Definition Serializable.h:14
TSerializablePtr(TUniquePtr< T > &&Unique)=delete
void SetFromRawLowLevel(const T *InPtr)
Definition Serializable.h:46
TSerializablePtr(const TRefCountPtr< T > &RefCount)
Definition Serializable.h:23
TSerializablePtr()
Definition Serializable.h:12
Definition Array.h:670
Definition EnableIf.h:20
Definition RefCounting.h:454
Definition SharedPointer.h:692
Definition UniquePtr.h:107
Definition SkeletalMeshComponent.h:307
TEnableIf< T::AlwaysSerializable, TArray< TSerializablePtr< T > > >::Type & AsAlwaysSerializableArray(TArray< T * > &Ptrs)
Definition Serializable.h:104
TSerializablePtr< T > MakeSerializable(const TUniquePtr< T > &Unique)
Definition Serializable.h:60
FORCEINLINE uint32 GetTypeHash(const FParticleID &Unique)
Definition GeometryParticles.h:99
TEnableIf< T::AlwaysSerializable, TSerializablePtr< T > >::Type & AsAlwaysSerializable(T *&Ptr)
Definition Serializable.h:97