Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
畅游知识海洋
json
提交
f620d749
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,发现更多精彩内容 >>
提交
f620d749
编写于
11月 22, 2016
作者:
N
Niels
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
⚡
added performance fixes (#365)
上级
869f4c68
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
44 addition
and
30 deletion
+44
-30
src/json.hpp
src/json.hpp
+22
-15
src/json.hpp.re2c
src/json.hpp.re2c
+22
-15
未找到文件。
src/json.hpp
浏览文件 @
f620d749
...
...
@@ -8734,10 +8734,10 @@ basic_json_parser_66:
{
// copy unprocessed characters to line buffer
m_line_buffer
.
clear
();
for
(
m_cursor
=
m_start
;
m_cursor
!=
m_limit
;
++
m_cursor
)
{
m_line_buffer
.
append
(
1
,
static_cast
<
const
char
>
(
*
m_cursor
));
}
m_line_buffer
.
append
(
reinterpret_cast
<
const
typename
string_t
::
value_type
*>
(
m_start
),
static_cast
<
size_t
>
(
m_limit
-
m_start
));
m_cursor
=
m_limit
;
}
// append n characters to make sure that there is sufficient
...
...
@@ -8750,10 +8750,12 @@ basic_json_parser_66:
// delete processed characters from line buffer
m_line_buffer
.
erase
(
0
,
static_cast
<
size_t
>
(
offset_start
));
// read next line from input stream
std
::
string
line
;
std
::
getline
(
*
m_stream
,
line
,
'\n'
);
m_line_buffer_tmp
.
clear
();
std
::
getline
(
*
m_stream
,
m_line_buffer_tmp
,
'\n'
);
// add line with newline symbol to the line buffer
m_line_buffer
+=
line
+
"
\n
"
;
m_line_buffer
+=
m_line_buffer_tmp
;
m_line_buffer
.
push_back
(
'\n'
);
}
// set pointers
...
...
@@ -8840,9 +8842,18 @@ basic_json_parser_66:
// iterate the result between the quotes
for
(
const
lexer_char_t
*
i
=
m_start
+
1
;
i
<
m_cursor
-
1
;
++
i
)
{
// process escaped characters
if
(
*
i
==
'\\'
)
// number of non-escaped characters
const
size_t
n
=
static_cast
<
size_t
>
(
std
::
find
(
i
,
m_cursor
-
1
,
'\\'
)
-
i
);
if
(
n
!=
0
)
{
result
.
append
(
reinterpret_cast
<
const
typename
string_t
::
value_type
*>
(
i
),
n
);
i
+=
n
-
1
;
// -1 because will ++i
}
else
{
// processing escaped character
// read next character
++
i
;
...
...
@@ -8929,12 +8940,6 @@ basic_json_parser_66:
}
}
}
else
{
// all other characters are just copied to the end of the
// string
result
.
append
(
1
,
static_cast
<
typename
string_t
::
value_type
>
(
*
i
));
}
}
return
result
;
...
...
@@ -9118,6 +9123,8 @@ basic_json_parser_66:
std
::
istream
*
m_stream
=
nullptr
;
/// line buffer buffer for m_stream
string_t
m_line_buffer
{};
/// used for filling m_line_buffer
string_t
m_line_buffer_tmp
{};
/// the buffer pointer
const
lexer_char_t
*
m_content
=
nullptr
;
/// pointer to the beginning of the current symbol
...
...
src/json.hpp.re2c
浏览文件 @
f620d749
...
...
@@ -7883,10 +7883,10 @@ class basic_json
{
// copy unprocessed characters to line buffer
m_line_buffer.clear();
for (m_cursor = m_start; m_cursor != m_limit; ++m_cursor)
{
m_line_buffer.append(1, static_cast<const char>(*m_cursor
));
}
m_line_buffer.append(
reinterpret_cast<const typename string_t::value_type*>(m_start),
static_cast<size_t>(m_limit - m_start
));
m_cursor = m_limit;
}
// append n characters to make sure that there is sufficient
...
...
@@ -7899,10 +7899,12 @@ class basic_json
// delete processed characters from line buffer
m_line_buffer.erase(0, static_cast<size_t>(offset_start));
// read next line from input stream
std::string line;
std::getline(*m_stream, line, '\n');
m_line_buffer_tmp.clear();
std::getline(*m_stream, m_line_buffer_tmp, '\n');
// add line with newline symbol to the line buffer
m_line_buffer += line + "\n";
m_line_buffer += m_line_buffer_tmp;
m_line_buffer.push_back('\n');
}
// set pointers
...
...
@@ -7989,9 +7991,18 @@ class basic_json
// iterate the result between the quotes
for (const lexer_char_t* i = m_start + 1; i < m_cursor - 1; ++i)
{
// process escaped characters
if (*i == '\\')
// number of non-escaped characters
const size_t n = static_cast<size_t>(std::find(i, m_cursor - 1, '\\') - i);
if (n != 0)
{
result.append(reinterpret_cast<const typename string_t::value_type*>(i), n);
i += n - 1; // -1 because will ++i
}
else
{
// processing escaped character
// read next character
++i;
...
...
@@ -8078,12 +8089,6 @@ class basic_json
}
}
}
else
{
// all other characters are just copied to the end of the
// string
result.append(1, static_cast<typename string_t::value_type>(*i));
}
}
return result;
...
...
@@ -8267,6 +8272,8 @@ class basic_json
std::istream* m_stream = nullptr;
/// line buffer buffer for m_stream
string_t m_line_buffer {};
/// used for filling m_line_buffer
string_t m_line_buffer_tmp {};
/// the buffer pointer
const lexer_char_t* m_content = nullptr;
/// pointer to the beginning of the current symbol
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录