UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DataflowGraph.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"
6#include "UObject/Interface.h"
11
12#include "DataflowGraph.generated.h"
13
15
16namespace UE::Dataflow
17{
18 class FGraph;
19}
20
22UINTERFACE(MinimalAPI)
27
35
36namespace UE::Dataflow
37{
38 struct FLink {
43
44 FLink() {}
45
49
53
54 bool operator==(const FLink& Other) const
55 {
56 return Equals(Other);
57 }
58
59 bool Equals(const FLink& Other) const
60 {
61 return Input == Other.Input && InputNode == Other.InputNode
62 && Output == Other.Output && OutputNode == Other.OutputNode;
63 }
64 };
65
66
67 //
68 //
69 //
70 class FGraph
71 {
72
73 FGuid Guid;
76 TArray< FLink > Connections;
77 TSet< FName > DisabledNodes;
78
80 static TSet<FName> RegisteredFilters;
81
84
85 public:
87 virtual ~FGraph() {}
88
90 {
92 if(const TArray< TSharedPtr<FDataflowNode> >* FoundNodes = FilteredNodes.Find(NodeFilter))
93 {
94 return *FoundNodes;
95 }
96 return EmptyNodes;
97 }
98 const TArray< TSharedPtr<FDataflowNode> >& GetNodes() const { return Nodes; }
100 int NumNodes() { return Nodes.Num(); }
101
102 template<class T> TSharedPtr<T> AddNode(T* InNode)
103 {
104 TSharedPtr<T> NewNode(InNode);
105 Nodes.AddUnique(NewNode);
106 for(const FName& RegisteredType : RegisteredFilters)
107 {
108 if (NewNode->IsA(RegisteredType))
109 {
110 FilteredNodes.FindOrAdd(RegisteredType).Add(NewNode);
111 }
112 }
113 return NewNode;
114 }
115
117 {
118 TSharedPtr<T> NewNode(InNode.Release());
119 Nodes.AddUnique(NewNode);
120 for(const FName& RegisteredType : RegisteredFilters)
121 {
122 if (NewNode->IsA(RegisteredType))
123 {
124 FilteredNodes.FindOrAdd(RegisteredType).Add(NewNode);
125 }
126 }
127 return NewNode;
128 }
129
131 {
132 for (TSharedPtr<FDataflowNode> Node : Nodes)
133 {
134 if (Node->GetGuid() == InGuid)
135 {
136 return Node;
137 }
138 }
139 return TSharedPtr<FDataflowNode>(nullptr);
140 }
141
143 {
144 for (TSharedPtr<FDataflowNode> Node : Nodes)
145 {
146 if (Node->GetGuid() == InGuid)
147 {
148 return Node;
149 }
150 }
151 return TSharedPtr<FDataflowNode>(nullptr);
152 }
153
155 {
156 for (TSharedPtr<FDataflowNode> Node : Nodes)
157 {
158 if (Node->GetName().IsEqual(InName))
159 {
160 return Node;
161 }
162 }
163 return TSharedPtr<FDataflowNode>(nullptr);
164 }
165
167 {
168 for (TSharedPtr<FDataflowNode> Node : Nodes)
169 {
170 if (Node->GetName().IsEqual(InName))
171 {
172 return Node;
173 }
174 }
175 return TSharedPtr<const FDataflowNode>(nullptr);
176 }
177
179 {
181 {
182 if (Node->GetName().IsEqual(InName))
183 {
184 return Node;
185 }
186 }
187 return TSharedPtr<FDataflowNode>(nullptr);
188 }
189
191
192 const TArray<FLink>& GetConnections() const { return Connections; }
196
197 enum class EConnectType : uint8
198 {
199 REJECTED = 0,
200 DIRECT, // both are already compatible
201 INPUT_PROMOTION, // input can be changed to adapt the output type
202 OUTPUT_PROMOTION, // output can be changed to adapt the input type
203 };
204
205 DATAFLOWCORE_API bool CanConnect(const FDataflowOutput& Output, const FDataflowInput& Input) const;
208
212
214
215 DATAFLOWCORE_API virtual void Serialize(FArchive& Ar, UObject* OwningObject);
216 const TSet<FName>& GetDisabledNodes() const { return DisabledNodes; }
217
219 DATAFLOWCORE_API static void SerializeForLoading(FArchive& Ar, FGraph* InGraph, UObject* OwningObject);
220
221 private:
222 void Reset();
223 };
224
226}
227
228
230{
231 Ar << Value.InputNode << Value.OutputNode << Value.Input << Value.Output;
232 return Ar;
233}
234
236{
237 Ar << Value.InputNode << Value.OutputNode << Value.Input << Value.Output;
238 return Ar;
239}
240
241
242
243
244
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
FArchive & operator<<(FArchive &Ar, UE::Dataflow::FLink &Value)
Definition DataflowGraph.h:229
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UINTERFACE(...)
Definition ObjectMacros.h:780
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition ChaosArchive.h:167
Definition Archive.h:1208
Definition NameTypes.h:617
Definition UObjectGlobals.h:2492
Definition DataflowGraph.h:29
virtual TSharedPtr< UE::Dataflow::FGraph > GetDataflowGraph() const =0
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_FORCEINLINE_HINT SizeType AddUnique(ElementType &&Item)
Definition Array.h:2993
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition UniquePtr.h:107
Definition DataflowGraph.h:24
Definition DataflowGraph.h:71
const TArray< TSharedPtr< FDataflowNode > > & GetNodes() const
Definition DataflowGraph.h:98
TSharedPtr< const FDataflowNode > FindBaseNode(FGuid InGuid) const
Definition DataflowGraph.h:142
const TArray< FLink > & GetConnections() const
Definition DataflowGraph.h:192
DATAFLOWCORE_API void RemoveNode(TSharedPtr< FDataflowNode > Node)
Definition DataflowGraph.cpp:35
TSharedPtr< FDataflowNode > FindBaseNode(FName InName)
Definition DataflowGraph.h:154
friend DATAFLOWCORE_API void RegisterNodeFilter(const FName &NodeFilter)
Definition DataflowGraph.cpp:666
DATAFLOWCORE_API EConnectType GetConnectType(const FDataflowOutput &Output, const FDataflowInput &Input) const
Definition DataflowGraph.cpp:147
EConnectType
Definition DataflowGraph.h:198
TArray< TSharedPtr< FDataflowNode > > & GetNodes()
Definition DataflowGraph.h:99
const TArray< TSharedPtr< FDataflowNode > > & GetFilteredNodes(const FName &NodeFilter) const
Definition DataflowGraph.h:89
int NumNodes()
Definition DataflowGraph.h:100
virtual ~FGraph()
Definition DataflowGraph.h:87
TSharedPtr< FDataflowNode > FindBaseNode(FGuid InGuid)
Definition DataflowGraph.h:130
DATAFLOWCORE_API void ClearConnections(FDataflowConnection *ConnectionBase)
Definition DataflowGraph.cpp:77
const TSet< FName > & GetDisabledNodes() const
Definition DataflowGraph.h:216
TSharedPtr< FDataflowNode > FindFilteredNode(const FName &NodeFilter, FName InName) const
Definition DataflowGraph.h:178
static DATAFLOWCORE_API void SerializeForSaving(FArchive &Ar, FGraph *InGraph, TArray< TSharedPtr< FDataflowNode > > &InNodes, TArray< FLink > &InConnections)
Definition DataflowGraph.cpp:349
TSharedPtr< const FDataflowNode > FindBaseNode(FName InName) const
Definition DataflowGraph.h:166
TSharedPtr< T > AddNode(TUniquePtr< T > &&InNode)
Definition DataflowGraph.h:116
DATAFLOWCORE_API bool CanConnect(const FDataflowOutput &Output, const FDataflowInput &Input) const
Definition DataflowGraph.cpp:142
DATAFLOWCORE_API void AddReferencedObjects(FReferenceCollector &Collector)
Definition DataflowGraph.cpp:325
TSharedPtr< T > AddNode(T *InNode)
Definition DataflowGraph.h:102
static DATAFLOWCORE_API void SerializeForLoading(FArchive &Ar, FGraph *InGraph, UObject *OwningObject)
Definition DataflowGraph.cpp:406
Definition Interface.h:19
Definition Object.h:95
Definition DataflowAnyType.cpp:10
void RegisterNodeFilter(const FName &NodeFilter)
Definition DataflowGraph.cpp:666
Definition DataflowConnection.h:131
Definition DataflowInputOutput.h:42
Definition DataflowInputOutput.h:149
Definition Guid.h:109
static CORE_API FGuid NewGuid()
Definition Guid.cpp:236