Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
json
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
json
Commits
2bc5d893
Commit
2bc5d893
authored
Jul 05, 2015
by
Niels
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactored generic iterator into a new class primitive_iterator_t
parent
82a69953
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
236 additions
and
130 deletions
+236
-130
src/json.hpp
src/json.hpp
+100
-47
src/json.hpp.re2c
src/json.hpp.re2c
+100
-47
test/unit.cpp
test/unit.cpp
+36
-36
No files found.
src/json.hpp
View file @
2bc5d893
...
...
@@ -1139,7 +1139,7 @@ class basic_json
case
value_t
:
:
boolean
:
case
value_t
:
:
string
:
{
if
(
first
.
m_it
.
generic_iterator
!=
0
or
last
.
m_it
.
generic_iterator
!=
1
)
if
(
not
first
.
m_it
.
primitive_iterator
.
is_begin
()
or
not
last
.
m_it
.
primitive_iterator
.
is_end
()
)
{
throw
std
::
out_of_range
(
"iterators out of range"
);
}
...
...
@@ -2572,7 +2572,7 @@ class basic_json
case
value_t
:
:
boolean
:
case
value_t
:
:
string
:
{
if
(
pos
.
m_it
.
generic_iterator
!=
0
)
if
(
not
pos
.
m_it
.
primitive_iterator
.
is_begin
()
)
{
throw
std
::
out_of_range
(
"iterator out of range"
);
}
...
...
@@ -2665,7 +2665,7 @@ class basic_json
case
value_t
:
:
boolean
:
case
value_t
:
:
string
:
{
if
(
first
.
m_it
.
generic_iterator
!=
0
or
last
.
m_it
.
generic_iterator
!=
1
)
if
(
not
first
.
m_it
.
primitive_iterator
.
is_begin
()
or
not
last
.
m_it
.
primitive_iterator
.
is_end
()
)
{
throw
std
::
out_of_range
(
"iterators out of range"
);
}
...
...
@@ -3198,10 +3198,10 @@ class basic_json
defined as follows:
Value type | return value
----------- | -------------
null | @c 0
boolean | @c 1
string | @c 1
number | @c 1
null | @c 0
(same as size())
boolean | @c 1
(same as size())
string | @c 1
(same as size())
number | @c 1
(same as size())
object | result of function object_t::max_size()
array | result of function array_t::max_size()
...
...
@@ -3223,11 +3223,6 @@ class basic_json
{
switch
(
m_type
)
{
case
(
value_t
:
:
null
)
:
{
return
0
;
}
case
(
value_t
:
:
array
)
:
{
return
m_value
.
array
->
max_size
();
...
...
@@ -3240,8 +3235,8 @@ class basic_json
default:
{
// all other types have max_size
1
return
1
;
// all other types have max_size
() == size()
return
size
()
;
}
}
}
...
...
@@ -3974,7 +3969,7 @@ class basic_json
default:
{
if
(
c
>=
0
and
c
<=
0x1f
)
if
(
c
>=
0
x00
and
c
<=
0x1f
)
{
// control characters (everything between 0x00 and 0x1f)
// -> create four-digit hex representation
...
...
@@ -4162,6 +4157,64 @@ class basic_json
// iterators //
///////////////
/*!
@brief an iterator for primitive JSON types
This class models an iterator for primitive JSON types (boolean, number,
string). It's only purpose is to allow the iterator/const_iterator classes
to "iterate" over primitive values. Internally, the iterator is modeled by
a `difference_type` variable. Value begin_value (`0`) models the begin,
end_value (`1`) models past the end.
*/
class
primitive_iterator_t
{
public:
primitive_iterator_t
()
=
default
;
/// set iterator to a defined beginning
void
set_begin
()
{
m_it
=
begin_value
;
}
/// set iterator to a defined past the end
void
set_end
()
{
m_it
=
end_value
;
}
/// return whether the iterator can be dereferenced
bool
is_begin
()
const
{
return
(
m_it
==
begin_value
);
}
/// return whether the iterator is at end
bool
is_end
()
const
{
return
(
m_it
==
end_value
);
}
/// return reference to the value to change and compare
operator
difference_type
&
()
{
return
m_it
;
}
/// return value to compare
operator
const
difference_type
&
()
const
{
return
m_it
;
}
private:
static
constexpr
difference_type
begin_value
=
0
;
static
constexpr
difference_type
end_value
=
begin_value
+
1
;
/// iterator as signed integer type
difference_type
m_it
=
std
::
numeric_limits
<
std
::
ptrdiff_t
>::
min
();
};
/// an iterator value
union
internal_iterator
{
...
...
@@ -4170,10 +4223,10 @@ class basic_json
/// iterator for JSON arrays
typename
array_t
::
iterator
array_iterator
;
/// generic iterator for all other types
difference_type
generic
_iterator
;
primitive_iterator_t
primitive
_iterator
;
//
/ default constructor
internal_iterator
()
:
generic_iterator
(
-
1
)
{}
//
leave the union un-initialized
internal_iterator
()
{}
};
public:
...
...
@@ -4215,7 +4268,7 @@ class basic_json
}
default:
{
m_it
.
generic_iterator
=
-
1
;
m_it
.
primitive_iterator
=
primitive_iterator_t
()
;
break
;
}
}
...
...
@@ -4260,13 +4313,13 @@ class basic_json
case
(
basic_json
:
:
value_t
::
null
)
:
{
// set to end so begin()==end() is true: null is empty
m_it
.
generic_iterator
=
1
;
m_it
.
primitive_iterator
.
set_end
()
;
break
;
}
default:
{
m_it
.
generic_iterator
=
0
;
m_it
.
primitive_iterator
.
set_begin
()
;
break
;
}
}
...
...
@@ -4291,7 +4344,7 @@ class basic_json
default:
{
m_it
.
generic_iterator
=
1
;
m_it
.
primitive_iterator
.
set_end
()
;
break
;
}
}
...
...
@@ -4320,7 +4373,7 @@ class basic_json
default:
{
if
(
m_it
.
generic_iterator
==
0
)
if
(
m_it
.
primitive_iterator
.
is_begin
()
)
{
return
*
m_object
;
}
...
...
@@ -4354,7 +4407,7 @@ class basic_json
default:
{
if
(
m_it
.
generic_iterator
==
0
)
if
(
m_it
.
primitive_iterator
.
is_begin
()
)
{
return
m_object
;
}
...
...
@@ -4387,7 +4440,7 @@ class basic_json
default:
{
m_it
.
generic
_iterator
++
;
m_it
.
primitive
_iterator
++
;
break
;
}
}
...
...
@@ -4414,7 +4467,7 @@ class basic_json
default:
{
++
m_it
.
generic
_iterator
;
++
m_it
.
primitive
_iterator
;
break
;
}
}
...
...
@@ -4443,7 +4496,7 @@ class basic_json
default:
{
m_it
.
generic
_iterator
--
;
m_it
.
primitive
_iterator
--
;
break
;
}
}
...
...
@@ -4470,7 +4523,7 @@ class basic_json
default:
{
--
m_it
.
generic
_iterator
;
--
m_it
.
primitive
_iterator
;
break
;
}
}
...
...
@@ -4501,7 +4554,7 @@ class basic_json
default:
{
return
(
m_it
.
generic_iterator
==
other
.
m_it
.
generic
_iterator
);
return
(
m_it
.
primitive_iterator
==
other
.
m_it
.
primitive
_iterator
);
}
}
}
...
...
@@ -4535,7 +4588,7 @@ class basic_json
default:
{
return
(
m_it
.
generic_iterator
<
other
.
m_it
.
generic
_iterator
);
return
(
m_it
.
primitive_iterator
<
other
.
m_it
.
primitive
_iterator
);
}
}
}
...
...
@@ -4576,7 +4629,7 @@ class basic_json
default:
{
m_it
.
generic
_iterator
+=
i
;
m_it
.
primitive
_iterator
+=
i
;
break
;
}
}
...
...
@@ -4624,7 +4677,7 @@ class basic_json
default:
{
return
m_it
.
generic_iterator
-
other
.
m_it
.
generic
_iterator
;
return
m_it
.
primitive_iterator
-
other
.
m_it
.
primitive
_iterator
;
}
}
}
...
...
@@ -4651,7 +4704,7 @@ class basic_json
default:
{
if
(
m_it
.
generic
_iterator
==
-
n
)
if
(
m_it
.
primitive
_iterator
==
-
n
)
{
return
*
m_object
;
}
...
...
@@ -4731,7 +4784,7 @@ class basic_json
}
default:
{
m_it
.
generic_iterator
=
-
1
;
m_it
.
primitive_iterator
=
primitive_iterator_t
()
;
break
;
}
}
...
...
@@ -4756,7 +4809,7 @@ class basic_json
default:
{
m_it
.
generic_iterator
=
other
.
m_it
.
generic
_iterator
;
m_it
.
primitive_iterator
=
other
.
m_it
.
primitive
_iterator
;
break
;
}
}
...
...
@@ -4801,13 +4854,13 @@ class basic_json
case
(
basic_json
:
:
value_t
::
null
)
:
{
// set to end so begin()==end() is true: null is empty
m_it
.
generic_iterator
=
1
;
m_it
.
primitive_iterator
.
set_end
()
;
break
;
}
default:
{
m_it
.
generic_iterator
=
0
;
m_it
.
primitive_iterator
.
set_begin
()
;
break
;
}
}
...
...
@@ -4832,7 +4885,7 @@ class basic_json
default:
{
m_it
.
generic_iterator
=
1
;
m_it
.
primitive_iterator
.
set_end
()
;
break
;
}
}
...
...
@@ -4861,7 +4914,7 @@ class basic_json
default:
{
if
(
m_it
.
generic_iterator
==
0
)
if
(
m_it
.
primitive_iterator
.
is_begin
()
)
{
return
*
m_object
;
}
...
...
@@ -4890,7 +4943,7 @@ class basic_json
default:
{
if
(
m_it
.
generic_iterator
==
0
)
if
(
m_it
.
primitive_iterator
.
is_begin
()
)
{
return
m_object
;
}
...
...
@@ -4930,7 +4983,7 @@ class basic_json
default:
{
++
m_it
.
generic
_iterator
;
++
m_it
.
primitive
_iterator
;
break
;
}
}
...
...
@@ -4966,7 +5019,7 @@ class basic_json
default:
{
--
m_it
.
generic
_iterator
;
--
m_it
.
primitive
_iterator
;
break
;
}
}
...
...
@@ -4997,7 +5050,7 @@ class basic_json
default:
{
return
(
m_it
.
generic_iterator
==
other
.
m_it
.
generic
_iterator
);
return
(
m_it
.
primitive_iterator
==
other
.
m_it
.
primitive
_iterator
);
}
}
}
...
...
@@ -5031,7 +5084,7 @@ class basic_json
default:
{
return
(
m_it
.
generic_iterator
<
other
.
m_it
.
generic
_iterator
);
return
(
m_it
.
primitive_iterator
<
other
.
m_it
.
primitive
_iterator
);
}
}
}
...
...
@@ -5072,7 +5125,7 @@ class basic_json
default:
{
m_it
.
generic
_iterator
+=
i
;
m_it
.
primitive
_iterator
+=
i
;
break
;
}
}
...
...
@@ -5119,7 +5172,7 @@ class basic_json
default:
{
return
m_it
.
generic_iterator
-
other
.
m_it
.
generic
_iterator
;
return
m_it
.
primitive_iterator
-
other
.
m_it
.
primitive
_iterator
;
}
}
}
...
...
@@ -5146,7 +5199,7 @@ class basic_json
default:
{
if
(
m_it
.
generic
_iterator
==
-
n
)
if
(
m_it
.
primitive
_iterator
==
-
n
)
{
return
*
m_object
;
}
...
...
src/json.hpp.re2c
View file @
2bc5d893
...
...
@@ -1139,7 +1139,7 @@ class basic_json
case value_t::boolean:
case value_t::string:
{
if (
first.m_it.generic_iterator != 0 or last.m_it.generic_iterator != 1
)
if (
not first.m_it.primitive_iterator.is_begin() or not last.m_it.primitive_iterator.is_end()
)
{
throw std::out_of_range("iterators out of range");
}
...
...
@@ -2572,7 +2572,7 @@ class basic_json
case value_t::boolean:
case value_t::string:
{
if (
pos.m_it.generic_iterator != 0
)
if (
not pos.m_it.primitive_iterator.is_begin()
)
{
throw std::out_of_range("iterator out of range");
}
...
...
@@ -2665,7 +2665,7 @@ class basic_json
case value_t::boolean:
case value_t::string:
{
if (
first.m_it.generic_iterator != 0 or last.m_it.generic_iterator != 1
)
if (
not first.m_it.primitive_iterator.is_begin() or not last.m_it.primitive_iterator.is_end()
)
{
throw std::out_of_range("iterators out of range");
}
...
...
@@ -3198,10 +3198,10 @@ class basic_json
defined as follows:
Value type | return value
----------- | -------------
null | @c 0
boolean | @c 1
string | @c 1
number | @c 1
null | @c 0
(same as size())
boolean | @c 1
(same as size())
string | @c 1
(same as size())
number | @c 1
(same as size())
object | result of function object_t::max_size()
array | result of function array_t::max_size()
...
...
@@ -3223,11 +3223,6 @@ class basic_json
{
switch (m_type)
{
case (value_t::null):
{
return 0;
}
case (value_t::array):
{
return m_value.array->max_size();
...
...
@@ -3240,8 +3235,8 @@ class basic_json
default:
{
// all other types have max_size
1
return
1
;
// all other types have max_size
() == size()
return
size()
;
}
}
}
...
...
@@ -3974,7 +3969,7 @@ class basic_json
default:
{
if (c >= 0 and c <= 0x1f)
if (c >= 0
x00
and c <= 0x1f)
{
// control characters (everything between 0x00 and 0x1f)
// -> create four-digit hex representation
...
...
@@ -4162,6 +4157,64 @@ class basic_json
// iterators //
///////////////
/*!
@brief an iterator for primitive JSON types
This class models an iterator for primitive JSON types (boolean, number,
string). It's only purpose is to allow the iterator/const_iterator classes
to "iterate" over primitive values. Internally, the iterator is modeled by
a `difference_type` variable. Value begin_value (`0`) models the begin,
end_value (`1`) models past the end.
*/
class primitive_iterator_t
{
public:
primitive_iterator_t() = default;
/// set iterator to a defined beginning
void set_begin()
{
m_it = begin_value;
}
/// set iterator to a defined past the end
void set_end()
{
m_it = end_value;
}
/// return whether the iterator can be dereferenced
bool is_begin() const
{
return (m_it == begin_value);
}
/// return whether the iterator is at end
bool is_end() const
{
return (m_it == end_value);
}
/// return reference to the value to change and compare
operator difference_type& ()
{
return m_it;
}
/// return value to compare
operator const difference_type () const
{
return m_it;
}
private:
static constexpr difference_type begin_value = 0;
static constexpr difference_type end_value = begin_value + 1;
/// iterator as signed integer type
difference_type m_it = std::numeric_limits<std::ptrdiff_t>::min();
};
/// an iterator value
union internal_iterator
{
...
...
@@ -4170,10 +4223,10 @@ class basic_json
/// iterator for JSON arrays
typename array_t::iterator array_iterator;
/// generic iterator for all other types
difference_type generic
_iterator;
primitive_iterator_t primitive
_iterator;
//
/ default constructor
internal_iterator()
: generic_iterator(-1)
{}
//
leave the union un-initialized
internal_iterator() {}
};
public:
...
...
@@ -4215,7 +4268,7 @@ class basic_json
}
default:
{
m_it.
generic_iterator = -1
;
m_it.
primitive_iterator = primitive_iterator_t()
;
break;
}
}
...
...
@@ -4260,13 +4313,13 @@ class basic_json
case (basic_json::value_t::null):
{
// set to end so begin()==end() is true: null is empty
m_it.
generic_iterator = 1
;
m_it.
primitive_iterator.set_end()
;
break;
}
default:
{
m_it.
generic_iterator = 0
;
m_it.
primitive_iterator.set_begin()
;
break;
}
}
...
...
@@ -4291,7 +4344,7 @@ class basic_json
default:
{
m_it.
generic_iterator = 1
;
m_it.
primitive_iterator.set_end()
;
break;
}
}
...
...
@@ -4320,7 +4373,7 @@ class basic_json
default:
{
if (m_it.
generic_iterator == 0
)
if (m_it.
primitive_iterator.is_begin()
)
{
return *m_object;
}
...
...
@@ -4354,7 +4407,7 @@ class basic_json
default:
{
if (m_it.
generic_iterator == 0
)
if (m_it.
primitive_iterator.is_begin()
)
{
return m_object;
}
...
...
@@ -4387,7 +4440,7 @@ class basic_json
default:
{
m_it.
generic
_iterator++;
m_it.
primitive
_iterator++;
break;
}
}
...
...
@@ -4414,7 +4467,7 @@ class basic_json
default:
{
++m_it.
generic
_iterator;
++m_it.
primitive
_iterator;
break;
}
}
...
...
@@ -4443,7 +4496,7 @@ class basic_json
default:
{
m_it.
generic
_iterator--;
m_it.
primitive
_iterator--;
break;
}
}
...
...
@@ -4470,7 +4523,7 @@ class basic_json
default:
{
--m_it.
generic
_iterator;
--m_it.
primitive
_iterator;
break;
}
}
...
...
@@ -4501,7 +4554,7 @@ class basic_json
default:
{
return (m_it.
generic_iterator == other.m_it.generic
_iterator);
return (m_it.
primitive_iterator == other.m_it.primitive
_iterator);
}
}
}
...
...
@@ -4535,7 +4588,7 @@ class basic_json
default:
{
return (m_it.
generic_iterator < other.m_it.generic
_iterator);
return (m_it.
primitive_iterator < other.m_it.primitive
_iterator);
}
}
}
...
...
@@ -4576,7 +4629,7 @@ class basic_json
default:
{
m_it.
generic
_iterator += i;
m_it.
primitive
_iterator += i;
break;
}
}
...
...
@@ -4624,7 +4677,7 @@ class basic_json
default:
{
return m_it.
generic_iterator - other.m_it.generic
_iterator;
return m_it.
primitive_iterator - other.m_it.primitive
_iterator;
}
}
}
...
...
@@ -4651,7 +4704,7 @@ class basic_json
default:
{
if (m_it.
generic
_iterator == -n)
if (m_it.
primitive
_iterator == -n)
{
return *m_object;
}
...
...
@@ -4731,7 +4784,7 @@ class basic_json
}
default:
{
m_it.
generic_iterator = -1
;
m_it.
primitive_iterator = primitive_iterator_t()
;
break;
}
}
...
...
@@ -4756,7 +4809,7 @@ class basic_json
default:
{
m_it.
generic_iterator = other.m_it.generic
_iterator;
m_it.
primitive_iterator = other.m_it.primitive
_iterator;
break;
}
}
...
...
@@ -4801,13 +4854,13 @@ class basic_json
case (basic_json::value_t::null):
{
// set to end so begin()==end() is true: null is empty
m_it.
generic_iterator = 1
;
m_it.
primitive_iterator.set_end()
;
break;
}
default:
{
m_it.
generic_iterator = 0
;
m_it.
primitive_iterator.set_begin()
;
break;
}
}
...
...
@@ -4832,7 +4885,7 @@ class basic_json
default:
{
m_it.
generic_iterator = 1
;
m_it.
primitive_iterator.set_end()
;
break;
}
}
...
...
@@ -4861,7 +4914,7 @@ class basic_json
default:
{
if (m_it.
generic_iterator == 0
)
if (m_it.
primitive_iterator.is_begin()
)
{
return *m_object;
}
...
...
@@ -4890,7 +4943,7 @@ class basic_json
default:
{
if (m_it.
generic_iterator == 0
)
if (m_it.
primitive_iterator.is_begin()
)
{
return m_object;
}
...
...
@@ -4930,7 +4983,7 @@ class basic_json
default:
{
++m_it.
generic
_iterator;
++m_it.
primitive
_iterator;
break;
}
}
...
...
@@ -4966,7 +5019,7 @@ class basic_json
default:
{
--m_it.
generic
_iterator;
--m_it.
primitive
_iterator;
break;
}
}
...
...
@@ -4997,7 +5050,7 @@ class basic_json
default:
{
return (m_it.
generic_iterator == other.m_it.generic
_iterator);
return (m_it.
primitive_iterator == other.m_it.primitive
_iterator);
}
}
}
...
...
@@ -5031,7 +5084,7 @@ class basic_json
default:
{
return (m_it.
generic_iterator < other.m_it.generic
_iterator);
return (m_it.
primitive_iterator < other.m_it.primitive
_iterator);
}
}
}
...
...
@@ -5072,7 +5125,7 @@ class basic_json
default:
{
m_it.
generic
_iterator += i;
m_it.
primitive
_iterator += i;
break;
}
}
...
...
@@ -5119,7 +5172,7 @@ class basic_json
default:
{
return m_it.
generic_iterator - other.m_it.generic
_iterator;
return m_it.
primitive_iterator - other.m_it.primitive
_iterator;
}
}
}
...
...
@@ -5146,7 +5199,7 @@ class basic_json
default:
{
if (m_it.
generic
_iterator == -n)
if (m_it.
primitive
_iterator == -n)
{
return *m_object;
}
...
...
test/unit.cpp
View file @
2bc5d893
...
...
@@ -6798,20 +6798,20 @@ TEST_CASE("iterator class")
{
json
j
(
json
::
value_t
::
null
);
json
::
iterator
it
=
j
.
begin
();
CHECK
(
it
.
m_it
.
generic
_iterator
==
1
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
1
);
it
++
;
CHECK
((
it
.
m_it
.
generic_iterator
!=
0
and
it
.
m_it
.
generic
_iterator
!=
1
));
CHECK
((
it
.
m_it
.
primitive_iterator
!=
0
and
it
.
m_it
.
primitive
_iterator
!=
1
));
}
SECTION
(
"number"
)
{
json
j
(
17
);
json
::
iterator
it
=
j
.
begin
();
CHECK
(
it
.
m_it
.
generic
_iterator
==
0
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
0
);
it
++
;
CHECK
(
it
.
m_it
.
generic
_iterator
==
1
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
1
);
it
++
;
CHECK
((
it
.
m_it
.
generic_iterator
!=
0
and
it
.
m_it
.
generic
_iterator
!=
1
));
CHECK
((
it
.
m_it
.
primitive_iterator
!=
0
and
it
.
m_it
.
primitive
_iterator
!=
1
));
}
SECTION
(
"object"
)
...
...
@@ -6849,20 +6849,20 @@ TEST_CASE("iterator class")
{
json
j
(
json
::
value_t
::
null
);
json
::
iterator
it
=
j
.
begin
();
CHECK
(
it
.
m_it
.
generic
_iterator
==
1
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
1
);
++
it
;
CHECK
((
it
.
m_it
.
generic_iterator
!=
0
and
it
.
m_it
.
generic
_iterator
!=
1
));
CHECK
((
it
.
m_it
.
primitive_iterator
!=
0
and
it
.
m_it
.
primitive
_iterator
!=
1
));
}
SECTION
(
"number"
)
{
json
j
(
17
);
json
::
iterator
it
=
j
.
begin
();
CHECK
(
it
.
m_it
.
generic
_iterator
==
0
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
0
);
++
it
;
CHECK
(
it
.
m_it
.
generic
_iterator
==
1
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
1
);
++
it
;
CHECK
((
it
.
m_it
.
generic_iterator
!=
0
and
it
.
m_it
.
generic
_iterator
!=
1
));
CHECK
((
it
.
m_it
.
primitive_iterator
!=
0
and
it
.
m_it
.
primitive
_iterator
!=
1
));
}
SECTION
(
"object"
)
...
...
@@ -6900,18 +6900,18 @@ TEST_CASE("iterator class")
{
json
j
(
json
::
value_t
::
null
);
json
::
iterator
it
=
j
.
end
();
CHECK
(
it
.
m_it
.
generic
_iterator
==
1
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
1
);
}
SECTION
(
"number"
)
{
json
j
(
17
);
json
::
iterator
it
=
j
.
end
();
CHECK
(
it
.
m_it
.
generic
_iterator
==
1
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
1
);
it
--
;
CHECK
(
it
.
m_it
.
generic
_iterator
==
0
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
0
);
it
--
;
CHECK
((
it
.
m_it
.
generic_iterator
!=
0
and
it
.
m_it
.
generic
_iterator
!=
1
));
CHECK
((
it
.
m_it
.
primitive_iterator
!=
0
and
it
.
m_it
.
primitive
_iterator
!=
1
));
}
SECTION
(
"object"
)
...
...
@@ -6949,18 +6949,18 @@ TEST_CASE("iterator class")
{
json
j
(
json
::
value_t
::
null
);
json
::
iterator
it
=
j
.
end
();
CHECK
(
it
.
m_it
.
generic
_iterator
==
1
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
1
);
}
SECTION
(
"number"
)
{
json
j
(
17
);
json
::
iterator
it
=
j
.
end
();
CHECK
(
it
.
m_it
.
generic
_iterator
==
1
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
1
);
--
it
;
CHECK
(
it
.
m_it
.
generic
_iterator
==
0
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
0
);
--
it
;
CHECK
((
it
.
m_it
.
generic_iterator
!=
0
and
it
.
m_it
.
generic
_iterator
!=
1
));
CHECK
((
it
.
m_it
.
primitive_iterator
!=
0
and
it
.
m_it
.
primitive
_iterator
!=
1
));
}
SECTION
(
"object"
)
...
...
@@ -7162,20 +7162,20 @@ TEST_CASE("const_iterator class")
{
json
j
(
json
::
value_t
::
null
);
json
::
const_iterator
it
=
j
.
cbegin
();
CHECK
(
it
.
m_it
.
generic
_iterator
==
1
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
1
);
it
++
;
CHECK
((
it
.
m_it
.
generic_iterator
!=
0
and
it
.
m_it
.
generic
_iterator
!=
1
));
CHECK
((
it
.
m_it
.
primitive_iterator
!=
0
and
it
.
m_it
.
primitive
_iterator
!=
1
));
}
SECTION
(
"number"
)
{
json
j
(
17
);
json
::
const_iterator
it
=
j
.
cbegin
();
CHECK
(
it
.
m_it
.
generic
_iterator
==
0
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
0
);
it
++
;
CHECK
(
it
.
m_it
.
generic
_iterator
==
1
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
1
);
it
++
;
CHECK
((
it
.
m_it
.
generic_iterator
!=
0
and
it
.
m_it
.
generic
_iterator
!=
1
));
CHECK
((
it
.
m_it
.
primitive_iterator
!=
0
and
it
.
m_it
.
primitive
_iterator
!=
1
));
}
SECTION
(
"object"
)
...
...
@@ -7213,20 +7213,20 @@ TEST_CASE("const_iterator class")
{
json
j
(
json
::
value_t
::
null
);
json
::
const_iterator
it
=
j
.
cbegin
();
CHECK
(
it
.
m_it
.
generic
_iterator
==
1
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
1
);
++
it
;
CHECK
((
it
.
m_it
.
generic_iterator
!=
0
and
it
.
m_it
.
generic
_iterator
!=
1
));
CHECK
((
it
.
m_it
.
primitive_iterator
!=
0
and
it
.
m_it
.
primitive
_iterator
!=
1
));
}
SECTION
(
"number"
)
{
json
j
(
17
);
json
::
const_iterator
it
=
j
.
cbegin
();
CHECK
(
it
.
m_it
.
generic
_iterator
==
0
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
0
);
++
it
;
CHECK
(
it
.
m_it
.
generic
_iterator
==
1
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
1
);
++
it
;
CHECK
((
it
.
m_it
.
generic_iterator
!=
0
and
it
.
m_it
.
generic
_iterator
!=
1
));
CHECK
((
it
.
m_it
.
primitive_iterator
!=
0
and
it
.
m_it
.
primitive
_iterator
!=
1
));
}
SECTION
(
"object"
)
...
...
@@ -7264,18 +7264,18 @@ TEST_CASE("const_iterator class")
{
json
j
(
json
::
value_t
::
null
);
json
::
const_iterator
it
=
j
.
cend
();
CHECK
(
it
.
m_it
.
generic
_iterator
==
1
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
1
);
}
SECTION
(
"number"
)
{
json
j
(
17
);
json
::
const_iterator
it
=
j
.
cend
();
CHECK
(
it
.
m_it
.
generic
_iterator
==
1
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
1
);
it
--
;
CHECK
(
it
.
m_it
.
generic
_iterator
==
0
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
0
);
it
--
;
CHECK
((
it
.
m_it
.
generic_iterator
!=
0
and
it
.
m_it
.
generic
_iterator
!=
1
));
CHECK
((
it
.
m_it
.
primitive_iterator
!=
0
and
it
.
m_it
.
primitive
_iterator
!=
1
));
}
SECTION
(
"object"
)
...
...
@@ -7313,18 +7313,18 @@ TEST_CASE("const_iterator class")
{
json
j
(
json
::
value_t
::
null
);
json
::
const_iterator
it
=
j
.
cend
();
CHECK
(
it
.
m_it
.
generic
_iterator
==
1
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
1
);
}
SECTION
(
"number"
)
{
json
j
(
17
);
json
::
const_iterator
it
=
j
.
cend
();
CHECK
(
it
.
m_it
.
generic
_iterator
==
1
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
1
);
--
it
;
CHECK
(
it
.
m_it
.
generic
_iterator
==
0
);
CHECK
(
it
.
m_it
.
primitive
_iterator
==
0
);
--
it
;
CHECK
((
it
.
m_it
.
generic_iterator
!=
0
and
it
.
m_it
.
generic
_iterator
!=
1
));
CHECK
((
it
.
m_it
.
primitive_iterator
!=
0
and
it
.
m_it
.
primitive
_iterator
!=
1
));
}
SECTION
(
"object"
)
...
...
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