X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/9701b7ab4dc4cd709ad4dcaa750fc0021f15e231..11c19b3afd4aa6a215d95b34de23213e113226d9:/include/stg/service_conf.h diff --git a/include/stg/service_conf.h b/include/stg/service_conf.h index 6c958c41..d5661c09 100644 --- a/include/stg/service_conf.h +++ b/include/stg/service_conf.h @@ -1,13 +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 + */ -struct SERVICE_CONF +/* + * Author : Maxim Mamontov + */ + +#pragma once + +#include "splice.h" + +#include +#include +#include + +namespace STG { -string name; -string comment; -double cost; -int payDay; + +struct ServiceConf +{ + 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; } + + std::string name; + std::string comment; + double cost; + uint8_t payDay; }; -#endif //SERVICE_CONF_H +struct ServiceConfOpt +{ + 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; + } + + 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; +}; +}