2022-05-10 16:51:39 -04:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
#include "Analysis/MetasoundFrontendAnalyzerRegistry.h"
|
|
|
|
|
|
|
|
|
|
#include "Analysis/MetasoundFrontendAnalyzerFactory.h"
|
|
|
|
|
#include "Analysis/MetasoundFrontendVertexAnalyzerEnvelopeFollower.h"
|
2022-05-12 13:47:17 -04:00
|
|
|
#include "Analysis/MetasoundFrontendVertexAnalyzerForwardValue.h"
|
2022-05-10 16:51:39 -04:00
|
|
|
#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;
|
|
|
|
|
|
2022-05-12 13:47:17 -04:00
|
|
|
virtual const IVertexAnalyzerFactory* FindAnalyzerFactory(FName InAnalyzerName) const override
|
2022-05-10 16:51:39 -04:00
|
|
|
{
|
|
|
|
|
const TUniquePtr<IVertexAnalyzerFactory>* Factory = AnalyzerFactoryRegistry.Find(InAnalyzerName);
|
|
|
|
|
if (ensureMsgf(Factory, TEXT("Failed to find registered MetaSound Analyzer Factory with name '%s'"), *InAnalyzerName.ToString()))
|
|
|
|
|
{
|
2022-05-12 13:47:17 -04:00
|
|
|
check(Factory->IsValid());
|
|
|
|
|
return Factory->Get();
|
2022-05-10 16:51:39 -04:00
|
|
|
}
|
|
|
|
|
|
2022-05-12 13:47:17 -04:00
|
|
|
return nullptr;
|
2022-05-10 16:51:39 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual void RegisterAnalyzerFactories() override
|
|
|
|
|
{
|
|
|
|
|
RegisterAnalyzerFactory<FVertexAnalyzerEnvelopeFollower::FFactory>();
|
|
|
|
|
RegisterAnalyzerFactory<FVertexAnalyzerTriggerDensity::FFactory>();
|
|
|
|
|
|
|
|
|
|
// Primitives
|
2022-05-12 13:47:17 -04:00
|
|
|
RegisterAnalyzerFactory<FVertexAnalyzerForwardBool::FFactory>();
|
|
|
|
|
RegisterAnalyzerFactory<FVertexAnalyzerForwardFloat::FFactory>();
|
|
|
|
|
RegisterAnalyzerFactory<FVertexAnalyzerForwardInt::FFactory>();
|
|
|
|
|
RegisterAnalyzerFactory<FVertexAnalyzerForwardString::FFactory>();
|
2022-05-10 16:51:39 -04:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
IVertexAnalyzerRegistry& IVertexAnalyzerRegistry::Get()
|
|
|
|
|
{
|
|
|
|
|
static FVertexAnalyzerRegistry Registry;
|
|
|
|
|
return Registry;
|
|
|
|
|
}
|
|
|
|
|
} // namespace Frontend
|
|
|
|
|
} // namespace Metasound
|