UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DataflowConnection.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
8#include "HAL/PlatformMath.h"
10#include "Misc/Guid.h"
13
14#include "DataflowConnection.generated.h"
15
16class FProperty;
17struct FDataflowNode;
18struct FDataflowInput;
19struct FDataflowOutput;
20
21namespace UE::Dataflow
22{
23
25 template<class T> inline DATAFLOWCORE_API T DeepCopy(const T&);
26
27 struct FPin
28 {
29 enum class EDirection : uint8 {
30 NONE = 0,
31 INPUT,
32 OUTPUT
33 };
37 bool bHidden = false;
38
39 bool operator==(const FPin& Other) const
40 {
41 return Direction == Other.Direction && Type == Other.Type && Name == Other.Name && bHidden == Other.bHidden;
42 }
43
44 DATAFLOWCORE_API static const FPin InvalidPin;
45 };
46
48 {
50 : Type(InType)
51 , Name(InName)
52 , Owner(InOwner)
54 , Offset(InOffset)
55 , Guid(InGuid)
56 {}
57
60 FDataflowNode* Owner = nullptr;
61 const FProperty* Property = nullptr;
64 };
65
66
67 // Do not hold onto FConnectionReference when Reference is dynamically allocated (e.g., when using array inputs).
68 // Use FConnectionKey instead.
81
82 template<typename T>
89
91 {
92 public:
93 FConnectionKey() = default;
94
95 bool operator==(const FConnectionKey& Other) const
96 {
97 return Offset == Other.Offset && ContainerIndex == Other.ContainerIndex && ContainerElementOffset == Other.ContainerElementOffset;
98 }
99
101 {
102 return HashCombineFast(HashCombineFast(GetTypeHash(Key.Offset), GetTypeHash(Key.ContainerIndex)), GetTypeHash(Key.ContainerElementOffset));
103 }
104
105 static const FConnectionKey Invalid;
106
107 private:
108 friend struct ::FDataflowConnection;
109 friend struct ::FDataflowInput;
110 friend struct ::FDataflowOutput;
111 friend struct ::FDataflowNode;
113 : Offset(InOffset)
114 , ContainerIndex(InContainerIndex)
115 , ContainerElementOffset(InContainerElementOffset)
116 {}
117
118 uint32 Offset = INDEX_NONE;
119 int32 ContainerIndex = INDEX_NONE;
120 uint32 ContainerElementOffset = INDEX_NONE;
121 };
122
123 class FGraph;
124}
125
126//
127// Input Output Base
128//
129USTRUCT()
131{
133
134protected:
136 const FProperty* Property = nullptr;
138 IDataflowTypePolicy* TypePolicy = nullptr;
141 bool bIsAnyType:1 = false;
142 bool bHasConcreteType : 1 = false;
143 bool bCanHidePin:1 = false;
144 bool bPinIsHidden:1 = false;
145
146private:
147 FName OriginalType;
148 FName Type;
149 FName Name;
150
152 bool bLockType:1 = false;
153
154 // Name of the group dependecy the connection is part of
155 // This applies to anytype connections
156 // All other connection with the same group will inherit type from each other
157 FName TypeDependencyGroup;
158
159 friend struct FDataflowNode;
161
162protected:
163 DATAFLOWCORE_API void SetTypeInternal(FName NewType);
164
165 DATAFLOWCORE_API bool IsOwningNodeEnabled() const;
166
168 DATAFLOWCORE_API void SetAsAnyType(bool bAnyType, const FName& ConcreteType);
169
171 DATAFLOWCORE_API void ForceSimpleType(FName InType);
172 DATAFLOWCORE_API void FixAndPropagateType();
173 virtual void FixAndPropagateType(FName InType) { ensure(false); }
174
179 DATAFLOWCORE_API bool IsExtendedType(FName InType) const;
180
187 DATAFLOWCORE_API bool ResetToOriginalType();
188
189 /* Rename the connection */
190 DATAFLOWCORE_API void Rename(FName NewName);
191
192 DATAFLOWCORE_API void ForceTypeDependencyGroup(FName InTypeDependencyGroup);
193
194public:
196 UE_DEPRECATED(5.5, "Deprecated constructor : use FConnectionParameters to pass parameters")
197 DATAFLOWCORE_API FDataflowConnection(UE::Dataflow::FPin::EDirection Direction, FName InType, FName InName, FDataflowNode* OwningNode = nullptr, const FProperty* InProperty = nullptr, FGuid InGuid = FGuid::NewGuid());
198 DATAFLOWCORE_API FDataflowConnection(UE::Dataflow::FPin::EDirection Direction, const UE::Dataflow::FConnectionParameters& Params);
200
202 const FDataflowNode* GetOwningNode() const { return OwningNode; }
203
204 DATAFLOWCORE_API FGuid GetOwningNodeGuid() const;
205 DATAFLOWCORE_API uint32 GetOwningNodeValueHash() const;
206 DATAFLOWCORE_API UE::Dataflow::FTimestamp GetOwningNodeTimestamp() const;
207
208 const FProperty* GetProperty() const { return Property; }
209
210 DATAFLOWCORE_API FString GetPropertyTooltip() const;
211 DATAFLOWCORE_API FString GetPropertyTypeNameTooltip() const;
212
213 UE::Dataflow::FPin::EDirection GetDirection() const { return Direction; }
214 uint32 GetOffset() const { return Offset; }
215 virtual int32 GetContainerIndex() const { return INDEX_NONE; }
216 virtual uint32 GetContainerElementOffset() const { return INDEX_NONE; }
218 {
219 return UE::Dataflow::FConnectionKey(GetOffset(), GetContainerIndex(), GetContainerElementOffset());
220 }
221
232 DATAFLOWCORE_API bool SetConcreteType(FName InType);
233
234 void LockType() { bLockType = true; }
235 void UnlockType() { bLockType = false; }
236 bool IsTypeLocked() const { return bLockType; }
237
238 FName GetType() const { return Type; }
239 FName GetOriginalType() const { return OriginalType; }
240
241 template <typename T>
242 bool IsType() const
243 {
244 return Type == UE::Dataflow::GetTypeName<T>();
245 }
246
247 FGuid GetGuid() const { return Guid; }
249
250 FName GetName() const { return Name; }
251 void SetName(FName InName) { Name = InName; }
252
253 virtual void* RealAddress() const { ensure(OwningNode); return (void*)((size_t)OwningNode + (size_t)GetOffset()); };
255
256 /*
257 * check is this connection can chage type
258 * case where it cannot are :
259 * it is already connected
260 * it has copnnected type dependencies
261 */
262 DATAFLOWCORE_API bool IsSafeToTryChangingType() const;
263
264 virtual bool IsConnected() const { return false; }
265 virtual bool AddConnection(FDataflowConnection* In) { return false; };
266 virtual bool RemoveConnection(FDataflowConnection* In) { return false; }
268
269 bool IsAnyType() const { return bIsAnyType; }
270 DATAFLOWCORE_API static bool IsAnyType(const FName& InType);
271 bool HasConcreteType() const { return bHasConcreteType; }
273 DATAFLOWCORE_API bool SupportsType(FName InType) const;
274
276 FName GetTypeDependencyGroup() const { return TypeDependencyGroup; }
277
278 DATAFLOWCORE_API bool IsAnytypeDependencyConnected() const;
279
280 template<class T>
281 bool IsA(const T* InVar) const
282 {
283 return (size_t)RealAddress() == (size_t)InVar;
284 }
285
287
288 bool GetCanHidePin() const { return bCanHidePin; }
289 bool GetPinIsHidden() const { return bCanHidePin && bPinIsHidden; }
291 {
292 bCanHidePin = bInCanHidePin;
293 return *this;
294 }
296 {
297 bPinIsHidden = bInPinIsHidden;
298 return *this;
299 }
300
306 DATAFLOWCORE_API static FName GetTypeNameFromProperty(const FProperty* Property);
307
308private:
309 void InitFromType();
310};
#define ensure( InExpression)
Definition AssertionMacros.h:464
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
constexpr uint32 HashCombineFast(uint32 A, uint32 B)
Definition TypeHash.h:74
uint32 Offset
Definition VulkanMemory.cpp:4033
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition NameTypes.h:617
Definition UnrealType.h:174
Definition Array.h:670
Definition DataflowConnection.h:91
bool operator==(const FConnectionKey &Other) const
Definition DataflowConnection.h:95
static const FConnectionKey Invalid
Definition DataflowConnection.h:11
friend uint32 GetTypeHash(const FConnectionKey &Key)
Definition DataflowConnection.h:100
Definition DataflowGraph.h:71
Definition DataflowAnyType.cpp:10
DATAFLOWCORE_API FName GraphConnectionTypeName()
uint32 FContextCacheKey
Definition DataflowContextCache.h:23
Definition AdvancedWidgetsModule.cpp:13
uint32 GetTypeHash(const FPropertyPathName &Path)
Definition PropertyPathName.cpp:133
U16 Index
Definition radfft.cpp:71
Definition DataflowConnection.h:131
FDataflowConnection & SetPinIsHidden(bool bInPinIsHidden)
Definition DataflowConnection.h:295
FName GetOriginalType() const
Definition DataflowConnection.h:239
virtual uint32 GetContainerElementOffset() const
Definition DataflowConnection.h:216
bool bHasConcreteType
Definition DataflowConnection.h:142
bool bCanHidePin
Definition DataflowConnection.h:143
virtual void * RealAddress() const
Definition DataflowConnection.h:253
void SetGuid(FGuid InGuid)
Definition DataflowConnection.h:248
bool IsAnyType() const
Definition DataflowConnection.h:269
bool GetPinIsHidden() const
Definition DataflowConnection.h:289
bool IsTypeLocked() const
Definition DataflowConnection.h:236
const FProperty * GetProperty() const
Definition DataflowConnection.h:208
bool GetCanHidePin() const
Definition DataflowConnection.h:288
virtual bool IsConnected() const
Definition DataflowConnection.h:264
bool bIsAnyType
Definition DataflowConnection.h:141
UE::Dataflow::FConnectionKey GetConnectionKey() const
Definition DataflowConnection.h:217
virtual bool AddConnection(FDataflowConnection *In)
Definition DataflowConnection.h:265
FGuid Guid
Definition DataflowConnection.h:137
FName GetType() const
Definition DataflowConnection.h:238
bool IsA(const T *InVar) const
Definition DataflowConnection.h:281
bool bPinIsHidden
Definition DataflowConnection.h:144
uint32 GetOffset() const
Definition DataflowConnection.h:214
FGuid GetGuid() const
Definition DataflowConnection.h:247
uint32 Offset
Definition DataflowConnection.h:139
bool IsType() const
Definition DataflowConnection.h:242
void SetName(FName InName)
Definition DataflowConnection.h:251
const FDataflowNode * GetOwningNode() const
Definition DataflowConnection.h:202
virtual bool RemoveConnection(FDataflowConnection *In)
Definition DataflowConnection.h:266
FDataflowConnection & SetCanHidePin(bool bInCanHidePin)
Definition DataflowConnection.h:290
virtual void GetConnections(TArray< FDataflowConnection * > &OutConnections) const
Definition DataflowConnection.h:267
FName GetTypeDependencyGroup() const
Definition DataflowConnection.h:276
FDataflowConnection()
Definition DataflowConnection.h:195
bool HasConcreteType() const
Definition DataflowConnection.h:271
virtual void FixAndPropagateType(FName InType)
Definition DataflowConnection.h:173
FName GetName() const
Definition DataflowConnection.h:250
void LockType()
Definition DataflowConnection.h:234
virtual void Invalidate(const UE::Dataflow::FTimestamp &ModifiedTimestamp=UE::Dataflow::FTimestamp::Current())
Definition DataflowConnection.h:286
virtual int32 GetContainerIndex() const
Definition DataflowConnection.h:215
UE::Dataflow::FPin::EDirection GetDirection() const
Definition DataflowConnection.h:213
UE::Dataflow::FPin::EDirection Direction
Definition DataflowConnection.h:140
UE::Dataflow::FContextCacheKey CacheKey() const
Definition DataflowConnection.h:254
void UnlockType()
Definition DataflowConnection.h:235
FDataflowNode * GetOwningNode()
Definition DataflowConnection.h:201
Definition DataflowInputOutput.h:42
Definition DataflowNode.h:52
Definition DataflowInputOutput.h:149
Definition Guid.h:109
static CORE_API FGuid NewGuid()
Definition Guid.cpp:236
Definition DataflowTypePolicy.h:106
Definition DataflowConnection.h:48
uint32 Offset
Definition DataflowConnection.h:62
const FProperty * Property
Definition DataflowConnection.h:61
FGuid Guid
Definition DataflowConnection.h:63
FDataflowNode * Owner
Definition DataflowConnection.h:60
FName Type
Definition DataflowConnection.h:58
FName Name
Definition DataflowConnection.h:59
FConnectionParameters(FName InType=FName(""), FName InName=FName(""), FDataflowNode *InOwner=nullptr, const FProperty *InProperty=nullptr, uint32 InOffset=INDEX_NONE, FGuid InGuid=FGuid::NewGuid())
Definition DataflowConnection.h:49
Definition DataflowConnection.h:70
const void * Reference
Definition DataflowConnection.h:71
FConnectionReference(const void *InReference, int32 InIndex=INDEX_NONE, const void *InContainerReference=nullptr)
Definition DataflowConnection.h:75
const void * ContainerReference
Definition DataflowConnection.h:73
Definition DataflowConnection.h:28
static DATAFLOWCORE_API const FPin InvalidPin
Definition DataflowConnection.h:12
bool operator==(const FPin &Other) const
Definition DataflowConnection.h:39
bool bHidden
Definition DataflowConnection.h:37
EDirection
Definition DataflowConnection.h:29
EDirection Direction
Definition DataflowConnection.h:34
FName Name
Definition DataflowConnection.h:36
FName Type
Definition DataflowConnection.h:35
Definition DataflowContextCache.h:40
static DATAFLOWCORE_API Type Current()
Definition DataflowNodeParameters.cpp:105
Definition DataflowConnection.h:84
TConnectionReference(const T *InReference, int32 InIndex=INDEX_NONE, const void *InContainerReference=nullptr)
Definition DataflowConnection.h:85