NexusForce
1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
toml_parser.hpp
浏览该文件的文档.
1
#ifndef NEFORCE_CORE_FILE_TOML_TOML_PARSER_HPP__
2
#define NEFORCE_CORE_FILE_TOML_TOML_PARSER_HPP__
3
23
24
#include "
NeForce/core/file/toml/toml_value.hpp
"
25
#include "
NeForce/core/string/codepoint.hpp
"
26
#include "
NeForce/core/utility/optional.hpp
"
27
NEFORCE_BEGIN_NAMESPACE__
28
33
38
46
class
NEFORCE_API
toml_parser
{
47
private
:
54
struct
context {
55
toml_table
* table;
56
vector<string>
path
;
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
68
unique_ptr<toml_table>
root_;
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
345
public
:
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
366
unique_ptr<toml_table>
parse
();
367
375
optional<unique_ptr<toml_table>
>
try_parse
();
376
};
377
// TomlConfig
379
// ConfigFormat
381
382
NEFORCE_END_NAMESPACE__
383
#endif
// NEFORCE_CORE_FILE_TOML_TOML_PARSER_HPP__
neforce::codepoint
Unicode码点包装类
定义
codepoint.hpp:126
neforce::optional
可选值类
定义
optional.hpp:71
neforce::path
文件路径类
定义
path.hpp:36
neforce::toml_parser::try_parse
optional< unique_ptr< toml_table > > try_parse()
尝试执行解析
neforce::toml_parser::toml_parser
toml_parser(string text)
构造函数
定义
toml_parser.hpp:352
neforce::toml_parser::parse
unique_ptr< toml_table > parse()
执行解析
neforce::toml_table
TOML表格类
定义
toml_value.hpp:670
neforce::unique_ptr
独占智能指针
定义
unique_ptr.hpp:206
neforce::vector
动态大小数组容器
定义
vector.hpp:167
codepoint.hpp
Unicode码点处理类
neforce::move
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
定义
shift.hpp:312
neforce::size
constexpr decltype(auto) size(const Container &cont) noexcept(noexcept(cont.size()))
获取容器的大小
定义
type_erase.hpp:292
neforce::make_unique
constexpr unique_ptr< T > make_unique(Args &&... args)
创建unique_ptr
定义
unique_ptr.hpp:973
optional.hpp
可选值类型
toml_value.hpp
TOML配置格式变量
include
NeForce
core
file
toml
toml_parser.hpp
制作者
1.16.0