1#ifndef MSTL_CORE_FILE_INI_INI_PARSER_HPP__
2#define MSTL_CORE_FILE_INI_INI_PARSER_HPP__
4#include "ini_value.hpp"
7class MSTL_API ini_parser {
15 unique_ptr<ini_document> root_;
16 ini_section* current_section_ =
nullptr;
18 void skip_whitespace() noexcept;
19 void skip_line() noexcept;
21 char current() const noexcept;
22 char peek(
size_t offset = 1) const noexcept;
23 bool eof() const noexcept;
26 bool is_comment_line(const
string& line) const noexcept;
27 bool is_section_line(const
string& line,
string& section_name) const;
28 bool parse_key_value(const
string& line,
string& key,
string& value) const;
30 void parse_line(const
string& line);
33 explicit ini_parser(
string ini_str) noexcept
36 current_section_ = root_->get_global_section();
39 unique_ptr<ini_document> parse();
40 optional<unique_ptr<ini_document>> try_parse();
constexpr void advance(Iterator &i, Distance n)
将迭代器前进指定距离
#define _MSTL
全局命名空间MSTL前缀
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result)
移动范围元素
MSTL_NODISCARD MSTL_ALWAYS_INLINE constexpr decltype(auto) size(const Container &cont) noexcept(noexcept(cont.size()))
获取容器的大小
MSTL_CONSTEXPR20 unique_ptr< T > make_unique(Args &&... args)
创建unique_ptr