Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
畅游知识海洋
json
提交
a6b02828
J
json
项目概览
畅游知识海洋
/
json
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
json
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a6b02828
编写于
1月 20, 2017
作者:
T
Théo DELRIEU
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
move conjunction/disjunction to the top of detail
上级
d566bb81
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
898 addition
and
420 deletion
+898
-420
src/json.hpp
src/json.hpp
+879
-401
src/json.hpp.re2c
src/json.hpp.re2c
+19
-19
未找到文件。
src/json.hpp
浏览文件 @
a6b02828
...
...
@@ -168,6 +168,25 @@ using is_unscoped_enum =
namespace
detail
{
// Implementation of 2 C++17 constructs: conjunction, negation.
// This is needed to avoid evaluating all the traits in a condition
//
// For example: not std::is_same<void, T>::value and has_value_type<T>::value
// will not compile when T = void (on MSVC at least)
// Whereas conjunction<negation<std::is_same<void, T>>, has_value_type<T>>::value
// will stop evaluating if negation<...>::value == false
//
// Please note that those constructs must be used with caution, since symbols can
// become very long quickly (which can slow down compilation and cause MSVC internal compiler errors)
// Only use it when you have too (see example ahead)
template
<
class
...
>
struct
conjunction
:
std
::
true_type
{};
template
<
class
B1
>
struct
conjunction
<
B1
>
:
B1
{};
template
<
class
B1
,
class
...
Bn
>
struct
conjunction
<
B1
,
Bn
...
>
:
std
::
conditional
<
bool
(
B1
::
value
),
conjunction
<
Bn
...
>
,
B1
>::
type
{};
template
<
class
B
>
struct
negation
:
std
::
integral_constant
<
bool
,
!
B
::
value
>
{};
template
<
typename
Json
>
std
::
string
type_name
(
const
Json
&
j
)
{
switch
(
j
.
m_type
)
...
...
@@ -317,25 +336,6 @@ struct external_constructor<value_t::object>
}
};
// Implementation of 2 C++17 constructs: conjunction, negation.
// This is needed to avoid evaluating all the traits in a condition
//
// For example: not std::is_same<void, T>::value and has_value_type<T>::value
// will not compile when T = void (on MSVC at least)
// Whereas conjunction<negation<std::is_same<void, T>>, has_value_type<T>>::value
// will stop evaluating if negation<...>::value == false
//
// Please note that those constructs must be used with caution, since symbols can
// become very long quickly (which can slow down compilation and cause MSVC internal compiler errors)
// Only use it when you have too (see example ahead)
template
<
class
...
>
struct
conjunction
:
std
::
true_type
{};
template
<
class
B1
>
struct
conjunction
<
B1
>
:
B1
{};
template
<
class
B1
,
class
...
Bn
>
struct
conjunction
<
B1
,
Bn
...
>
:
std
::
conditional
<
bool
(
B1
::
value
),
conjunction
<
Bn
...
>
,
B1
>::
type
{};
template
<
class
B
>
struct
negation
:
std
::
integral_constant
<
bool
,
!
B
::
value
>
{};
/*!
@brief Helper to determine whether there's a key_type for T.
...
...
@@ -9468,437 +9468,915 @@ class basic_json
m_start
=
m_cursor
;
assert
(
m_start
!=
nullptr
);
{
lexer_char_t
yych
;
unsigned
int
yyaccept
=
0
;
static
const
unsigned
char
yybm
[]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
32
,
32
,
0
,
0
,
32
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
160
,
128
,
0
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
192
,
192
,
192
,
192
,
192
,
192
,
192
,
192
,
192
,
192
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
0
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
};
if
((
m_limit
-
m_cursor
)
<
5
)
fill_line_buffer
(
5
);
// LCOV_EXCL_LINE
yych
=
*
m_cursor
;
if
(
yybm
[
0
+
yych
]
&
32
)
{
goto
basic_json_parser_6
;
}
if
(
yych
<=
'['
)
{
if
(
yych
<=
'-'
)
{
if
(
yych
<=
'"'
)
{
if
(
yych
<=
0x00
)
goto
basic_json_parser_2
;
if
(
yych
<=
'!'
)
goto
basic_json_parser_4
;
goto
basic_json_parser_9
;
}
else
{
if
(
yych
<=
'+'
)
goto
basic_json_parser_4
;
if
(
yych
<=
','
)
goto
basic_json_parser_10
;
goto
basic_json_parser_12
;
}
}
else
{
if
(
yych
<=
'9'
)
{
if
(
yych
<=
'/'
)
goto
basic_json_parser_4
;
if
(
yych
<=
'0'
)
goto
basic_json_parser_13
;
goto
basic_json_parser_15
;
}
else
{
if
(
yych
<=
':'
)
goto
basic_json_parser_17
;
if
(
yych
<=
'Z'
)
goto
basic_json_parser_4
;
goto
basic_json_parser_19
;
}
}
}
else
{
if
(
yych
<=
'n'
)
{
if
(
yych
<=
'e'
)
{
if
(
yych
==
']'
)
goto
basic_json_parser_21
;
goto
basic_json_parser_4
;
}
else
{
if
(
yych
<=
'f'
)
goto
basic_json_parser_23
;
if
(
yych
<=
'm'
)
goto
basic_json_parser_4
;
goto
basic_json_parser_24
;
}
}
else
{
if
(
yych
<=
'z'
)
{
if
(
yych
==
't'
)
goto
basic_json_parser_25
;
goto
basic_json_parser_4
;
}
else
{
if
(
yych
<=
'{'
)
goto
basic_json_parser_26
;
if
(
yych
==
'}'
)
goto
basic_json_parser_28
;
goto
basic_json_parser_4
;
}
}
}
{
lexer_char_t
yych
;
unsigned
int
yyaccept
=
0
;
static
const
unsigned
char
yybm
[]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
32
,
32
,
0
,
0
,
32
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
160
,
128
,
0
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
192
,
192
,
192
,
192
,
192
,
192
,
192
,
192
,
192
,
192
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
0
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
128
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
};
if
((
m_limit
-
m_cursor
)
<
5
)
{
fill_line_buffer
(
5
);
// LCOV_EXCL_LINE
}
yych
=
*
m_cursor
;
if
(
yybm
[
0
+
yych
]
&
32
)
{
goto
basic_json_parser_6
;
}
if
(
yych
<=
'['
)
{
if
(
yych
<=
'-'
)
{
if
(
yych
<=
'"'
)
{
if
(
yych
<=
0x00
)
{
goto
basic_json_parser_2
;
}
if
(
yych
<=
'!'
)
{
goto
basic_json_parser_4
;
}
goto
basic_json_parser_9
;
}
else
{
if
(
yych
<=
'+'
)
{
goto
basic_json_parser_4
;
}
if
(
yych
<=
','
)
{
goto
basic_json_parser_10
;
}
goto
basic_json_parser_12
;
}
}
else
{
if
(
yych
<=
'9'
)
{
if
(
yych
<=
'/'
)
{
goto
basic_json_parser_4
;
}
if
(
yych
<=
'0'
)
{
goto
basic_json_parser_13
;
}
goto
basic_json_parser_15
;
}
else
{
if
(
yych
<=
':'
)
{
goto
basic_json_parser_17
;
}
if
(
yych
<=
'Z'
)
{
goto
basic_json_parser_4
;
}
goto
basic_json_parser_19
;
}
}
}
else
{
if
(
yych
<=
'n'
)
{
if
(
yych
<=
'e'
)
{
if
(
yych
==
']'
)
{
goto
basic_json_parser_21
;
}
goto
basic_json_parser_4
;
}
else
{
if
(
yych
<=
'f'
)
{
goto
basic_json_parser_23
;
}
if
(
yych
<=
'm'
)
{
goto
basic_json_parser_4
;
}
goto
basic_json_parser_24
;
}
}
else
{
if
(
yych
<=
'z'
)
{
if
(
yych
==
't'
)
{
goto
basic_json_parser_25
;
}
goto
basic_json_parser_4
;
}
else
{
if
(
yych
<=
'{'
)
{
goto
basic_json_parser_26
;
}
if
(
yych
==
'}'
)
{
goto
basic_json_parser_28
;
}
goto
basic_json_parser_4
;
}
}
}
basic_json_parser_2:
++
m_cursor
;
{
last_token_type
=
token_type
::
end_of_input
;
break
;
}
++
m_cursor
;
{
last_token_type
=
token_type
::
end_of_input
;
break
;
}
basic_json_parser_4:
++
m_cursor
;
++
m_cursor
;
basic_json_parser_5:
{
last_token_type
=
token_type
::
parse_error
;
break
;
}
{
last_token_type
=
token_type
::
parse_error
;
break
;
}
basic_json_parser_6:
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
yych
=
*
m_cursor
;
if
(
yybm
[
0
+
yych
]
&
32
)
{
goto
basic_json_parser_6
;
}
{
continue
;
}
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
{
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
}
yych
=
*
m_cursor
;
if
(
yybm
[
0
+
yych
]
&
32
)
{
goto
basic_json_parser_6
;
}
{
continue
;
}
basic_json_parser_9:
yyaccept
=
0
;
yych
=
*
(
m_marker
=
++
m_cursor
);
if
(
yych
<=
0x1F
)
goto
basic_json_parser_5
;
if
(
yych
<=
0x7F
)
goto
basic_json_parser_31
;
if
(
yych
<=
0xC1
)
goto
basic_json_parser_5
;
if
(
yych
<=
0xF4
)
goto
basic_json_parser_31
;
goto
basic_json_parser_5
;
yyaccept
=
0
;
yych
=
*
(
m_marker
=
++
m_cursor
);
if
(
yych
<=
0x1F
)
{
goto
basic_json_parser_5
;
}
if
(
yych
<=
0x7F
)
{
goto
basic_json_parser_31
;
}
if
(
yych
<=
0xC1
)
{
goto
basic_json_parser_5
;
}
if
(
yych
<=
0xF4
)
{
goto
basic_json_parser_31
;
}
goto
basic_json_parser_5
;
basic_json_parser_10:
++
m_cursor
;
{
last_token_type
=
token_type
::
value_separator
;
break
;
}
++
m_cursor
;
{
last_token_type
=
token_type
::
value_separator
;
break
;
}
basic_json_parser_12:
yych
=
*++
m_cursor
;
if
(
yych
<=
'/'
)
goto
basic_json_parser_5
;
if
(
yych
<=
'0'
)
goto
basic_json_parser_13
;
if
(
yych
<=
'9'
)
goto
basic_json_parser_15
;
goto
basic_json_parser_5
;
yych
=
*++
m_cursor
;
if
(
yych
<=
'/'
)
{
goto
basic_json_parser_5
;
}
if
(
yych
<=
'0'
)
{
goto
basic_json_parser_13
;
}
if
(
yych
<=
'9'
)
{
goto
basic_json_parser_15
;
}
goto
basic_json_parser_5
;
basic_json_parser_13:
yyaccept
=
1
;
yych
=
*
(
m_marker
=
++
m_cursor
);
if
(
yych
<=
'D'
)
{
if
(
yych
==
'.'
)
goto
basic_json_parser_43
;
}
else
{
if
(
yych
<=
'E'
)
goto
basic_json_parser_44
;
if
(
yych
==
'e'
)
goto
basic_json_parser_44
;
}
yyaccept
=
1
;
yych
=
*
(
m_marker
=
++
m_cursor
);
if
(
yych
<=
'D'
)
{
if
(
yych
==
'.'
)
{
goto
basic_json_parser_43
;
}
}
else
{
if
(
yych
<=
'E'
)
{
goto
basic_json_parser_44
;
}
if
(
yych
==
'e'
)
{
goto
basic_json_parser_44
;
}
}
basic_json_parser_14:
{
last_token_type
=
token_type
::
value_number
;
break
;
}
{
last_token_type
=
token_type
::
value_number
;
break
;
}
basic_json_parser_15:
yyaccept
=
1
;
m_marker
=
++
m_cursor
;
if
((
m_limit
-
m_cursor
)
<
3
)
fill_line_buffer
(
3
);
// LCOV_EXCL_LINE
yych
=
*
m_cursor
;
if
(
yybm
[
0
+
yych
]
&
64
)
{
goto
basic_json_parser_15
;
}
if
(
yych
<=
'D'
)
{
if
(
yych
==
'.'
)
goto
basic_json_parser_43
;
goto
basic_json_parser_14
;
}
else
{
if
(
yych
<=
'E'
)
goto
basic_json_parser_44
;
if
(
yych
==
'e'
)
goto
basic_json_parser_44
;
goto
basic_json_parser_14
;
}
yyaccept
=
1
;
m_marker
=
++
m_cursor
;
if
((
m_limit
-
m_cursor
)
<
3
)
{
fill_line_buffer
(
3
);
// LCOV_EXCL_LINE
}
yych
=
*
m_cursor
;
if
(
yybm
[
0
+
yych
]
&
64
)
{
goto
basic_json_parser_15
;
}
if
(
yych
<=
'D'
)
{
if
(
yych
==
'.'
)
{
goto
basic_json_parser_43
;
}
goto
basic_json_parser_14
;
}
else
{
if
(
yych
<=
'E'
)
{
goto
basic_json_parser_44
;
}
if
(
yych
==
'e'
)
{
goto
basic_json_parser_44
;
}
goto
basic_json_parser_14
;
}
basic_json_parser_17:
++
m_cursor
;
{
last_token_type
=
token_type
::
name_separator
;
break
;
}
++
m_cursor
;
{
last_token_type
=
token_type
::
name_separator
;
break
;
}
basic_json_parser_19:
++
m_cursor
;
{
last_token_type
=
token_type
::
begin_array
;
break
;
}
++
m_cursor
;
{
last_token_type
=
token_type
::
begin_array
;
break
;
}
basic_json_parser_21:
++
m_cursor
;
{
last_token_type
=
token_type
::
end_array
;
break
;
}
++
m_cursor
;
{
last_token_type
=
token_type
::
end_array
;
break
;
}
basic_json_parser_23:
yyaccept
=
0
;
yych
=
*
(
m_marker
=
++
m_cursor
);
if
(
yych
==
'a'
)
goto
basic_json_parser_45
;
goto
basic_json_parser_5
;
yyaccept
=
0
;
yych
=
*
(
m_marker
=
++
m_cursor
);
if
(
yych
==
'a'
)
{
goto
basic_json_parser_45
;
}
goto
basic_json_parser_5
;
basic_json_parser_24:
yyaccept
=
0
;
yych
=
*
(
m_marker
=
++
m_cursor
);
if
(
yych
==
'u'
)
goto
basic_json_parser_46
;
goto
basic_json_parser_5
;
yyaccept
=
0
;
yych
=
*
(
m_marker
=
++
m_cursor
);
if
(
yych
==
'u'
)
{
goto
basic_json_parser_46
;
}
goto
basic_json_parser_5
;
basic_json_parser_25:
yyaccept
=
0
;
yych
=
*
(
m_marker
=
++
m_cursor
);
if
(
yych
==
'r'
)
goto
basic_json_parser_47
;
goto
basic_json_parser_5
;
yyaccept
=
0
;
yych
=
*
(
m_marker
=
++
m_cursor
);
if
(
yych
==
'r'
)
{
goto
basic_json_parser_47
;
}
goto
basic_json_parser_5
;
basic_json_parser_26:
++
m_cursor
;
{
last_token_type
=
token_type
::
begin_object
;
break
;
}
++
m_cursor
;
{
last_token_type
=
token_type
::
begin_object
;
break
;
}
basic_json_parser_28:
++
m_cursor
;
{
last_token_type
=
token_type
::
end_object
;
break
;
}
++
m_cursor
;
{
last_token_type
=
token_type
::
end_object
;
break
;
}
basic_json_parser_30:
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
yych
=
*
m_cursor
;
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
{
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
}
yych
=
*
m_cursor
;
basic_json_parser_31:
if
(
yybm
[
0
+
yych
]
&
128
)
{
goto
basic_json_parser_30
;
}
if
(
yych
<=
0xE0
)
{
if
(
yych
<=
'\\'
)
{
if
(
yych
<=
0x1F
)
goto
basic_json_parser_32
;
if
(
yych
<=
'"'
)
goto
basic_json_parser_33
;
goto
basic_json_parser_35
;
}
else
{
if
(
yych
<=
0xC1
)
goto
basic_json_parser_32
;
if
(
yych
<=
0xDF
)
goto
basic_json_parser_36
;
goto
basic_json_parser_37
;
}
}
else
{
if
(
yych
<=
0xEF
)
{
if
(
yych
==
0xED
)
goto
basic_json_parser_39
;
goto
basic_json_parser_38
;
}
else
{
if
(
yych
<=
0xF0
)
goto
basic_json_parser_40
;
if
(
yych
<=
0xF3
)
goto
basic_json_parser_41
;
if
(
yych
<=
0xF4
)
goto
basic_json_parser_42
;
}
}
if
(
yybm
[
0
+
yych
]
&
128
)
{
goto
basic_json_parser_30
;
}
if
(
yych
<=
0xE0
)
{
if
(
yych
<=
'\\'
)
{
if
(
yych
<=
0x1F
)
{
goto
basic_json_parser_32
;
}
if
(
yych
<=
'"'
)
{
goto
basic_json_parser_33
;
}
goto
basic_json_parser_35
;
}
else
{
if
(
yych
<=
0xC1
)
{
goto
basic_json_parser_32
;
}
if
(
yych
<=
0xDF
)
{
goto
basic_json_parser_36
;
}
goto
basic_json_parser_37
;
}
}
else
{
if
(
yych
<=
0xEF
)
{
if
(
yych
==
0xED
)
{
goto
basic_json_parser_39
;
}
goto
basic_json_parser_38
;
}
else
{
if
(
yych
<=
0xF0
)
{
goto
basic_json_parser_40
;
}
if
(
yych
<=
0xF3
)
{
goto
basic_json_parser_41
;
}
if
(
yych
<=
0xF4
)
{
goto
basic_json_parser_42
;
}
}
}
basic_json_parser_32:
m_cursor
=
m_marker
;
if
(
yyaccept
==
0
)
{
goto
basic_json_parser_5
;
}
else
{
goto
basic_json_parser_14
;
}
m_cursor
=
m_marker
;
if
(
yyaccept
==
0
)
{
goto
basic_json_parser_5
;
}
else
{
goto
basic_json_parser_14
;
}
basic_json_parser_33:
++
m_cursor
;
{
last_token_type
=
token_type
::
value_string
;
break
;
}
++
m_cursor
;
{
last_token_type
=
token_type
::
value_string
;
break
;
}
basic_json_parser_35:
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
yych
=
*
m_cursor
;
if
(
yych
<=
'e'
)
{
if
(
yych
<=
'/'
)
{
if
(
yych
==
'"'
)
goto
basic_json_parser_30
;
if
(
yych
<=
'.'
)
goto
basic_json_parser_32
;
goto
basic_json_parser_30
;
}
else
{
if
(
yych
<=
'\\'
)
{
if
(
yych
<=
'['
)
goto
basic_json_parser_32
;
goto
basic_json_parser_30
;
}
else
{
if
(
yych
==
'b'
)
goto
basic_json_parser_30
;
goto
basic_json_parser_32
;
}
}
}
else
{
if
(
yych
<=
'q'
)
{
if
(
yych
<=
'f'
)
goto
basic_json_parser_30
;
if
(
yych
==
'n'
)
goto
basic_json_parser_30
;
goto
basic_json_parser_32
;
}
else
{
if
(
yych
<=
's'
)
{
if
(
yych
<=
'r'
)
goto
basic_json_parser_30
;
goto
basic_json_parser_32
;
}
else
{
if
(
yych
<=
't'
)
goto
basic_json_parser_30
;
if
(
yych
<=
'u'
)
goto
basic_json_parser_48
;
goto
basic_json_parser_32
;
}
}
}
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
{
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
}
yych
=
*
m_cursor
;
if
(
yych
<=
'e'
)
{
if
(
yych
<=
'/'
)
{
if
(
yych
==
'"'
)
{
goto
basic_json_parser_30
;
}
if
(
yych
<=
'.'
)
{
goto
basic_json_parser_32
;
}
goto
basic_json_parser_30
;
}
else
{
if
(
yych
<=
'\\'
)
{
if
(
yych
<=
'['
)
{
goto
basic_json_parser_32
;
}
goto
basic_json_parser_30
;
}
else
{
if
(
yych
==
'b'
)
{
goto
basic_json_parser_30
;
}
goto
basic_json_parser_32
;
}
}
}
else
{
if
(
yych
<=
'q'
)
{
if
(
yych
<=
'f'
)
{
goto
basic_json_parser_30
;
}
if
(
yych
==
'n'
)
{
goto
basic_json_parser_30
;
}
goto
basic_json_parser_32
;
}
else
{
if
(
yych
<=
's'
)
{
if
(
yych
<=
'r'
)
{
goto
basic_json_parser_30
;
}
goto
basic_json_parser_32
;
}
else
{
if
(
yych
<=
't'
)
{
goto
basic_json_parser_30
;
}
if
(
yych
<=
'u'
)
{
goto
basic_json_parser_48
;
}
goto
basic_json_parser_32
;
}
}
}
basic_json_parser_36:
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
yych
=
*
m_cursor
;
if
(
yych
<=
0x7F
)
goto
basic_json_parser_32
;
if
(
yych
<=
0xBF
)
goto
basic_json_parser_30
;
goto
basic_json_parser_32
;
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
{
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
}
yych
=
*
m_cursor
;
if
(
yych
<=
0x7F
)
{
goto
basic_json_parser_32
;
}
if
(
yych
<=
0xBF
)
{
goto
basic_json_parser_30
;
}
goto
basic_json_parser_32
;
basic_json_parser_37:
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
yych
=
*
m_cursor
;
if
(
yych
<=
0x9F
)
goto
basic_json_parser_32
;
if
(
yych
<=
0xBF
)
goto
basic_json_parser_36
;
goto
basic_json_parser_32
;
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
{
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
}
yych
=
*
m_cursor
;
if
(
yych
<=
0x9F
)
{
goto
basic_json_parser_32
;
}
if
(
yych
<=
0xBF
)
{
goto
basic_json_parser_36
;
}
goto
basic_json_parser_32
;
basic_json_parser_38:
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
yych
=
*
m_cursor
;
if
(
yych
<=
0x7F
)
goto
basic_json_parser_32
;
if
(
yych
<=
0xBF
)
goto
basic_json_parser_36
;
goto
basic_json_parser_32
;
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
{
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
}
yych
=
*
m_cursor
;
if
(
yych
<=
0x7F
)
{
goto
basic_json_parser_32
;
}
if
(
yych
<=
0xBF
)
{
goto
basic_json_parser_36
;
}
goto
basic_json_parser_32
;
basic_json_parser_39:
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
yych
=
*
m_cursor
;
if
(
yych
<=
0x7F
)
goto
basic_json_parser_32
;
if
(
yych
<=
0x9F
)
goto
basic_json_parser_36
;
goto
basic_json_parser_32
;
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
{
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
}
yych
=
*
m_cursor
;
if
(
yych
<=
0x7F
)
{
goto
basic_json_parser_32
;
}
if
(
yych
<=
0x9F
)
{
goto
basic_json_parser_36
;
}
goto
basic_json_parser_32
;
basic_json_parser_40:
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
yych
=
*
m_cursor
;
if
(
yych
<=
0x8F
)
goto
basic_json_parser_32
;
if
(
yych
<=
0xBF
)
goto
basic_json_parser_38
;
goto
basic_json_parser_32
;
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
{
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
}
yych
=
*
m_cursor
;
if
(
yych
<=
0x8F
)
{
goto
basic_json_parser_32
;
}
if
(
yych
<=
0xBF
)
{
goto
basic_json_parser_38
;
}
goto
basic_json_parser_32
;
basic_json_parser_41:
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
yych
=
*
m_cursor
;
if
(
yych
<=
0x7F
)
goto
basic_json_parser_32
;
if
(
yych
<=
0xBF
)
goto
basic_json_parser_38
;
goto
basic_json_parser_32
;
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
{
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
}
yych
=
*
m_cursor
;
if
(
yych
<=
0x7F
)
{
goto
basic_json_parser_32
;
}
if
(
yych
<=
0xBF
)
{
goto
basic_json_parser_38
;
}
goto
basic_json_parser_32
;
basic_json_parser_42:
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
yych
=
*
m_cursor
;
if
(
yych
<=
0x7F
)
goto
basic_json_parser_32
;
if
(
yych
<=
0x8F
)
goto
basic_json_parser_38
;
goto
basic_json_parser_32
;
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
{
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
}
yych
=
*
m_cursor
;
if
(
yych
<=
0x7F
)
{
goto
basic_json_parser_32
;
}
if
(
yych
<=
0x8F
)
{
goto
basic_json_parser_38
;
}
goto
basic_json_parser_32
;
basic_json_parser_43:
yych
=
*++
m_cursor
;
if
(
yych
<=
'/'
)
goto
basic_json_parser_32
;
if
(
yych
<=
'9'
)
goto
basic_json_parser_49
;
goto
basic_json_parser_32
;
yych
=
*++
m_cursor
;
if
(
yych
<=
'/'
)
{
goto
basic_json_parser_32
;
}
if
(
yych
<=
'9'
)
{
goto
basic_json_parser_49
;
}
goto
basic_json_parser_32
;
basic_json_parser_44:
yych
=
*++
m_cursor
;
if
(
yych
<=
','
)
{
if
(
yych
==
'+'
)
goto
basic_json_parser_51
;
goto
basic_json_parser_32
;
}
else
{
if
(
yych
<=
'-'
)
goto
basic_json_parser_51
;
if
(
yych
<=
'/'
)
goto
basic_json_parser_32
;
if
(
yych
<=
'9'
)
goto
basic_json_parser_52
;
goto
basic_json_parser_32
;
}
yych
=
*++
m_cursor
;
if
(
yych
<=
','
)
{
if
(
yych
==
'+'
)
{
goto
basic_json_parser_51
;
}
goto
basic_json_parser_32
;
}
else
{
if
(
yych
<=
'-'
)
{
goto
basic_json_parser_51
;
}
if
(
yych
<=
'/'
)
{
goto
basic_json_parser_32
;
}
if
(
yych
<=
'9'
)
{
goto
basic_json_parser_52
;
}
goto
basic_json_parser_32
;
}
basic_json_parser_45:
yych
=
*++
m_cursor
;
if
(
yych
==
'l'
)
goto
basic_json_parser_54
;
goto
basic_json_parser_32
;
yych
=
*++
m_cursor
;
if
(
yych
==
'l'
)
{
goto
basic_json_parser_54
;
}
goto
basic_json_parser_32
;
basic_json_parser_46:
yych
=
*++
m_cursor
;
if
(
yych
==
'l'
)
goto
basic_json_parser_55
;
goto
basic_json_parser_32
;
yych
=
*++
m_cursor
;
if
(
yych
==
'l'
)
{
goto
basic_json_parser_55
;
}
goto
basic_json_parser_32
;
basic_json_parser_47:
yych
=
*++
m_cursor
;
if
(
yych
==
'u'
)
goto
basic_json_parser_56
;
goto
basic_json_parser_32
;
yych
=
*++
m_cursor
;
if
(
yych
==
'u'
)
{
goto
basic_json_parser_56
;
}
goto
basic_json_parser_32
;
basic_json_parser_48:
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
yych
=
*
m_cursor
;
if
(
yych
<=
'@'
)
{
if
(
yych
<=
'/'
)
goto
basic_json_parser_32
;
if
(
yych
<=
'9'
)
goto
basic_json_parser_57
;
goto
basic_json_parser_32
;
}
else
{
if
(
yych
<=
'F'
)
goto
basic_json_parser_57
;
if
(
yych
<=
'`'
)
goto
basic_json_parser_32
;
if
(
yych
<=
'f'
)
goto
basic_json_parser_57
;
goto
basic_json_parser_32
;
}
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
{
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
}
yych
=
*
m_cursor
;
if
(
yych
<=
'@'
)
{
if
(
yych
<=
'/'
)
{
goto
basic_json_parser_32
;
}
if
(
yych
<=
'9'
)
{
goto
basic_json_parser_57
;
}
goto
basic_json_parser_32
;
}
else
{
if
(
yych
<=
'F'
)
{
goto
basic_json_parser_57
;
}
if
(
yych
<=
'`'
)
{
goto
basic_json_parser_32
;
}
if
(
yych
<=
'f'
)
{
goto
basic_json_parser_57
;
}
goto
basic_json_parser_32
;
}
basic_json_parser_49:
yyaccept
=
1
;
m_marker
=
++
m_cursor
;
if
((
m_limit
-
m_cursor
)
<
3
)
fill_line_buffer
(
3
);
// LCOV_EXCL_LINE
yych
=
*
m_cursor
;
if
(
yych
<=
'D'
)
{
if
(
yych
<=
'/'
)
goto
basic_json_parser_14
;
if
(
yych
<=
'9'
)
goto
basic_json_parser_49
;
goto
basic_json_parser_14
;
}
else
{
if
(
yych
<=
'E'
)
goto
basic_json_parser_44
;
if
(
yych
==
'e'
)
goto
basic_json_parser_44
;
goto
basic_json_parser_14
;
}
yyaccept
=
1
;
m_marker
=
++
m_cursor
;
if
((
m_limit
-
m_cursor
)
<
3
)
{
fill_line_buffer
(
3
);
// LCOV_EXCL_LINE
}
yych
=
*
m_cursor
;
if
(
yych
<=
'D'
)
{
if
(
yych
<=
'/'
)
{
goto
basic_json_parser_14
;
}
if
(
yych
<=
'9'
)
{
goto
basic_json_parser_49
;
}
goto
basic_json_parser_14
;
}
else
{
if
(
yych
<=
'E'
)
{
goto
basic_json_parser_44
;
}
if
(
yych
==
'e'
)
{
goto
basic_json_parser_44
;
}
goto
basic_json_parser_14
;
}
basic_json_parser_51:
yych
=
*++
m_cursor
;
if
(
yych
<=
'/'
)
goto
basic_json_parser_32
;
if
(
yych
>=
':'
)
goto
basic_json_parser_32
;
yych
=
*++
m_cursor
;
if
(
yych
<=
'/'
)
{
goto
basic_json_parser_32
;
}
if
(
yych
>=
':'
)
{
goto
basic_json_parser_32
;
}
basic_json_parser_52:
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
yych
=
*
m_cursor
;
if
(
yych
<=
'/'
)
goto
basic_json_parser_14
;
if
(
yych
<=
'9'
)
goto
basic_json_parser_52
;
goto
basic_json_parser_14
;
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
{
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
}
yych
=
*
m_cursor
;
if
(
yych
<=
'/'
)
{
goto
basic_json_parser_14
;
}
if
(
yych
<=
'9'
)
{
goto
basic_json_parser_52
;
}
goto
basic_json_parser_14
;
basic_json_parser_54:
yych
=
*++
m_cursor
;
if
(
yych
==
's'
)
goto
basic_json_parser_58
;
goto
basic_json_parser_32
;
yych
=
*++
m_cursor
;
if
(
yych
==
's'
)
{
goto
basic_json_parser_58
;
}
goto
basic_json_parser_32
;
basic_json_parser_55:
yych
=
*++
m_cursor
;
if
(
yych
==
'l'
)
goto
basic_json_parser_59
;
goto
basic_json_parser_32
;
yych
=
*++
m_cursor
;
if
(
yych
==
'l'
)
{
goto
basic_json_parser_59
;
}
goto
basic_json_parser_32
;
basic_json_parser_56:
yych
=
*++
m_cursor
;
if
(
yych
==
'e'
)
goto
basic_json_parser_61
;
goto
basic_json_parser_32
;
yych
=
*++
m_cursor
;
if
(
yych
==
'e'
)
{
goto
basic_json_parser_61
;
}
goto
basic_json_parser_32
;
basic_json_parser_57:
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
yych
=
*
m_cursor
;
if
(
yych
<=
'@'
)
{
if
(
yych
<=
'/'
)
goto
basic_json_parser_32
;
if
(
yych
<=
'9'
)
goto
basic_json_parser_63
;
goto
basic_json_parser_32
;
}
else
{
if
(
yych
<=
'F'
)
goto
basic_json_parser_63
;
if
(
yych
<=
'`'
)
goto
basic_json_parser_32
;
if
(
yych
<=
'f'
)
goto
basic_json_parser_63
;
goto
basic_json_parser_32
;
}
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
{
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
}
yych
=
*
m_cursor
;
if
(
yych
<=
'@'
)
{
if
(
yych
<=
'/'
)
{
goto
basic_json_parser_32
;
}
if
(
yych
<=
'9'
)
{
goto
basic_json_parser_63
;
}
goto
basic_json_parser_32
;
}
else
{
if
(
yych
<=
'F'
)
{
goto
basic_json_parser_63
;
}
if
(
yych
<=
'`'
)
{
goto
basic_json_parser_32
;
}
if
(
yych
<=
'f'
)
{
goto
basic_json_parser_63
;
}
goto
basic_json_parser_32
;
}
basic_json_parser_58:
yych
=
*++
m_cursor
;
if
(
yych
==
'e'
)
goto
basic_json_parser_64
;
goto
basic_json_parser_32
;
yych
=
*++
m_cursor
;
if
(
yych
==
'e'
)
{
goto
basic_json_parser_64
;
}
goto
basic_json_parser_32
;
basic_json_parser_59:
++
m_cursor
;
{
last_token_type
=
token_type
::
literal_null
;
break
;
}
++
m_cursor
;
{
last_token_type
=
token_type
::
literal_null
;
break
;
}
basic_json_parser_61:
++
m_cursor
;
{
last_token_type
=
token_type
::
literal_true
;
break
;
}
++
m_cursor
;
{
last_token_type
=
token_type
::
literal_true
;
break
;
}
basic_json_parser_63:
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
yych
=
*
m_cursor
;
if
(
yych
<=
'@'
)
{
if
(
yych
<=
'/'
)
goto
basic_json_parser_32
;
if
(
yych
<=
'9'
)
goto
basic_json_parser_66
;
goto
basic_json_parser_32
;
}
else
{
if
(
yych
<=
'F'
)
goto
basic_json_parser_66
;
if
(
yych
<=
'`'
)
goto
basic_json_parser_32
;
if
(
yych
<=
'f'
)
goto
basic_json_parser_66
;
goto
basic_json_parser_32
;
}
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
{
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
}
yych
=
*
m_cursor
;
if
(
yych
<=
'@'
)
{
if
(
yych
<=
'/'
)
{
goto
basic_json_parser_32
;
}
if
(
yych
<=
'9'
)
{
goto
basic_json_parser_66
;
}
goto
basic_json_parser_32
;
}
else
{
if
(
yych
<=
'F'
)
{
goto
basic_json_parser_66
;
}
if
(
yych
<=
'`'
)
{
goto
basic_json_parser_32
;
}
if
(
yych
<=
'f'
)
{
goto
basic_json_parser_66
;
}
goto
basic_json_parser_32
;
}
basic_json_parser_64:
++
m_cursor
;
{
last_token_type
=
token_type
::
literal_false
;
break
;
}
++
m_cursor
;
{
last_token_type
=
token_type
::
literal_false
;
break
;
}
basic_json_parser_66:
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
yych
=
*
m_cursor
;
if
(
yych
<=
'@'
)
{
if
(
yych
<=
'/'
)
goto
basic_json_parser_32
;
if
(
yych
<=
'9'
)
goto
basic_json_parser_30
;
goto
basic_json_parser_32
;
}
else
{
if
(
yych
<=
'F'
)
goto
basic_json_parser_30
;
if
(
yych
<=
'`'
)
goto
basic_json_parser_32
;
if
(
yych
<=
'f'
)
goto
basic_json_parser_30
;
goto
basic_json_parser_32
;
}
}
++
m_cursor
;
if
(
m_limit
<=
m_cursor
)
{
fill_line_buffer
(
1
);
// LCOV_EXCL_LINE
}
yych
=
*
m_cursor
;
if
(
yych
<=
'@'
)
{
if
(
yych
<=
'/'
)
{
goto
basic_json_parser_32
;
}
if
(
yych
<=
'9'
)
{
goto
basic_json_parser_30
;
}
goto
basic_json_parser_32
;
}
else
{
if
(
yych
<=
'F'
)
{
goto
basic_json_parser_30
;
}
if
(
yych
<=
'`'
)
{
goto
basic_json_parser_32
;
}
if
(
yych
<=
'f'
)
{
goto
basic_json_parser_30
;
}
goto
basic_json_parser_32
;
}
}
}
...
...
src/json.hpp.re2c
浏览文件 @
a6b02828
...
...
@@ -168,6 +168,25 @@ using is_unscoped_enum =
namespace detail
{
// Implementation of 2 C++17 constructs: conjunction, negation.
// This is needed to avoid evaluating all the traits in a condition
//
// For example: not std::is_same<void, T>::value and has_value_type<T>::value
// will not compile when T = void (on MSVC at least)
// Whereas conjunction<negation<std::is_same<void, T>>, has_value_type<T>>::value
// will stop evaluating if negation<...>::value == false
//
// Please note that those constructs must be used with caution, since symbols can
// become very long quickly (which can slow down compilation and cause MSVC internal compiler errors)
// Only use it when you have too (see example ahead)
template <class...> struct conjunction : std::true_type {};
template <class B1> struct conjunction<B1> : B1 {};
template <class B1, class... Bn>
struct conjunction<B1, Bn...>
: std::conditional<bool(B1::value), conjunction<Bn...>, B1>::type {};
template <class B> struct negation : std::integral_constant < bool, !B::value > {};
template <typename Json> std::string type_name(const Json& j)
{
switch (j.m_type)
...
...
@@ -317,25 +336,6 @@ struct external_constructor<value_t::object>
}
};
// Implementation of 2 C++17 constructs: conjunction, negation.
// This is needed to avoid evaluating all the traits in a condition
//
// For example: not std::is_same<void, T>::value and has_value_type<T>::value
// will not compile when T = void (on MSVC at least)
// Whereas conjunction<negation<std::is_same<void, T>>, has_value_type<T>>::value
// will stop evaluating if negation<...>::value == false
//
// Please note that those constructs must be used with caution, since symbols can
// become very long quickly (which can slow down compilation and cause MSVC internal compiler errors)
// Only use it when you have too (see example ahead)
template <class...> struct conjunction : std::true_type {};
template <class B1> struct conjunction<B1> : B1 {};
template <class B1, class... Bn>
struct conjunction<B1, Bn...>
: std::conditional<bool(B1::value), conjunction<Bn...>, B1>::type {};
template <class B> struct negation : std::integral_constant < bool, !B::value > {};
/*!
@brief Helper to determine whether there's a key_type for T.
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录