UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
TypedElementMetaData.inl
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
4{
5 namespace Private
6 {
7 template<typename TContainer, typename T>
8 void AddDataToContainer(TContainer& Container, FName Name, T Value)
9 {
10 using BaseType = std::remove_const_t<std::remove_reference_t<T>>;
11
12 if constexpr (std::is_arithmetic_v<BaseType>)
13 {
14 if constexpr (std::is_same_v<bool, BaseType>)
15 {
16 Container.Add(Name, MetaDataType(TInPlaceType<bool>(), static_cast<bool>(Value)));
17 }
18 else if constexpr (std::is_integral_v<BaseType>)
19 {
20 if constexpr (std::is_signed_v<BaseType>)
21 {
22 Container.Add(Name, MetaDataType(TInPlaceType<int64>(), static_cast<int64>(Value)));
23 }
24 else
25 {
26 Container.Add(Name, MetaDataType(TInPlaceType<uint64>(), static_cast<uint64>(Value)));
27 }
28 }
29 else if constexpr (std::is_floating_point_v<BaseType>)
30 {
31 Container.Add(Name, MetaDataType(TInPlaceType<double>(), static_cast<double>(Value)));
32 }
33 }
34 else if constexpr (std::is_convertible_v<BaseType, FString>)
35 {
37 }
38 else
39 {
40 // !std::is_same_v<T, T> is used to force evaluation of the type so it's not always called, which would happen if "false" is used instead.
41 static_assert(!std::is_same_v<T, T>, "Provided meta data type can't be stored in the Typed Element Data Storage.");
42 }
43 }
44 }
45
47
48 template<typename T>
50 {
51 if (!ImmutableData.Contains(Name))
52 {
54 return true;
55 }
56 else
57 {
58 return false;
59 }
60 }
61
62 template<typename T>
67
68
69
70 //
71 // FMetaDataEntryView
72 //
73
74 template<typename T>
78
79 template<typename T>
81 {
82 return DataView.IsType<T>();
83 }
84
85 template<typename T>
87 {
88 if constexpr (std::is_same_v<T, const FString&>)
89 {
90 return DataView.TryGet<const FString*>();
91 }
92 return DataView.TryGet<T>();
93 }
94
95
96
97 //
98 // FMetaDataView
99 //
100
101 template<typename Column>
103 {
104 return FindForColumn(Column::StaticStruct(), AttributeName);
105 }
106
107
108
109 //
110 // FComboMetaDataView
111 //
112
113 template<typename... ViewTypes>
118
119 template<typename... ViewTypes>
124
125 template<typename... ViewTypes>
126 template<typename NextViewType>
134
135 template<typename... ViewTypes>
137 {
138 return Views.ApplyAfter([&AttributeName](const ViewTypes&... InViews)
139 {
140 FMetaDataEntryView Result;
141 auto Run = [](FName AttributeName, FMetaDataEntryView& Result, const auto& View)
142 {
143 Result = View.FindGeneric(AttributeName);
144 return Result.IsSet();
145 };
146 (Run(AttributeName, Result, InViews) || ...);
147 return Result;
148 });
149 }
150
151 template<typename... ViewTypes>
153 {
154 return Views.ApplyAfter([&Column, &AttributeName](const ViewTypes&... InViews)
155 {
156 FMetaDataEntryView Result;
157 auto Run = [](TWeakObjectPtr<const UScriptStruct> Column, FName AttributeName, FMetaDataEntryView& Result, const auto& View)
158 {
159 Result = View.FindForColumn(Column, AttributeName);
160 return Result.IsSet();
161 };
162 (Run(Column, AttributeName, Result, InViews) || ...);
163 return Result;
164 });
165 }
166} // namespace UE::Editor::DataStorage
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
Definition NameTypes.h:617
U * TryGet() UE_LIFETIMEBOUND
Definition TVariant.h:174
bool IsType() const
Definition TVariant.h:138
EFlags
Definition TypedElementMetaData.h:89
Definition TypedElementMetaData.h:194
FComboMetaDataView< ViewTypes..., NextViewType > Next(NextViewType &&NextView)
Definition TypedElementMetaData.inl:127
FMetaDataEntryView FindGeneric(FName AttributeName) const override
Definition TypedElementMetaData.inl:136
FComboMetaDataView(const ViewTypes &... InViews)
Definition TypedElementMetaData.inl:114
FMetaDataEntryView FindForColumn(TWeakObjectPtr< const UScriptStruct > Column, FName AttributeName) const
Definition TypedElementMetaData.inl:152
TMap< FName, MetaDataType > MutableData
Definition TypedElementMetaData.h:76
TMap< FName, MetaDataType > ImmutableData
Definition TypedElementMetaData.h:74
bool AddImmutableData(FName Name, T &&Value)
Definition TypedElementMetaData.inl:49
void AddOrSetMutableData(FName Name, T &&Value)
Definition TypedElementMetaData.inl:63
Definition TypedElementMetaData.h:30
TYPEDELEMENTFRAMEWORK_API FMetaDataEntryView()
Definition TypedElementMetaData.cpp:96
bool IsType() const
Definition TypedElementMetaData.inl:80
const T * TryGetExact() const
Definition TypedElementMetaData.inl:86
virtual TYPEDELEMENTFRAMEWORK_API FMetaDataEntryView FindForColumn(TWeakObjectPtr< const UScriptStruct > Column, FName AttributeName) const
Definition TypedElementMetaData.cpp:136
Definition OverriddenPropertySet.cpp:45
void AddDataToContainer(TContainer &Container, FName Name, T Value)
Definition TypedElementMetaData.inl:8
Definition CommonTypes.cpp:10
TVariant< bool, uint64, int64, double, FString > MetaDataType
Definition TypedElementMetaData.h:23
Definition TVariant.h:13
Definition WeakObjectPtrTemplates.h:25