#pragma once #include "AbstractConfiger.h" #include #include #include namespace asst { struct TaskInfo; class TaskData : public AbstractConfiger { public: TaskData(const TaskData&) = delete; TaskData(TaskData&&) = delete; virtual ~TaskData() override = default; static TaskData& get_instance() noexcept { static TaskData unique_instance; return unique_instance; } const std::unordered_set& get_templ_required() const noexcept; template requires std::derived_from && !std::same_as // Parameter must be a TaskInfo and not same as TaskInfo std::shared_ptr get(const std::string& name) { auto it = m_all_tasks_info.find(name); if (it == m_all_tasks_info.cend()) { return nullptr; } return std::dynamic_pointer_cast(it->second); } template requires std::same_as // Parameter must be a TaskInfo std::shared_ptr get(const std::string& name) { auto it = m_all_tasks_info.find(name); if (it == m_all_tasks_info.cend()) { return nullptr; } return it->second; } protected: TaskData() = default; virtual bool parse(const json::value& json) override; std::unordered_map> m_all_tasks_info; std::unordered_set m_templ_required; }; static auto& Task = TaskData::get_instance(); }