inicpp
C++ parser of INI files with schema validation.
section_schema.h
1 #ifndef INICPP_SECTION_SCHEMA_H
2 #define INICPP_SECTION_SCHEMA_H
3 
4 #include <iostream>
5 #include <vector>
6 
7 #include "dll.h"
8 #include "exception.h"
9 #include "option_schema.h"
10 #include "section.h"
11 #include "types.h"
12 
13 
14 namespace inicpp
15 {
21  std::string name;
23  item_requirement requirement = item_requirement::mandatory;
25  std::string comment;
26  };
27 
28 
30  class section;
31 
32 
37  class INICPP_API section_schema
38  {
39  private:
40  using opt_schema_vector = std::vector<std::shared_ptr<option_schema>>;
41  using opt_schema_map = std::map<std::string, std::shared_ptr<option_schema>>;
42  using opt_schema_map_pair = std::pair<std::string, std::shared_ptr<option_schema>>;
43 
45  std::string name_;
47  item_requirement requirement_;
49  std::string comment_;
50 
52  opt_schema_vector options_;
54  opt_schema_map options_map_;
55 
56  public:
60  section_schema() = delete;
64  section_schema(const section_schema &source);
68  section_schema &operator=(const section_schema &source);
76  section_schema &operator=(section_schema &&source);
77 
82  section_schema(const section_schema_params &arguments);
83 
88  const std::string &get_name() const;
93  bool is_mandatory() const;
98  const std::string &get_comment() const;
99 
105  void add_option(const option_schema &opt);
111  template <typename ArgType> void add_option(const option_schema_params<ArgType> &arguments)
112  {
113  auto add_it = options_map_.find(arguments.name);
114  if (add_it == options_map_.end()) {
115  std::shared_ptr<option_schema> add = std::make_shared<option_schema>(arguments);
116  options_.push_back(add);
117  options_map_.insert(opt_schema_map_pair(add->get_name(), add));
118  } else {
119  throw ambiguity_exception(arguments.name);
120  }
121  }
127  void remove_option(const std::string &name);
128 
133  size_t size() const;
140  option_schema &operator[](size_t index);
147  const option_schema &operator[](size_t index) const;
154  option_schema &operator[](const std::string &option_name);
161  const option_schema &operator[](const std::string &option_name) const;
167  bool contains(const std::string &option_name) const;
168 
175  void validate_section(section &sect, schema_mode mode) const;
176 
183  std::ostream &write_additional_info(std::ostream &os) const;
190  std::ostream &write_section_name(std::ostream &os) const;
197  INICPP_API friend std::ostream &operator<<(std::ostream &os, const section_schema &sect_schema);
198  };
199 
200  INICPP_API std::ostream &operator<<(std::ostream &os, const section_schema &sect_schema);
201 }
202 
203 #endif
void add_option(const option_schema_params< ArgType > &arguments)
Definition: config.h:15