// Copyright Epic Games, Inc. All Rights Reserved. #include "SceneStateBindingCollection.h" const FSceneStateBindingDesc* FSceneStateBindingCollection::FindBindingDesc(FSceneStateBindingDataHandle InDataHandle) const { return BindingDescs.FindByPredicate( [&InDataHandle](const FSceneStateBindingDesc& InDesc) { return InDesc.DataHandle == InDataHandle; }); } #if WITH_EDITOR FPropertyBindingBinding* FSceneStateBindingCollection::AddBindingInternal(const FPropertyBindingPath& InSourcePath, const FPropertyBindingPath& InTargetPath) { return &Bindings.Emplace_GetRef(InSourcePath, InTargetPath); } void FSceneStateBindingCollection::RemoveBindingsInternal(TFunctionRef InPredicate) { Bindings.RemoveAllSwap(InPredicate); } bool FSceneStateBindingCollection::HasBindingInternal(TFunctionRef InPredicate) const { return Bindings.ContainsByPredicate(InPredicate); } const FPropertyBindingBinding* FSceneStateBindingCollection::FindBindingInternal(TFunctionRef InPredicate) const { return Bindings.FindByPredicate(InPredicate); } #endif int32 FSceneStateBindingCollection::GetNumBindings() const { return Bindings.Num(); } int32 FSceneStateBindingCollection::GetNumBindableStructDescriptors() const { return BindingDescs.Num(); } const FPropertyBindingBindableStructDescriptor* FSceneStateBindingCollection::GetBindableStructDescriptorFromHandle(FConstStructView InSourceHandleView) const { return FindBindingDesc(InSourceHandleView.Get()); } void FSceneStateBindingCollection::ForEachBinding(TFunctionRef InFunction) const { for (const FSceneStateBinding& Binding : Bindings) { InFunction(Binding); } } void FSceneStateBindingCollection::ForEachBinding(FPropertyBindingIndex16 InBegin, FPropertyBindingIndex16 InEnd, TFunctionRef InFunction) const { checkf(InBegin.IsValid() && InEnd.IsValid(), TEXT("Begin and end indices are not valid!")); for (int32 BindingIndex = InBegin.Get(); BindingIndex < InEnd.Get(); ++BindingIndex) { checkf(Bindings.IsValidIndex(BindingIndex), TEXT("Index %d out of bounds! Bindings Num: %d"), BindingIndex, Bindings.Num()); InFunction(Bindings[BindingIndex], BindingIndex); } } void FSceneStateBindingCollection::ForEachMutableBinding(TFunctionRef InFunction) { for (FSceneStateBinding& Binding : Bindings) { InFunction(Binding); } } void FSceneStateBindingCollection::VisitBindings(TFunctionRef InFunction) const { for (const FSceneStateBinding& Binding : Bindings) { if (InFunction(Binding) == EVisitResult::Break) { break; } } } void FSceneStateBindingCollection::VisitMutableBindings(TFunctionRef InFunction) { for (FSceneStateBinding& Binding : Bindings) { if (InFunction(Binding) == EVisitResult::Break) { break; } } } void FSceneStateBindingCollection::OnReset() { BindingDescs.Reset(); Bindings.Reset(); } void FSceneStateBindingCollection::VisitSourceStructDescriptorInternal(TFunctionRef InFunction) const { for (const FSceneStateBindingDesc& BindingDesc : BindingDescs) { if (InFunction(BindingDesc) == EVisitResult::Break) { break; } } }