Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
J
json
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
json
Commits
072dc255
Commit
072dc255
authored
May 10, 2015
by
Niels
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #72 from aburgh/null-callback
Replace `default_callback` function with `nullptr` and check for null…
parents
43ededf4
ef54ace4
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
12 additions
and
18 deletions
+12
-18
json.hpp.re2c
src/json.hpp.re2c
+12
-18
No files found.
src/json.hpp.re2c
View file @
072dc255
...
...
@@ -291,12 +291,6 @@ class basic_json
using parser_callback_t = std::function<bool(int depth, parse_event_t event,
const basic_json& parsed)>;
/// default parser callback returns true to keep all elements
static bool default_callback(int, parse_event_t, const basic_json&)
{
return true;
}
/*!
@brief comparison operator for JSON value types
...
...
@@ -1994,13 +1988,13 @@ class basic_json
/////////////////////
/// deserialize from string
static basic_json parse(const string_t& s, parser_callback_t cb =
default_callback
)
static basic_json parse(const string_t& s, parser_callback_t cb =
nullptr
)
{
return parser(s, cb).parse();
}
/// deserialize from stream
static basic_json parse(std::istream& i, parser_callback_t cb =
default_callback
)
static basic_json parse(std::istream& i, parser_callback_t cb =
nullptr
)
{
return parser(i, cb).parse();
}
...
...
@@ -3885,14 +3879,14 @@ class basic_json
{
public:
/// constructor for strings
inline parser(const string_t& s, parser_callback_t cb =
default_callback
) : callback(cb), m_lexer(s)
inline parser(const string_t& s, parser_callback_t cb =
nullptr
) : callback(cb), m_lexer(s)
{
// read first token
get_token();
}
/// a parser reading from an input stream
inline parser(std::istream& _is, parser_callback_t cb =
default_callback
) : callback(cb),
inline parser(std::istream& _is, parser_callback_t cb =
nullptr
) : callback(cb),
m_lexer(&_is)
{
// read first token
...
...
@@ -3919,7 +3913,7 @@ class basic_json
{
case (lexer::token_type::begin_object):
{
if (keep and (
keep = callback(depth++, parse_event_t::object_start, result
)))
if (keep and (
not callback or (keep = callback(depth++, parse_event_t::object_start, result)
)))
{
// explicitly set result to object to cope with {}
result.m_type = value_t::object;
...
...
@@ -3933,7 +3927,7 @@ class basic_json
if (last_token == lexer::token_type::end_object)
{
get_token();
if (keep and
not (keep = callback(--depth, parse_event_t::object_end, result)
))
if (keep and
callback and not callback(--depth, parse_event_t::object_end, result
))
{
result = basic_json(value_t::discarded);
}
...
...
@@ -3959,7 +3953,7 @@ class basic_json
bool keep_tag = false;
if (keep)
{
keep_tag = callback(depth, parse_event_t::key, basic_json(key))
;
keep_tag = callback ? callback(depth, parse_event_t::key, basic_json(key)) : true
;
}
// parse separator (:)
...
...
@@ -3979,7 +3973,7 @@ class basic_json
// closing }
expect(lexer::token_type::end_object);
get_token();
if (keep and not callback(--depth, parse_event_t::object_end, result))
if (keep and
callback and
not callback(--depth, parse_event_t::object_end, result))
{
result = basic_json(value_t::discarded);
}
...
...
@@ -3989,7 +3983,7 @@ class basic_json
case (lexer::token_type::begin_array):
{
if (keep and (
keep = callback(depth++, parse_event_t::array_start, result
)))
if (keep and (
not callback or (keep = callback(depth++, parse_event_t::array_start, result)
)))
{
// explicitly set result to object to cope with []
result.m_type = value_t::array;
...
...
@@ -4003,7 +3997,7 @@ class basic_json
if (last_token == lexer::token_type::end_array)
{
get_token();
if (not callback(--depth, parse_event_t::array_end, result))
if (
callback and
not callback(--depth, parse_event_t::array_end, result))
{
result = basic_json(value_t::discarded);
}
...
...
@@ -4034,7 +4028,7 @@ class basic_json
// closing ]
expect(lexer::token_type::end_array);
get_token();
if (keep and not callback(--depth, parse_event_t::array_end, result))
if (keep and
callback and
not callback(--depth, parse_event_t::array_end, result))
{
result = basic_json(value_t::discarded);
}
...
...
@@ -4111,7 +4105,7 @@ class basic_json
}
}
if (keep and not callback(depth, parse_event_t::value, result))
if (keep and
callback and
not callback(depth, parse_event_t::value, result))
{
result = basic_json(value_t::discarded);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment