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
26NEFORCE_BEGIN_NAMESPACE__
27
32
37
45class NEFORCE_API toml_parser {
46private:
53 struct context {
54 toml_table* table;
56 };
57
58 vector<context> context_stack_;
59 bool is_in_array_table_ = false;
60
61 string text_;
62 size_t len_;
63 size_t pos_ = 0;
64 size_t line_ = 1;
65 size_t column_ = 1;
66
68 toml_table* ctb_ = nullptr;
69 vector<string> ctp_;
70
76 void skip_whitespace() noexcept;
77
83 void skip_comment() noexcept;
84
90 void skip_whitespace_and_comments() noexcept;
91
97 void skip_newlines() noexcept;
98
104 void skip_whitespace_no_newline() noexcept;
105
110 char current() const noexcept;
111
117 char peek(size_t offset = 1) const noexcept;
118
123 bool eof() const noexcept;
124
130 void advance() noexcept;
131
140 bool expect(char ch);
141
149 bool match(char ch) noexcept;
150
158 void throw_parse_error(string message) const;
159
169 char32_t parse_unicode_escape(size_t digits);
170
177 unique_ptr<toml_string> parse_string();
178
185 unique_ptr<toml_string> parse_basic_string();
186
193 unique_ptr<toml_string> parse_literal_string();
194
201 unique_ptr<toml_string> parse_multiline_basic_string();
202
209 unique_ptr<toml_string> parse_multiline_literal_string();
210
217 unique_ptr<toml_value> parse_number();
218
224 unique_ptr<toml_integer> parse_integer(int base = 10);
225
230 unique_ptr<toml_boolean> parse_boolean();
231
238 unique_ptr<toml_datetime> parse_datetime();
239
247 unique_ptr<toml_array> parse_array();
248
256 unique_ptr<toml_table> parse_inline_table();
257
264 string parse_key();
265
272 string parse_bare_key();
273
280 string parse_quoted_key();
281
288 vector<string> parse_dotted_key();
289
296 unique_ptr<toml_value> parse_value();
297
304 void parse_key_value();
305
311 void parse_table_header();
312
318 void parse_array_table_header();
319
327 toml_table* get_or_create_table(const vector<string>& path) const;
328
334 toml_table* navigate_to_table(const vector<string>& path) const;
335
342 void set_current_table(const vector<string>& path);
343
344public:
351 explicit toml_parser(string text) noexcept :
352 text_(_NEFORCE move(text)),
353 len_(text_.size()) {
354 root_ = make_unique<toml_table>();
355 ctb_ = root_.get();
356 }
357
366
375};
376 // TomlConfig
378 // ConfigFormat
380
381NEFORCE_END_NAMESPACE__
382#endif // NEFORCE_CORE_FILE_TOML_TOML_PARSER_HPP__
可选值类
文件路径类
unique_ptr< toml_table > parse()
执行解析
toml_parser(string text) noexcept
构造函数
optional< unique_ptr< toml_table > > try_parse()
尝试执行解析
toml表格类
独占智能指针
动态大小数组容器
constexpr void advance(Iterator &i, Distance n)
将迭代器前进指定距离
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
NEFORCE_CONSTEXPR20 unique_ptr< T > make_unique(Args &&... args)
创建unique_ptr
可选值类型
TOML配置格式变量