AronaSlate/Source/Arona/Singleton/SingletonManager.cpp

58 lines
1.4 KiB
C++

#include "SingletonManager.h"
#include "Misc/AronaConfig.h"
#include "PeakFile/PeakFileManager.h"
#include "Singleton/CallRateLimiterManager.h"
#include "Singleton/MidiSequencer.h"
#include "Singleton/MixerList.h"
#include "Singleton/PluginHostList.h"
#include "Singleton/PortAudioAPI.h"
#include "Singleton/SampleManager.h"
#include "UI/Widget/WindowManager.h"
#define REGISTER_MANAGER(ManagerClass) RegisterManager(&ManagerClass::Get());
void FSingletonManager::Init()
{
REGISTER_MANAGER(FCallRateLimiterManager)
REGISTER_MANAGER(FAronaConfig)
REGISTER_MANAGER(FSampleManager)
REGISTER_MANAGER(FMixerList)
REGISTER_MANAGER(FPortAudioAPI)
REGISTER_MANAGER(FPluginHostList)
REGISTER_MANAGER(FMidiSequencer)
REGISTER_MANAGER(FWindowManager)
REGISTER_MANAGER(FPeakFileManager)
for (ISingleton* Manager : Managers)
{
Manager->PostInit();
}
}
void FSingletonManager::Release()
{
for (int32 i = Managers.Num() - 1; i >= 0; --i)
{
ISingleton* SingletonImpl = Managers[i];
SingletonImpl->BeginRelease();
}
for (int32 i = Managers.Num() - 1; i >= 0; --i)
{
ISingleton* SingletonImpl = Managers[i];
SingletonImpl->Release();
}
Managers.Reset();
}
void FSingletonManager::RegisterManager(ISingleton* Manager)
{
Manager->Init();
Managers.Add(Manager);
UE_LOG(SingletonLog, Log, TEXT("%s Registered"), *Manager->GetName().ToString());
}
FSingletonManager::FSingletonManager()
{
}