/* * Author: Patrick-Christopher Mattulat * Company: Lynar Studios * E-Mail: webmaster@lynarstudios.com * Created: 2021-04-24 * Changed: 2021-04-24 * * */ #include #include #include #include #include ls_std::SerializableFactory::SerializableFactory() : ls_std::Class("SerializableFactory") { this->_init(); } bool ls_std::SerializableFactory::addFactory(const std::pair> &_factoryInsertion) { bool hasFactory{}; if (_factoryInsertion.first.empty()) { throw ls_std::IllegalArgumentException{}; } if (_factoryInsertion.second == nullptr) { throw ls_std::NullPointerException{}; } if (!this->_hasFactory(_factoryInsertion.first)) { hasFactory = this->factories.insert(_factoryInsertion).second; } return hasFactory; } std::shared_ptr ls_std::SerializableFactory::build(const std::string &_relatedObjectName) { std::shared_ptr requestedObject{}; if (this->_hasFactory(_relatedObjectName)) { requestedObject = this->factories.at(_relatedObjectName)->build(); } return requestedObject; } bool ls_std::SerializableFactory::clear() { this->factories.clear(); return factories.empty(); } bool ls_std::SerializableFactory::hasFactory(const std::string &_relatedObjectName) { return this->_hasFactory(_relatedObjectName); } bool ls_std::SerializableFactory::removeFactory(const std::string &_relatedObjectName) { bool wasRemoved{}; if (this->_hasFactory(_relatedObjectName)) { this->factories.erase(_relatedObjectName); wasRemoved = !this->_hasFactory(_relatedObjectName); } return wasRemoved; } bool ls_std::SerializableFactory::_hasFactory(const std::string &_relatedObjectName) { return this->factories.find(_relatedObjectName) != this->factories.end(); } void ls_std::SerializableFactory::_init() { this->factories.insert({ls_std::Boolean{}.getClassName(), std::make_shared()}); }