X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/85b2cf6a5286a94b5e35c7fc6b17bdf941f56420..be1b46cc784e43cd28c5521bdcde79bd7463fb40:/include/stg/service_conf.h diff --git a/include/stg/service_conf.h b/include/stg/service_conf.h index ce2cff2e..d5661c09 100644 --- a/include/stg/service_conf.h +++ b/include/stg/service_conf.h @@ -1,73 +1,111 @@ -#ifndef SERVICE_CONF_H -#define SERVICE_CONF_H +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ -#include +/* + * Author : Maxim Mamontov + */ -#include "resetable.h" -#include "os_int.h" +#pragma once -struct SERVICE_CONF -{ -SERVICE_CONF() - : name(), comment(), cost(0), payDay(0) -{} -SERVICE_CONF(const std::string & n) - : name(n), comment(), cost(0), payDay(0) -{} -SERVICE_CONF(const std::string & n, double c) - : name(n), comment(), cost(c), payDay(0) -{} -SERVICE_CONF(const std::string & n, double c, unsigned p) - : name(n), comment(), cost(c), payDay(static_cast(p)) -{} -SERVICE_CONF(const std::string & n, double c, - unsigned p, const std::string & com) - : name(n), comment(com), cost(c), payDay(static_cast(p)) -{} - -std::string name; -std::string comment; -double cost; -uint8_t payDay; -}; +#include "splice.h" -struct SERVICE_CONF_RES -{ -SERVICE_CONF_RES() - : name(), comment(), - cost(), payDay() -{} +#include +#include +#include -SERVICE_CONF_RES & operator=(const SERVICE_CONF & conf) +namespace STG { -name = conf.name; -comment = conf.comment; -cost = conf.cost; -payDay = conf.payDay; -return *this; -} -SERVICE_CONF GetData() const +struct ServiceConf { -SERVICE_CONF sc; -sc.name = name.data(); -sc.comment = comment.data(); -sc.cost = cost.data(); -sc.payDay = payDay.data(); -return sc; -} + ServiceConf() + : cost(0), payDay(0) + {} + explicit ServiceConf(const std::string & n) + : name(n), cost(0), payDay(0) + {} + ServiceConf(const std::string & n, double c) + : name(n), cost(c), payDay(0) + {} + ServiceConf(const std::string & n, double c, unsigned p) + : name(n), cost(c), payDay(static_cast(p)) + {} + ServiceConf(const std::string & n, double c, + unsigned p, const std::string & com) + : name(n), comment(com), cost(c), payDay(static_cast(p)) + {} + + ServiceConf(const ServiceConf&) = default; + ServiceConf& operator=(const ServiceConf&) = default; + ServiceConf(ServiceConf&&) = default; + ServiceConf& operator=(ServiceConf&&) = default; + + bool operator==(const ServiceConf& rhs) const noexcept { return name == rhs.name; } -RESETABLE name; -RESETABLE comment; -RESETABLE cost; -RESETABLE payDay; + std::string name; + std::string comment; + double cost; + uint8_t payDay; }; -inline -bool operator==(const SERVICE_CONF & a, const SERVICE_CONF & b) +struct ServiceConfOpt { -return a.name == b.name; -} + ServiceConfOpt() = default; + + explicit ServiceConfOpt(const ServiceConf& rhs) + : name(rhs.name), comment(rhs.comment), + cost(rhs.cost), payDay(rhs.payDay) + {} + + ServiceConfOpt(const ServiceConfOpt&) = default; + ServiceConfOpt& operator=(const ServiceConfOpt&) = default; + ServiceConfOpt(ServiceConfOpt&&) = default; + ServiceConfOpt& operator=(ServiceConfOpt&&) = default; + + ServiceConfOpt& operator=(const ServiceConf& conf) + { + name = conf.name; + comment = conf.comment; + cost = conf.cost; + payDay = conf.payDay; + return *this; + } -#endif //SERVICE_CONF_H + void splice(const ServiceConfOpt& rhs) + { + STG::splice(name, rhs.name); + STG::splice(comment, rhs.comment); + STG::splice(cost, rhs.cost); + STG::splice(payDay, rhs.payDay); + } + ServiceConf get(const ServiceConf& defaultValue) const noexcept + { + ServiceConf res; + res.name = name.value_or(defaultValue.name); + res.comment = comment.value_or(defaultValue.comment); + res.cost = cost.value_or(defaultValue.cost); + res.payDay = payDay.value_or(defaultValue.payDay); + return res; + } + + std::optional name; + std::optional comment; + std::optional cost; + std::optional payDay; +}; + +}