#pragma once #include #include #include "IComplexCommandCreator.h" #include "StringExtensions.h" namespace Incart::Usb { class ComplexCommandFactory { private: std::unordered_map> m_functionCreators; public: ComplexCommandFactory() { } void add(const std::string& name, std::shared_ptr creator) { m_functionCreators[name] = creator; } std::shared_ptr getCreator(const std::string& name) { for (auto it = m_functionCreators.begin(); it != m_functionCreators.end(); it++) { if (Common::StringExtensions::isEqualsInsensitive(name, it->first)) { return it->second; } } return nullptr; } std::shared_ptr create(const std::string& name, std::shared_ptr data) { for (auto it = m_functionCreators.begin(); it != m_functionCreators.end(); it++) { if (Common::StringExtensions::isEqualsInsensitive(name, it->first)) { return it->second->create(data); } } return nullptr; } }; } // namespace Incart::Usb