#pragma once #include #include #include #include #include #include #define REGISTER_MODULE(CLASS) registerModuleGenerator(#CLASS); #define REGISTER_PROCESSOR(CLASS) registerProcessorGenerator(#CLASS); #define REGISTER_OPTIMIZER(CLASS) registerOptimizerGenerator(#CLASS); namespace mdd { class Registration { private: std::map> _modules; std::map> _processors; std::map> _optimizers; //std::mutex _mutex; public: template void registerModuleGenerator(const std::string& name) { auto generator = std::make_shared>(); if (generator != nullptr) { //_mutex.lock(); _modules[name] = generator; //_mutex.unlock(); } } template void registerProcessorGenerator(const std::string& name) { auto generator = std::make_shared>(); if (generator != nullptr) { //_mutex.lock(); _processors[name] = generator; //_mutex.unlock(); } } template void registerOptimizerGenerator(const std::string& name) { auto generator = std::make_shared>(); if (generator != nullptr) { //_mutex.lock(); _optimizers[name] = generator; //_mutex.unlock(); } } Registration(); IModule::Ptr generateModule(const std::string& name); std::vector getModules(); IProcessor::Ptr generateProcessor(const std::string& name); std::vector getProcessors(); IOptimizer::Ptr generateOptimizer(const std::string& name); std::vector getOptimizers(); }; }