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)