44 lines
864 B
C++
44 lines
864 B
C++
#include "common/subsystems.h"
|
|
|
|
namespace Common {
|
|
|
|
static Subsystems* g_active_subsystems = nullptr;
|
|
|
|
Subsystems::Subsystems(bool print): m_print(print) {
|
|
m_active.reserve(16);
|
|
g_active_subsystems = this;
|
|
}
|
|
|
|
Subsystems::~Subsystems() {
|
|
Destroy();
|
|
if (g_active_subsystems == this) {
|
|
g_active_subsystems = nullptr;
|
|
}
|
|
}
|
|
|
|
void Subsystems::Destroy() {
|
|
for (auto it = m_active.rbegin(); it != m_active.rend(); ++it) {
|
|
if (it->shutdown != nullptr) {
|
|
it->shutdown();
|
|
}
|
|
}
|
|
m_active.clear();
|
|
}
|
|
|
|
void Subsystems::EmergencyShutdown() {
|
|
for (auto it = m_active.rbegin(); it != m_active.rend(); ++it) {
|
|
if (it->emergency_shutdown != nullptr) {
|
|
it->emergency_shutdown();
|
|
}
|
|
}
|
|
m_active.clear();
|
|
}
|
|
|
|
void Subsystems::EmergencyShutdownActive() {
|
|
if (g_active_subsystems != nullptr) {
|
|
g_active_subsystems->EmergencyShutdown();
|
|
}
|
|
}
|
|
|
|
} // namespace Common
|