7#include "Containers/Array.h"
9#include "Containers/Map.h"
10#include "Containers/Set.h"
12#include "Templates/Invoke.h"
45 template <
typename RangeType,
typename GetElementDependenciesType>
62 template <
typename RangeType,
typename GetElementDependenciesType>
81 int32 NumElements = Dependencies.
Num();
83 RemainingVertices.Reserve(NumElements);
86 RemainingVertices.Add(
Vertex);
90 while (RemainingVertices.Num() > 0)
134 RemainingVertices.Remove(
Vertex);
150 int32 SourceIndex = 0;
166 template <
typename RangeType,
typename GetElementDependenciesType>
187 Referencers.
SetNum(NumElements);
188 Dependencies.
SetNum(NumElements);
189 DependencyCount.
SetNum(NumElements);
227 if (!
Context.MRVSContext.IsSet())
232 InitContext.VisitedDependencies.Reserve(NumVertices);
250 Culprits.Append(
Context.RemainingVertices);
253 check(!Culprits.IsEmpty());
260 VisitedReferences.Reset();
295 check(StartIndex >= 0);
309 if (Culprits.Contains(Referencer))
315 Stack.
Add(Referencer);
322 VisitedDependencies.Reset();
326 VisitedDependencies.Add(
Vertex);
346 MaximalMRVS = VisitedDependencies.Intersect(VisitedReferences);
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
@ INDEX_NONE
Definition CoreMiscDefines.h:150
AUTORTFM_INFER UE_FORCEINLINE_HINT constexpr auto Invoke(FuncType &&Func, ArgTypes &&... Args) -> decltype(((FuncType &&) Func)((ArgTypes &&) Args...))
Definition Invoke.h:44
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
auto GetNum(const TStringConversion< Converter, DefaultConversionSize > &Conversion) -> decltype(Conversion.Length())
Definition StringConv.h:808
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition ArrayView.h:139
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void Reset(SizeType NewSize=0)
Definition Array.h:2246
UE_REWRITE bool IsEmpty() const
Definition Array.h:1133
void SetNum(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2308
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
UE_NODEBUG UE_FORCEINLINE_HINT bool Find(const ElementType &Item, SizeType &Index) const
Definition Array.h:1302
ElementType Pop(EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:1196
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition UnrealString.h.inl:34
Definition BinarySearch.h:10
void KahnTopologicalSort_CreateWorkingGraph(FKahnContext &Context, RangeType &UniqueRange, GetElementDependenciesType GetElementDependencies, TSet< FKahnHandle > &OutInitialIndependents)
Definition KahnTopologicalSort.h:167
int32 FKahnHandle
Definition KahnTopologicalSort.h:22
const TSet< FKahnHandle > & FindMostIndependentMutuallyReachableVertexSet(FKahnContext &Context)
Definition KahnTopologicalSort.h:225
Definition ParallelSort.h:13
UE_REWRITE void Sort(RangeType &&Range)
Definition Sort.h:16
ETopologicalSort
Definition KahnTopologicalSort.h:55
bool KahnTopologicalSort(RangeType &&UniqueRange, GetElementDependenciesType GetElementDependencies, ETopologicalSort Flags)
Definition KahnTopologicalSort.h:63
Definition KahnTopologicalSort.h:36
TArray< int32 > DependencyCount
Definition KahnTopologicalSort.h:40
TArray< TArray< FKahnHandle > > Dependencies
Definition KahnTopologicalSort.h:39
TSet< FKahnHandle > RemainingVertices
Definition KahnTopologicalSort.h:37
TArray< TArray< FKahnHandle > > Referencers
Definition KahnTopologicalSort.h:38
TOptional< FMutuallyReachableVertexSetContext > MRVSContext
Definition KahnTopologicalSort.h:41
Definition KahnTopologicalSort.h:26
TSet< FKahnHandle > VisitedDependencies
Definition KahnTopologicalSort.h:28
TSet< FKahnHandle > VisitedReferences
Definition KahnTopologicalSort.h:27
TSet< FKahnHandle > MaximalMRVS
Definition KahnTopologicalSort.h:29
TArray< FKahnHandle > Stack
Definition KahnTopologicalSort.h:31
TSet< FKahnHandle > Culprits
Definition KahnTopologicalSort.h:30
TArray< FKahnHandle > Cycle
Definition KahnTopologicalSort.h:32
Definition ElementType.h:30
Definition Optional.h:131