Extra2D/include/module/module_registry.h

98 lines
2.0 KiB
C
Raw Normal View History

#pragma once
#include <module/imodule.h>
#include <string>
#include <unordered_map>
#include <vector>
namespace extra2d {
/**
* @brief -
*
* 线
*
*/
class ModuleRegistry {
public:
ModuleRegistry();
~ModuleRegistry();
// 禁止拷贝
ModuleRegistry(const ModuleRegistry &) = delete;
ModuleRegistry &operator=(const ModuleRegistry &) = delete;
// 允许移动
ModuleRegistry(ModuleRegistry &&) noexcept;
ModuleRegistry &operator=(ModuleRegistry &&) noexcept;
/**
* @brief
* @param module
*/
void registerModule(IModule *module);
/**
* @brief
* @param name
*/
void unregisterModule(const char *name);
/**
* @brief
* @param name
* @return nullptr
*/
IModule *getModule(const char *name) const;
/**
* @brief
* @param name
* @return
*/
bool hasModule(const char *name) const;
/**
* @brief
* @return
*/
std::vector<IModule *> getAllModules() const;
/**
* @brief
* @param type
* @return
*/
std::vector<IModule *> getModulesByType(ModuleType type) const;
/**
* @brief
* @return
*/
bool initAll();
/**
* @brief
*/
void shutdownAll();
/**
* @brief
* @return
*/
size_t getModuleCount() const;
private:
/**
* @brief
*/
void sortModules();
std::vector<IModule *> modules_;
std::unordered_map<std::string, IModule *> moduleMap_;
bool sorted_ = false;
bool inited_ = false;
};
} // namespace extra2d