81 lines
1.6 KiB
C++
81 lines
1.6 KiB
C++
|
|
#include "BaseModule.hpp"
|
|
|
|
#include <iostream>
|
|
|
|
using namespace tp;
|
|
|
|
static bool init(const ModuleManifest* self) {
|
|
gEnvironment.log();
|
|
return true;
|
|
}
|
|
|
|
static ModuleManifest* deps[] = { nullptr };
|
|
ModuleManifest tp::gModuleBase = ModuleManifest("Common", init, nullptr, deps);
|
|
|
|
ModuleManifest::ModuleManifest(const char* aModuleName, ModuleInit aInit, ModuleDeinit aDeinit, ModuleManifest** aDependencies) {
|
|
mInit = aInit;
|
|
mDeinit = aDeinit;
|
|
mDependencies = aDependencies;
|
|
mModuleName = aModuleName;
|
|
}
|
|
|
|
bool ModuleManifest::isInitialized() const {
|
|
return mInitialized;
|
|
}
|
|
|
|
bool ModuleManifest::initialize() {
|
|
|
|
mInitCount++;
|
|
|
|
if (isInitialized()) {
|
|
return true;
|
|
}
|
|
|
|
mInitialized = true;
|
|
|
|
for (auto module = mDependencies; module && *module; module++) {
|
|
mInitialized &= (*module)->initialize();
|
|
}
|
|
|
|
std::cout << "====== Initializing \"" << mModuleName << "\"\n";
|
|
|
|
if (mInit) mInitialized &= mInit(this);
|
|
|
|
if (!mInitialized) {
|
|
std::cout << "Failed to Initialize.\n";
|
|
}
|
|
|
|
return mInitialized;
|
|
}
|
|
|
|
void ModuleManifest::deinitialize() {
|
|
mInitCount--;
|
|
|
|
if (mInitCount > 0) {
|
|
return;
|
|
}
|
|
|
|
if (!isInitialized()) {
|
|
return;
|
|
}
|
|
|
|
if (mDeinit) mDeinit(this);
|
|
mInitialized = false;
|
|
|
|
auto len = 0;
|
|
for (auto module = mDependencies; module && *module; module++) {
|
|
len++;
|
|
}
|
|
|
|
for (auto i = 0; i < len; i++) {
|
|
auto module = mDependencies + (len - i - 1);
|
|
if ((*module)->isInitialized()) {
|
|
(*module)->deinitialize();
|
|
}
|
|
}
|
|
}
|
|
|
|
const char *ModuleManifest::getName() const {
|
|
return mModuleName;
|
|
}
|