/* * database.cpp * * Created on: Aug 23, 2016 * Author: gregor */ #include #include "GLTB/reflection/reflection.h" namespace gltb { namespace refl { void Module::registerType(Type *type) { types[type->getName()] = type; } Type *Module::getType(const std::string &name) const { auto iter = types.find(name); if(iter != types.end()) { return iter->second; } return nullptr; } const std::map Module::getTypes() const { return types; } Database *Database::instance = nullptr; Database *Database::getInstance() { if(instance == nullptr) { instance = new Database(); } return instance; } Database::Database() { std::cout << "creating reflection database" << std::endl; } void Database::registerModule(Module *module) { auto moduleTypes = module->getTypes(); std::cout << "registering " << moduleTypes.size() << " types" << std::endl; for(auto iter = moduleTypes.begin(); iter != moduleTypes.end(); ++iter) { Type *type = iter->second; std::cout << "type " << type->getName() << std::endl; types[type->getName()] = type; } modules.insert(module); } bool Database::isModuleRegistered(Module *module) { if(modules.find(module) != modules.end()) { std::cout << "module registered" << std::endl; return true; } return false; } void Database::unregisterModule(Module *module) { auto types = module->getTypes(); for(auto iter = types.begin(); iter != types.end(); ++iter) { types.erase(types.find(iter->first)); } modules.erase(module); } Type *Database::getType(const std::string &name) const { auto iter = types.find(name); if(iter != types.end()) { return iter->second; } return nullptr; } } }