MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
env_parser.hpp
1#ifndef MSTL_CORE_FILE_ENV_ENV_PARSER_HPP__
2#define MSTL_CORE_FILE_ENV_ENV_PARSER_HPP__
4#include "env_value.hpp"
6
7class MSTL_API env_parser {
8private:
9 string env_;
10 size_t len_;
11 size_t pos_ = 0;
12 size_t line_ = 1;
13 size_t column_ = 1;
14
15 unique_ptr<env_document> root_;
16
17 void skip_whitespace() noexcept;
18 void skip_line() noexcept;
19
20 char current() const noexcept;
21 char peek(size_t offset = 1) const noexcept;
22 bool eof() const noexcept;
23 void advance() noexcept;
24
25 bool is_comment_line(const string& line) const noexcept;
26 bool is_blank_line(const string& line) const noexcept;
27 bool parse_variable_line(const string& line, string& name,
28 unique_ptr<env_variable>& variable) const;
29
30 string parse_unquoted_value(const string& line, size_t& pos) const;
31 string parse_single_quoted_value(const string& line, size_t& pos) const;
32 string parse_double_quoted_value(const string& line, size_t& pos) const;
33
34 void parse_line(const string& line) const;
35
36public:
37 explicit env_parser(string env_str) noexcept
38 : env_(_MSTL move(env_str)), len_(env_.size()) {
40 }
41
42 unique_ptr<env_document> parse();
43 optional<unique_ptr<env_document>> try_parse();
44};
45
47#endif // MSTL_CORE_FILE_ENV_ENV_PARSER_HPP__
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
MSTL可选值类型