Files
UnrealEngineUWP/Engine/Plugins/Runtime/Metasound/Source/MetasoundFrontend/Private/Analysis/MetasoundFrontendAnalyzerRegistry.cpp
Rob Gay 20742757be - Narrow/privitize template implementation scope for MetaSound Analyzers
- Implement/encapsulate binding for analyzer output/sender logic
- Move to using FAnyDataReferences where possible over collections for analyzers
- Misc clean-up
#jira UE-147027
#rb phil.popp
#preflight 627d3884332e182a583f19b3

[CL 20167469 by Rob Gay in ue5-main branch]
2022-05-12 13:47:17 -04:00

62 lines
2.0 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "Analysis/MetasoundFrontendAnalyzerRegistry.h"
#include "Analysis/MetasoundFrontendAnalyzerFactory.h"
#include "Analysis/MetasoundFrontendVertexAnalyzerEnvelopeFollower.h"
#include "Analysis/MetasoundFrontendVertexAnalyzerForwardValue.h"
#include "Analysis/MetasoundFrontendVertexAnalyzerTriggerDensity.h"
#include "MetasoundPrimitives.h"
namespace Metasound
{
namespace Frontend
{
class FVertexAnalyzerRegistry : public IVertexAnalyzerRegistry
{
TMap<FName, TUniquePtr<IVertexAnalyzerFactory>> AnalyzerFactoryRegistry;
template<typename TAnalyzerFactoryClass>
void RegisterAnalyzerFactory()
{
TUniquePtr<IVertexAnalyzerFactory> Factory(new TAnalyzerFactoryClass());
AnalyzerFactoryRegistry.Emplace(TAnalyzerFactoryClass::GetAnalyzerName(), MoveTemp(Factory));
}
public:
FVertexAnalyzerRegistry() = default;
virtual ~FVertexAnalyzerRegistry() = default;
virtual const IVertexAnalyzerFactory* FindAnalyzerFactory(FName InAnalyzerName) const override
{
const TUniquePtr<IVertexAnalyzerFactory>* Factory = AnalyzerFactoryRegistry.Find(InAnalyzerName);
if (ensureMsgf(Factory, TEXT("Failed to find registered MetaSound Analyzer Factory with name '%s'"), *InAnalyzerName.ToString()))
{
check(Factory->IsValid());
return Factory->Get();
}
return nullptr;
}
virtual void RegisterAnalyzerFactories() override
{
RegisterAnalyzerFactory<FVertexAnalyzerEnvelopeFollower::FFactory>();
RegisterAnalyzerFactory<FVertexAnalyzerTriggerDensity::FFactory>();
// Primitives
RegisterAnalyzerFactory<FVertexAnalyzerForwardBool::FFactory>();
RegisterAnalyzerFactory<FVertexAnalyzerForwardFloat::FFactory>();
RegisterAnalyzerFactory<FVertexAnalyzerForwardInt::FFactory>();
RegisterAnalyzerFactory<FVertexAnalyzerForwardString::FFactory>();
}
};
IVertexAnalyzerRegistry& IVertexAnalyzerRegistry::Get()
{
static FVertexAnalyzerRegistry Registry;
return Registry;
}
} // namespace Frontend
} // namespace Metasound