UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MovieSceneEntitySystemDirectedGraph.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
9
11
12namespace UE::MovieScene
13{
14
20
25{
27 {
32
33 friend bool operator==(const FDirectionalEdge& A, const FDirectionalEdge& B)
34 {
35 return A.FromNode == B.FromNode && A.ToNode == B.ToNode;
36 }
37
38 friend bool operator!=(const FDirectionalEdge& A, const FDirectionalEdge& B)
39 {
40 return !(A == B);
41 }
42
43 friend bool operator<(const FDirectionalEdge& A, const FDirectionalEdge& B)
44 {
45 if (A.FromNode == B.FromNode)
46 {
47 return A.ToNode < B.ToNode;
48 }
49 return A.FromNode < B.FromNode;
50 }
51
53
55 };
56
57public:
58
60 {
62
64
65 MOVIESCENE_API void Search(uint16 Node);
66
67 const TBitArray<>& GetVisited() const
68 {
69 return Visited;
70 }
71
72 private:
73
74 TBitArray<> Visited;
75 TBitArray<> IsVisiting;
76
77 const FDirectedGraph* Graph;
78 };
79
81 {
83
85
86 MOVIESCENE_API void Search(uint16 Node);
87
88 const TBitArray<>& GetVisited() const
89 {
90 return Visited;
91 }
92
93 private:
94
95 TBitArray<> Visited;
96 const FDirectedGraph* Graph;
97 int32 StackIndex;
98 };
99
101 {
103
105
106 bool IsCyclic(const uint16 EdgeIndex) const
107 {
108 return CyclicEdges.IsValidIndex(EdgeIndex) && CyclicEdges[EdgeIndex] == true;
109 }
110
112 {
113 return CyclicEdges;
114 }
115
116 MOVIESCENE_API void Search();
117 MOVIESCENE_API void SearchFrom(uint16 NodeID);
118
119 private:
120
121 MOVIESCENE_API void DiscoverCycles(uint16 NodeID, TBitArray<>& VisitedNodes);
122 MOVIESCENE_API void TagCyclicChain(uint16 CyclicNodeID);
123
124 TBitArray<> CyclicEdges;
125 TBitArray<> VisitedEdges;
127 const FDirectedGraph* Graph;
128 };
129
130public:
131
133 : bHasDanglingEdges(false)
134 {}
135
137
138 MOVIESCENE_API bool IsNodeAllocated(uint16 NodeID) const;
139
141
142 MOVIESCENE_API void RemoveNode(uint16 NodeID);
143
145 {
146 return Nodes;
147 }
148
149 MOVIESCENE_API bool IsCyclic() const;
150
151 MOVIESCENE_API void MakeEdge(uint16 FromNode, uint16 ToNode);
152
153 MOVIESCENE_API void DestroyEdge(uint16 FromNode, uint16 ToNode);
154
156
158
160
162
164
166
167 MOVIESCENE_API FString ToString(const UE::MovieScene::FDirectedGraphStringParameters& Parameters) const;
168
170
171private:
172
173 MOVIESCENE_API int32 FindEdgeStart(uint16 FromNode) const;
174
175 MOVIESCENE_API int32 FindEdgeIndex(const FDirectionalEdge& Edge) const;
176
177 MOVIESCENE_API bool EdgeExists(const FDirectionalEdge& Edge) const;
178
179 MOVIESCENE_API bool IsCyclicImpl(uint16 NodeID, TBitArray<>& Visiting) const;
180
181private:
182
183 friend FDepthFirstSearch;
184 friend FBreadthFirstSearch;
185 friend FDiscoverCyclicEdges;
186
187 TBitArray<> Nodes;
188 TArray<FDirectionalEdge> SortedEdges;
189 bool bHasDanglingEdges;
190};
191
192
193} // namespace UE::MovieScene
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
uint16_t uint16
Definition binka_ue_file_header.h:7
Definition ArrayView.h:139
Definition Array.h:670
UE_FORCEINLINE_HINT bool IsValidIndex(int32 InIndex) const
Definition BitArray.h:1450
Definition AssetRegistryState.h:50
Definition ConstraintsManager.h:14
@ false
Definition radaudio_common.h:23
Definition Color.h:486
static CORE_API const FColor Black
Definition Color.h:750
Definition MovieSceneEntitySystemDirectedGraph.h:16
FColor Color
Definition MovieSceneEntitySystemDirectedGraph.h:18
FStringView ClusterName
Definition MovieSceneEntitySystemDirectedGraph.h:17
Definition MovieSceneEntitySystemDirectedGraph.h:81
MOVIESCENE_API void Search(uint16 Node)
Definition MovieSceneEntitySystemDirectedGraph.cpp:52
TArray< uint16 > Nodes
Definition MovieSceneEntitySystemDirectedGraph.h:82
const TBitArray & GetVisited() const
Definition MovieSceneEntitySystemDirectedGraph.h:88
Definition MovieSceneEntitySystemDirectedGraph.h:60
const TBitArray & GetVisited() const
Definition MovieSceneEntitySystemDirectedGraph.h:67
MOVIESCENE_API void Search(uint16 Node)
Definition MovieSceneEntitySystemDirectedGraph.cpp:21
TArray< uint16 > PostNodes
Definition MovieSceneEntitySystemDirectedGraph.h:61
Definition MovieSceneEntitySystemDirectedGraph.h:27
FDirectionalEdge(uint16 InFromNode, uint16 InToNode)
Definition MovieSceneEntitySystemDirectedGraph.h:28
friend bool operator==(const FDirectionalEdge &A, const FDirectionalEdge &B)
Definition MovieSceneEntitySystemDirectedGraph.h:33
friend bool operator<(const FDirectionalEdge &A, const FDirectionalEdge &B)
Definition MovieSceneEntitySystemDirectedGraph.h:43
friend bool operator!=(const FDirectionalEdge &A, const FDirectionalEdge &B)
Definition MovieSceneEntitySystemDirectedGraph.h:38
uint16 FromNode
Definition MovieSceneEntitySystemDirectedGraph.h:52
uint16 ToNode
Definition MovieSceneEntitySystemDirectedGraph.h:54
Definition MovieSceneEntitySystemDirectedGraph.h:101
const TBitArray & GetCyclicEdges() const
Definition MovieSceneEntitySystemDirectedGraph.h:111
MOVIESCENE_API void SearchFrom(uint16 NodeID)
Definition MovieSceneEntitySystemDirectedGraph.cpp:109
MOVIESCENE_API void Search()
Definition MovieSceneEntitySystemDirectedGraph.cpp:93
bool IsCyclic(const uint16 EdgeIndex) const
Definition MovieSceneEntitySystemDirectedGraph.h:106
Definition MovieSceneEntitySystemDirectedGraph.h:25
MOVIESCENE_API bool IsNodeAllocated(uint16 NodeID) const
Definition MovieSceneEntitySystemDirectedGraph.cpp:168
MOVIESCENE_API void MakeEdge(uint16 FromNode, uint16 ToNode)
Definition MovieSceneEntitySystemDirectedGraph.cpp:249
MOVIESCENE_API TArrayView< const FDirectionalEdge > GetEdges() const
Definition MovieSceneEntitySystemDirectedGraph.cpp:282
MOVIESCENE_API bool IsCyclic() const
Definition MovieSceneEntitySystemDirectedGraph.cpp:205
MOVIESCENE_API TArrayView< const FDirectionalEdge > GetEdgesFrom(uint16 InNode) const
Definition MovieSceneEntitySystemDirectedGraph.cpp:300
MOVIESCENE_API void DestroyAllEdges()
Definition MovieSceneEntitySystemDirectedGraph.cpp:271
MOVIESCENE_API bool HasEdgeFrom(uint16 InNode) const
Definition MovieSceneEntitySystemDirectedGraph.cpp:288
FDirectedGraph()
Definition MovieSceneEntitySystemDirectedGraph.h:132
MOVIESCENE_API void DestroyEdge(uint16 FromNode, uint16 ToNode)
Definition MovieSceneEntitySystemDirectedGraph.cpp:260
MOVIESCENE_API void RemoveNode(uint16 NodeID)
Definition MovieSceneEntitySystemDirectedGraph.cpp:173
MOVIESCENE_API bool HasEdgeTo(uint16 InNode) const
Definition MovieSceneEntitySystemDirectedGraph.cpp:294
const TBitArray & GetNodeMask() const
Definition MovieSceneEntitySystemDirectedGraph.h:144
MOVIESCENE_API void AllocateNode(uint16 NodeID)
Definition MovieSceneEntitySystemDirectedGraph.cpp:161
MOVIESCENE_API void CleanUpDanglingEdges()
Definition MovieSceneEntitySystemDirectedGraph.cpp:183
MOVIESCENE_API TBitArray FindEdgeUpstreamNodes() const
Definition MovieSceneEntitySystemDirectedGraph.cpp:319