NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
toml_parser.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_FILE_TOML_TOML_PARSER_HPP__
2#define NEFORCE_CORE_FILE_TOML_TOML_PARSER_HPP__
3
23
27NEFORCE_BEGIN_NAMESPACE__
28
33
38
46class NEFORCE_API toml_parser {
47private:
54 struct context {
55 toml_table* table;
57 };
58
59 vector<context> context_stack_;
60 bool is_in_array_table_ = false;
61
62 string text_;
63 size_t len_;
64 size_t pos_ = 0;
65 size_t line_ = 1;
66 size_t column_ = 1;
67
69 toml_table* ctb_ = nullptr;
70 vector<string> ctp_;
71
77 void skip_whitespace() noexcept;
78
84 void skip_comment() noexcept;
85
91 void skip_whitespace_and_comments() noexcept;
92
98 void skip_newlines() noexcept;
99
105 void skip_whitespace_no_newline() noexcept;
106
111 NEFORCE_NODISCARD char current() const noexcept;
112
118 NEFORCE_NODISCARD char peek(size_t offset = 1) const noexcept;
119
124 NEFORCE_NODISCARD bool eof() const noexcept;
125
131 void advance() noexcept;
132
141 bool expect(char ch);
142
150 bool match(char ch) noexcept;
151
159 void throw_parse_error(string message) const;
160
170 codepoint parse_unicode_escape(size_t digits);
171
178 unique_ptr<toml_string> parse_string();
179
186 unique_ptr<toml_string> parse_basic_string();
187
194 unique_ptr<toml_string> parse_literal_string();
195
202 unique_ptr<toml_string> parse_multiline_basic_string();
203
210 unique_ptr<toml_string> parse_multiline_literal_string();
211
218 unique_ptr<toml_value> parse_number();
219
225 unique_ptr<toml_integer> parse_integer(int base = 10);
226
231 unique_ptr<toml_boolean> parse_boolean();
232
239 unique_ptr<toml_datetime> parse_datetime();
240
248 unique_ptr<toml_array> parse_array();
249
257 unique_ptr<toml_table> parse_inline_table();
258
265 string parse_key();
266
273 string parse_bare_key();
274
281 string parse_quoted_key();
282
289 vector<string> parse_dotted_key();
290
297 unique_ptr<toml_value> parse_value();
298
305 void parse_key_value();
306
312 void parse_table_header();
313
319 void parse_array_table_header();
320
328 NEFORCE_NODISCARD toml_table* get_or_create_table(const vector<string>& path) const;
329
335 NEFORCE_NODISCARD toml_table* navigate_to_table(const vector<string>& path) const;
336
343 void set_current_table(const vector<string>& path);
344
345public:
352 explicit toml_parser(string text) :
353 text_(_NEFORCE move(text)),
354 len_(text_.size()) {
355 root_ = make_unique<toml_table>();
356 ctb_ = root_.get();
357 }
358
367
376};
377 // TomlConfig
379 // ConfigFormat
381
382NEFORCE_END_NAMESPACE__
383#endif // NEFORCE_CORE_FILE_TOML_TOML_PARSER_HPP__
Unicode码点包装类
可选值类
文件路径类
unique_ptr< toml_table > parse()
执行解析
toml_parser(string text)
构造函数
optional< unique_ptr< toml_table > > try_parse()
尝试执行解析
TOML表格类
独占智能指针
动态大小数组容器
Unicode码点处理类
constexpr void advance(Iterator &i, Distance n)
将迭代器前进指定距离
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
constexpr decltype(auto) size(const Container &cont) noexcept(noexcept(cont.size()))
获取容器的大小
constexpr unique_ptr< T > make_unique(Args &&... args)
创建unique_ptr
可选值类型
TOML配置格式变量