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;
|
|
|
|
|
|
2023-05-03 13:43:51 -04:00
|
|
|
public:
|
2022-05-10 16:51:39 -04:00
|
|
|
template<typename TAnalyzerFactoryClass>
|
|
|
|
|
void RegisterAnalyzerFactory()
|
|
|
|
|
{
|
|
|
|
|
TUniquePtr<IVertexAnalyzerFactory> Factory(new TAnalyzerFactoryClass());
|
|
|
|
|
AnalyzerFactoryRegistry.Emplace(TAnalyzerFactoryClass::GetAnalyzerName(), MoveTemp(Factory));
|
|
|
|
|
}
|
2023-05-03 13:43:51 -04:00
|
|
|
|
2022-05-10 16:51:39 -04:00
|
|
|
FVertexAnalyzerRegistry() = default;
|
2023-05-03 13:43:51 -04:00
|
|
|
virtual ~FVertexAnalyzerRegistry() override = default;
|
2022-05-10 16:51:39 -04:00
|
|
|
|
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);
|
2023-05-10 08:29:22 -04:00
|
|
|
if (nullptr == Factory)
|
2022-05-10 16:51:39 -04:00
|
|
|
{
|
2023-05-10 08:29:22 -04:00
|
|
|
UE_LOG(LogMetaSound, Warning, TEXT("Failed to find registered MetaSound Analyzer Factory with name '%s'"), *InAnalyzerName.ToString());
|
|
|
|
|
return nullptr;
|
2022-05-10 16:51:39 -04:00
|
|
|
}
|
|
|
|
|
|
2023-05-10 08:29:22 -04:00
|
|
|
check(Factory->IsValid());
|
|
|
|
|
return Factory->Get();
|
2022-05-10 16:51:39 -04:00
|
|
|
}
|
|
|
|
|
|
2023-05-03 13:43:51 -04:00
|
|
|
virtual void RegisterAnalyzerFactory(FName AnalyzerName, TUniquePtr<IVertexAnalyzerFactory>&& Factory) override
|
2022-05-10 16:51:39 -04:00
|
|
|
{
|
2023-05-03 13:43:51 -04:00
|
|
|
check(!AnalyzerFactoryRegistry.Contains(AnalyzerName));
|
|
|
|
|
AnalyzerFactoryRegistry.Emplace(AnalyzerName, MoveTemp(Factory));
|
2022-05-10 16:51:39 -04:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
IVertexAnalyzerRegistry& IVertexAnalyzerRegistry::Get()
|
|
|
|
|
{
|
|
|
|
|
static FVertexAnalyzerRegistry Registry;
|
|
|
|
|
return Registry;
|
|
|
|
|
}
|
|
|
|
|
} // namespace Frontend
|
|
|
|
|
} // namespace Metasound
|