1 #include "option_schema.h" 2 #include "string_utils.h" 16 case option_type::boolean_e: params_ = copy_schema<boolean_ini_t>(source.params_);
break;
17 case option_type::enum_e: params_ = copy_schema<enum_ini_t>(source.params_);
break;
18 case option_type::float_e: params_ = copy_schema<float_ini_t>(source.params_);
break;
19 case option_type::signed_e: params_ = copy_schema<signed_ini_t>(source.params_);
break;
20 case option_type::string_e: params_ = copy_schema<string_ini_t>(source.params_);
break;
21 case option_type::unsigned_e: params_ = copy_schema<unsigned_ini_t>(source.params_);
break;
22 case option_type::invalid_e:
38 if (
this != &source) {
40 params_ = std::move(source.params_);
57 return params_->type == option_item::list;
62 return params_->default_value;
67 return params_->requirement == item_requirement::mandatory;
72 return params_->comment;
77 if (params_->type == option_item::single && opt.
is_list()) {
79 }
else if (params_->type == option_item::list && !opt.
is_list()) {
85 parse_option_items(opt);
89 validate_option_items(opt);
92 void option_schema::validate_option_items(
option &opt)
const 96 case option_type::boolean_e:
97 validate_typed_option_items<boolean_ini_t>(opt.
get_list<boolean_ini_t>(), opt.
get_name());
99 case option_type::enum_e:
102 case option_type::float_e:
103 validate_typed_option_items<float_ini_t>(opt.
get_list<float_ini_t>(), opt.
get_name());
105 case option_type::signed_e:
106 validate_typed_option_items<signed_ini_t>(opt.
get_list<signed_ini_t>(), opt.
get_name());
108 case option_type::string_e:
109 validate_typed_option_items<string_ini_t>(opt.
get_list<string_ini_t>(), opt.
get_name());
111 case option_type::unsigned_e:
112 validate_typed_option_items<unsigned_ini_t>(opt.
get_list<unsigned_ini_t>(), opt.
get_name());
114 case option_type::invalid_e:
121 void option_schema::parse_option_items(
option &opt)
const 124 case option_type::boolean_e:
125 opt.
set_list<boolean_ini_t>(parse_typed_option_items<boolean_ini_t>(
128 case option_type::enum_e:
132 case option_type::float_e:
133 opt.
set_list<float_ini_t>(parse_typed_option_items<float_ini_t>(
136 case option_type::signed_e:
137 opt.
set_list<signed_ini_t>(parse_typed_option_items<signed_ini_t>(
140 case option_type::string_e:
143 case option_type::unsigned_e:
144 opt.
set_list<unsigned_ini_t>(parse_typed_option_items<unsigned_ini_t>(
147 case option_type::invalid_e:
158 for (
auto &comment_line : comment_lines) {
159 os <<
";" << comment_line << std::endl;
163 std::string info_line =
is_mandatory() ?
"mandatory" :
"optional";
165 info_line +=
is_list() ?
"list" :
"single";
166 os <<
";<" << info_line <<
">" << std::endl;
float_ini_t parse_string< float_ini_t >(const std::string &value, const std::string &option_name)
signed_ini_t parse_string< signed_ini_t >(const std::string &value, const std::string &option_name)
void validate_option(option &opt) const
const std::string & get_name() const
option_schema & operator=(const option_schema &source)
const std::string & get_comment() const
const std::string & get_name() const
std::vector< ReturnType > get_list() const
void set_list(const std::vector< ValueType > &list)
option_type get_type() const
option_type get_type() const
bool is_mandatory() const
INICPP_API friend std::ostream & operator<<(std::ostream &os, const option_schema &opt_schema)
unsigned_ini_t parse_string< unsigned_ini_t >(const std::string &value, const std::string &option_name)
const std::string & get_default_value() const
std::vector< std::string > split(const std::string &str, char delim)
enum_ini_t parse_string< enum_ini_t >(const std::string &value, const std::string &option_name)
boolean_ini_t parse_string< boolean_ini_t >(const std::string &value, const std::string &option_name)
std::ostream & write_additional_info(std::ostream &os) const