1 #ifndef INICPP_SECTION_H 2 #define INICPP_SECTION_H 11 #include "exception.h" 13 #include "section_schema.h" 30 using options_vector = std::vector<std::shared_ptr<option>>;
31 using options_map = std::map<std::string, std::shared_ptr<option>>;
32 using options_map_pair = std::pair<std::string, std::shared_ptr<option>>;
35 options_vector options_;
37 options_map options_map_;
75 section(
const std::string &name);
81 const std::string &get_name()
const;
89 template <
typename ValueType>
void add_option(
const std::string &option_name, ValueType value)
91 auto add_it = options_map_.find(option_name);
92 if (add_it == options_map_.end()) {
93 std::shared_ptr<option> opt = std::make_shared<option>(option_name);
94 opt->set<ValueType>(value);
95 options_.push_back(opt);
96 options_map_.insert(options_map_pair(opt->get_name(), opt));
106 void add_option(
const option &opt);
112 void remove_option(
const std::string &option_name);
125 option &operator[](
size_t index);
132 const option &operator[](
size_t index)
const;
139 option &operator[](
const std::string &option_name);
146 const option &operator[](
const std::string &option_name)
const;
152 bool contains(
const std::string &option_name)
const;
160 void validate(
const section_schema §_schema, schema_mode mode);
167 bool operator==(
const section &other)
const;
173 bool operator!=(
const section &other)
const;
212 INICPP_API
friend std::ostream &operator<<(std::ostream &os,
const section §);
215 INICPP_API std::ostream &operator<<(std::ostream &os,
const section §);
222 template <
typename Element>
class section_iterator :
public std::iterator<std::random_access_iterator_tag, Element>
231 using typename std::iterator<std::random_access_iterator_tag, Element>::reference;
232 using typename std::iterator<std::random_access_iterator_tag, Element>::pointer;
299 return &container_ == &second.container_ && position_ == second.position_;
308 return !(*
this == second);
317 return *container_.options_.at(position_);
326 return &(operator*());
bool operator==(const section_iterator &second) const
bool operator!=(const section_iterator &second) const
void add_option(const std::string &option_name, ValueType value)
section_iterator & operator++()
section_iterator(section &source)
section_iterator(section &source, size_t position)
section_iterator operator++(int)