refactored generic iterator into a new class primitive_iterator_t

This commit is contained in:
Niels 2015-07-05 22:22:15 +02:00
parent 82a6995306
commit 2bc5d893c8
3 changed files with 236 additions and 130 deletions

View file

@ -1139,7 +1139,7 @@ class basic_json
case value_t::boolean: case value_t::boolean:
case value_t::string: 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"); throw std::out_of_range("iterators out of range");
} }
@ -2572,7 +2572,7 @@ class basic_json
case value_t::boolean: case value_t::boolean:
case value_t::string: 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"); throw std::out_of_range("iterator out of range");
} }
@ -2665,7 +2665,7 @@ class basic_json
case value_t::boolean: case value_t::boolean:
case value_t::string: 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"); throw std::out_of_range("iterators out of range");
} }
@ -3198,10 +3198,10 @@ class basic_json
defined as follows: defined as follows:
Value type | return value Value type | return value
----------- | ------------- ----------- | -------------
null | @c 0 null | @c 0 (same as size())
boolean | @c 1 boolean | @c 1 (same as size())
string | @c 1 string | @c 1 (same as size())
number | @c 1 number | @c 1 (same as size())
object | result of function object_t::max_size() object | result of function object_t::max_size()
array | result of function array_t::max_size() array | result of function array_t::max_size()
@ -3223,11 +3223,6 @@ class basic_json
{ {
switch (m_type) switch (m_type)
{ {
case (value_t::null):
{
return 0;
}
case (value_t::array): case (value_t::array):
{ {
return m_value.array->max_size(); return m_value.array->max_size();
@ -3240,8 +3235,8 @@ class basic_json
default: default:
{ {
// all other types have max_size 1 // all other types have max_size() == size()
return 1; return size();
} }
} }
} }
@ -3974,7 +3969,7 @@ class basic_json
default: default:
{ {
if (c >= 0 and c <= 0x1f) if (c >= 0x00 and c <= 0x1f)
{ {
// control characters (everything between 0x00 and 0x1f) // control characters (everything between 0x00 and 0x1f)
// -> create four-digit hex representation // -> create four-digit hex representation
@ -4162,6 +4157,64 @@ class basic_json
// iterators // // 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 /// an iterator value
union internal_iterator union internal_iterator
{ {
@ -4170,10 +4223,10 @@ class basic_json
/// iterator for JSON arrays /// iterator for JSON arrays
typename array_t::iterator array_iterator; typename array_t::iterator array_iterator;
/// generic iterator for all other types /// generic iterator for all other types
difference_type generic_iterator; primitive_iterator_t primitive_iterator;
/// default constructor // leave the union un-initialized
internal_iterator() : generic_iterator(-1) {} internal_iterator() {}
}; };
public: public:
@ -4215,7 +4268,7 @@ class basic_json
} }
default: default:
{ {
m_it.generic_iterator = -1; m_it.primitive_iterator = primitive_iterator_t();
break; break;
} }
} }
@ -4260,13 +4313,13 @@ class basic_json
case (basic_json::value_t::null): case (basic_json::value_t::null):
{ {
// set to end so begin()==end() is true: null is empty // set to end so begin()==end() is true: null is empty
m_it.generic_iterator = 1; m_it.primitive_iterator.set_end();
break; break;
} }
default: default:
{ {
m_it.generic_iterator = 0; m_it.primitive_iterator.set_begin();
break; break;
} }
} }
@ -4291,7 +4344,7 @@ class basic_json
default: default:
{ {
m_it.generic_iterator = 1; m_it.primitive_iterator.set_end();
break; break;
} }
} }
@ -4320,7 +4373,7 @@ class basic_json
default: default:
{ {
if (m_it.generic_iterator == 0) if (m_it.primitive_iterator.is_begin())
{ {
return *m_object; return *m_object;
} }
@ -4354,7 +4407,7 @@ class basic_json
default: default:
{ {
if (m_it.generic_iterator == 0) if (m_it.primitive_iterator.is_begin())
{ {
return m_object; return m_object;
} }
@ -4387,7 +4440,7 @@ class basic_json
default: default:
{ {
m_it.generic_iterator++; m_it.primitive_iterator++;
break; break;
} }
} }
@ -4414,7 +4467,7 @@ class basic_json
default: default:
{ {
++m_it.generic_iterator; ++m_it.primitive_iterator;
break; break;
} }
} }
@ -4443,7 +4496,7 @@ class basic_json
default: default:
{ {
m_it.generic_iterator--; m_it.primitive_iterator--;
break; break;
} }
} }
@ -4470,7 +4523,7 @@ class basic_json
default: default:
{ {
--m_it.generic_iterator; --m_it.primitive_iterator;
break; break;
} }
} }
@ -4501,7 +4554,7 @@ class basic_json
default: 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: 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: default:
{ {
m_it.generic_iterator += i; m_it.primitive_iterator += i;
break; break;
} }
} }
@ -4624,7 +4677,7 @@ class basic_json
default: 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: default:
{ {
if (m_it.generic_iterator == -n) if (m_it.primitive_iterator == -n)
{ {
return *m_object; return *m_object;
} }
@ -4731,7 +4784,7 @@ class basic_json
} }
default: default:
{ {
m_it.generic_iterator = -1; m_it.primitive_iterator = primitive_iterator_t();
break; break;
} }
} }
@ -4756,7 +4809,7 @@ class basic_json
default: default:
{ {
m_it.generic_iterator = other.m_it.generic_iterator; m_it.primitive_iterator = other.m_it.primitive_iterator;
break; break;
} }
} }
@ -4801,13 +4854,13 @@ class basic_json
case (basic_json::value_t::null): case (basic_json::value_t::null):
{ {
// set to end so begin()==end() is true: null is empty // set to end so begin()==end() is true: null is empty
m_it.generic_iterator = 1; m_it.primitive_iterator.set_end();
break; break;
} }
default: default:
{ {
m_it.generic_iterator = 0; m_it.primitive_iterator.set_begin();
break; break;
} }
} }
@ -4832,7 +4885,7 @@ class basic_json
default: default:
{ {
m_it.generic_iterator = 1; m_it.primitive_iterator.set_end();
break; break;
} }
} }
@ -4861,7 +4914,7 @@ class basic_json
default: default:
{ {
if (m_it.generic_iterator == 0) if (m_it.primitive_iterator.is_begin())
{ {
return *m_object; return *m_object;
} }
@ -4890,7 +4943,7 @@ class basic_json
default: default:
{ {
if (m_it.generic_iterator == 0) if (m_it.primitive_iterator.is_begin())
{ {
return m_object; return m_object;
} }
@ -4930,7 +4983,7 @@ class basic_json
default: default:
{ {
++m_it.generic_iterator; ++m_it.primitive_iterator;
break; break;
} }
} }
@ -4966,7 +5019,7 @@ class basic_json
default: default:
{ {
--m_it.generic_iterator; --m_it.primitive_iterator;
break; break;
} }
} }
@ -4997,7 +5050,7 @@ class basic_json
default: 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: 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: default:
{ {
m_it.generic_iterator += i; m_it.primitive_iterator += i;
break; break;
} }
} }
@ -5119,7 +5172,7 @@ class basic_json
default: 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: default:
{ {
if (m_it.generic_iterator == -n) if (m_it.primitive_iterator == -n)
{ {
return *m_object; return *m_object;
} }

View file

@ -1139,7 +1139,7 @@ class basic_json
case value_t::boolean: case value_t::boolean:
case value_t::string: 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"); throw std::out_of_range("iterators out of range");
} }
@ -2572,7 +2572,7 @@ class basic_json
case value_t::boolean: case value_t::boolean:
case value_t::string: 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"); throw std::out_of_range("iterator out of range");
} }
@ -2665,7 +2665,7 @@ class basic_json
case value_t::boolean: case value_t::boolean:
case value_t::string: 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"); throw std::out_of_range("iterators out of range");
} }
@ -3198,10 +3198,10 @@ class basic_json
defined as follows: defined as follows:
Value type | return value Value type | return value
----------- | ------------- ----------- | -------------
null | @c 0 null | @c 0 (same as size())
boolean | @c 1 boolean | @c 1 (same as size())
string | @c 1 string | @c 1 (same as size())
number | @c 1 number | @c 1 (same as size())
object | result of function object_t::max_size() object | result of function object_t::max_size()
array | result of function array_t::max_size() array | result of function array_t::max_size()
@ -3223,11 +3223,6 @@ class basic_json
{ {
switch (m_type) switch (m_type)
{ {
case (value_t::null):
{
return 0;
}
case (value_t::array): case (value_t::array):
{ {
return m_value.array->max_size(); return m_value.array->max_size();
@ -3240,8 +3235,8 @@ class basic_json
default: default:
{ {
// all other types have max_size 1 // all other types have max_size() == size()
return 1; return size();
} }
} }
} }
@ -3974,7 +3969,7 @@ class basic_json
default: default:
{ {
if (c >= 0 and c <= 0x1f) if (c >= 0x00 and c <= 0x1f)
{ {
// control characters (everything between 0x00 and 0x1f) // control characters (everything between 0x00 and 0x1f)
// -> create four-digit hex representation // -> create four-digit hex representation
@ -4162,6 +4157,64 @@ class basic_json
// iterators // // 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 /// an iterator value
union internal_iterator union internal_iterator
{ {
@ -4170,10 +4223,10 @@ class basic_json
/// iterator for JSON arrays /// iterator for JSON arrays
typename array_t::iterator array_iterator; typename array_t::iterator array_iterator;
/// generic iterator for all other types /// generic iterator for all other types
difference_type generic_iterator; primitive_iterator_t primitive_iterator;
/// default constructor // leave the union un-initialized
internal_iterator() : generic_iterator(-1) {} internal_iterator() {}
}; };
public: public:
@ -4215,7 +4268,7 @@ class basic_json
} }
default: default:
{ {
m_it.generic_iterator = -1; m_it.primitive_iterator = primitive_iterator_t();
break; break;
} }
} }
@ -4260,13 +4313,13 @@ class basic_json
case (basic_json::value_t::null): case (basic_json::value_t::null):
{ {
// set to end so begin()==end() is true: null is empty // set to end so begin()==end() is true: null is empty
m_it.generic_iterator = 1; m_it.primitive_iterator.set_end();
break; break;
} }
default: default:
{ {
m_it.generic_iterator = 0; m_it.primitive_iterator.set_begin();
break; break;
} }
} }
@ -4291,7 +4344,7 @@ class basic_json
default: default:
{ {
m_it.generic_iterator = 1; m_it.primitive_iterator.set_end();
break; break;
} }
} }
@ -4320,7 +4373,7 @@ class basic_json
default: default:
{ {
if (m_it.generic_iterator == 0) if (m_it.primitive_iterator.is_begin())
{ {
return *m_object; return *m_object;
} }
@ -4354,7 +4407,7 @@ class basic_json
default: default:
{ {
if (m_it.generic_iterator == 0) if (m_it.primitive_iterator.is_begin())
{ {
return m_object; return m_object;
} }
@ -4387,7 +4440,7 @@ class basic_json
default: default:
{ {
m_it.generic_iterator++; m_it.primitive_iterator++;
break; break;
} }
} }
@ -4414,7 +4467,7 @@ class basic_json
default: default:
{ {
++m_it.generic_iterator; ++m_it.primitive_iterator;
break; break;
} }
} }
@ -4443,7 +4496,7 @@ class basic_json
default: default:
{ {
m_it.generic_iterator--; m_it.primitive_iterator--;
break; break;
} }
} }
@ -4470,7 +4523,7 @@ class basic_json
default: default:
{ {
--m_it.generic_iterator; --m_it.primitive_iterator;
break; break;
} }
} }
@ -4501,7 +4554,7 @@ class basic_json
default: 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: 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: default:
{ {
m_it.generic_iterator += i; m_it.primitive_iterator += i;
break; break;
} }
} }
@ -4624,7 +4677,7 @@ class basic_json
default: 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: default:
{ {
if (m_it.generic_iterator == -n) if (m_it.primitive_iterator == -n)
{ {
return *m_object; return *m_object;
} }
@ -4731,7 +4784,7 @@ class basic_json
} }
default: default:
{ {
m_it.generic_iterator = -1; m_it.primitive_iterator = primitive_iterator_t();
break; break;
} }
} }
@ -4756,7 +4809,7 @@ class basic_json
default: default:
{ {
m_it.generic_iterator = other.m_it.generic_iterator; m_it.primitive_iterator = other.m_it.primitive_iterator;
break; break;
} }
} }
@ -4801,13 +4854,13 @@ class basic_json
case (basic_json::value_t::null): case (basic_json::value_t::null):
{ {
// set to end so begin()==end() is true: null is empty // set to end so begin()==end() is true: null is empty
m_it.generic_iterator = 1; m_it.primitive_iterator.set_end();
break; break;
} }
default: default:
{ {
m_it.generic_iterator = 0; m_it.primitive_iterator.set_begin();
break; break;
} }
} }
@ -4832,7 +4885,7 @@ class basic_json
default: default:
{ {
m_it.generic_iterator = 1; m_it.primitive_iterator.set_end();
break; break;
} }
} }
@ -4861,7 +4914,7 @@ class basic_json
default: default:
{ {
if (m_it.generic_iterator == 0) if (m_it.primitive_iterator.is_begin())
{ {
return *m_object; return *m_object;
} }
@ -4890,7 +4943,7 @@ class basic_json
default: default:
{ {
if (m_it.generic_iterator == 0) if (m_it.primitive_iterator.is_begin())
{ {
return m_object; return m_object;
} }
@ -4930,7 +4983,7 @@ class basic_json
default: default:
{ {
++m_it.generic_iterator; ++m_it.primitive_iterator;
break; break;
} }
} }
@ -4966,7 +5019,7 @@ class basic_json
default: default:
{ {
--m_it.generic_iterator; --m_it.primitive_iterator;
break; break;
} }
} }
@ -4997,7 +5050,7 @@ class basic_json
default: 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: 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: default:
{ {
m_it.generic_iterator += i; m_it.primitive_iterator += i;
break; break;
} }
} }
@ -5119,7 +5172,7 @@ class basic_json
default: 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: default:
{ {
if (m_it.generic_iterator == -n) if (m_it.primitive_iterator == -n)
{ {
return *m_object; return *m_object;
} }

View file

@ -6798,20 +6798,20 @@ TEST_CASE("iterator class")
{ {
json j(json::value_t::null); json j(json::value_t::null);
json::iterator it = j.begin(); json::iterator it = j.begin();
CHECK(it.m_it.generic_iterator == 1); CHECK(it.m_it.primitive_iterator == 1);
it++; 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") SECTION("number")
{ {
json j(17); json j(17);
json::iterator it = j.begin(); json::iterator it = j.begin();
CHECK(it.m_it.generic_iterator == 0); CHECK(it.m_it.primitive_iterator == 0);
it++; it++;
CHECK(it.m_it.generic_iterator == 1); CHECK(it.m_it.primitive_iterator == 1);
it++; 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") SECTION("object")
@ -6849,20 +6849,20 @@ TEST_CASE("iterator class")
{ {
json j(json::value_t::null); json j(json::value_t::null);
json::iterator it = j.begin(); json::iterator it = j.begin();
CHECK(it.m_it.generic_iterator == 1); CHECK(it.m_it.primitive_iterator == 1);
++it; ++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") SECTION("number")
{ {
json j(17); json j(17);
json::iterator it = j.begin(); json::iterator it = j.begin();
CHECK(it.m_it.generic_iterator == 0); CHECK(it.m_it.primitive_iterator == 0);
++it; ++it;
CHECK(it.m_it.generic_iterator == 1); CHECK(it.m_it.primitive_iterator == 1);
++it; ++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") SECTION("object")
@ -6900,18 +6900,18 @@ TEST_CASE("iterator class")
{ {
json j(json::value_t::null); json j(json::value_t::null);
json::iterator it = j.end(); json::iterator it = j.end();
CHECK(it.m_it.generic_iterator == 1); CHECK(it.m_it.primitive_iterator == 1);
} }
SECTION("number") SECTION("number")
{ {
json j(17); json j(17);
json::iterator it = j.end(); json::iterator it = j.end();
CHECK(it.m_it.generic_iterator == 1); CHECK(it.m_it.primitive_iterator == 1);
it--; it--;
CHECK(it.m_it.generic_iterator == 0); CHECK(it.m_it.primitive_iterator == 0);
it--; 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") SECTION("object")
@ -6949,18 +6949,18 @@ TEST_CASE("iterator class")
{ {
json j(json::value_t::null); json j(json::value_t::null);
json::iterator it = j.end(); json::iterator it = j.end();
CHECK(it.m_it.generic_iterator == 1); CHECK(it.m_it.primitive_iterator == 1);
} }
SECTION("number") SECTION("number")
{ {
json j(17); json j(17);
json::iterator it = j.end(); json::iterator it = j.end();
CHECK(it.m_it.generic_iterator == 1); CHECK(it.m_it.primitive_iterator == 1);
--it; --it;
CHECK(it.m_it.generic_iterator == 0); CHECK(it.m_it.primitive_iterator == 0);
--it; --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") SECTION("object")
@ -7162,20 +7162,20 @@ TEST_CASE("const_iterator class")
{ {
json j(json::value_t::null); json j(json::value_t::null);
json::const_iterator it = j.cbegin(); json::const_iterator it = j.cbegin();
CHECK(it.m_it.generic_iterator == 1); CHECK(it.m_it.primitive_iterator == 1);
it++; 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") SECTION("number")
{ {
json j(17); json j(17);
json::const_iterator it = j.cbegin(); json::const_iterator it = j.cbegin();
CHECK(it.m_it.generic_iterator == 0); CHECK(it.m_it.primitive_iterator == 0);
it++; it++;
CHECK(it.m_it.generic_iterator == 1); CHECK(it.m_it.primitive_iterator == 1);
it++; 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") SECTION("object")
@ -7213,20 +7213,20 @@ TEST_CASE("const_iterator class")
{ {
json j(json::value_t::null); json j(json::value_t::null);
json::const_iterator it = j.cbegin(); json::const_iterator it = j.cbegin();
CHECK(it.m_it.generic_iterator == 1); CHECK(it.m_it.primitive_iterator == 1);
++it; ++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") SECTION("number")
{ {
json j(17); json j(17);
json::const_iterator it = j.cbegin(); json::const_iterator it = j.cbegin();
CHECK(it.m_it.generic_iterator == 0); CHECK(it.m_it.primitive_iterator == 0);
++it; ++it;
CHECK(it.m_it.generic_iterator == 1); CHECK(it.m_it.primitive_iterator == 1);
++it; ++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") SECTION("object")
@ -7264,18 +7264,18 @@ TEST_CASE("const_iterator class")
{ {
json j(json::value_t::null); json j(json::value_t::null);
json::const_iterator it = j.cend(); json::const_iterator it = j.cend();
CHECK(it.m_it.generic_iterator == 1); CHECK(it.m_it.primitive_iterator == 1);
} }
SECTION("number") SECTION("number")
{ {
json j(17); json j(17);
json::const_iterator it = j.cend(); json::const_iterator it = j.cend();
CHECK(it.m_it.generic_iterator == 1); CHECK(it.m_it.primitive_iterator == 1);
it--; it--;
CHECK(it.m_it.generic_iterator == 0); CHECK(it.m_it.primitive_iterator == 0);
it--; 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") SECTION("object")
@ -7313,18 +7313,18 @@ TEST_CASE("const_iterator class")
{ {
json j(json::value_t::null); json j(json::value_t::null);
json::const_iterator it = j.cend(); json::const_iterator it = j.cend();
CHECK(it.m_it.generic_iterator == 1); CHECK(it.m_it.primitive_iterator == 1);
} }
SECTION("number") SECTION("number")
{ {
json j(17); json j(17);
json::const_iterator it = j.cend(); json::const_iterator it = j.cend();
CHECK(it.m_it.generic_iterator == 1); CHECK(it.m_it.primitive_iterator == 1);
--it; --it;
CHECK(it.m_it.generic_iterator == 0); CHECK(it.m_it.primitive_iterator == 0);
--it; --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") SECTION("object")