Commit caf82be2 authored by Niels's avatar Niels

added reverse iterators

parent 87c250d8
This diff is collapsed.
...@@ -84,6 +84,10 @@ class basic_json ...@@ -84,6 +84,10 @@ class basic_json
using iterator = basic_json::iterator; using iterator = basic_json::iterator;
/// a const iterator for a basic_json container /// a const iterator for a basic_json container
using const_iterator = basic_json::const_iterator; using const_iterator = basic_json::const_iterator;
// a reverse iterator for a basic_json container
using reverse_iterator = std::reverse_iterator<iterator>;
/// a const reverse iterator for a basic_json container
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
/////////////////////////// ///////////////////////////
...@@ -255,6 +259,8 @@ class basic_json ...@@ -255,6 +259,8 @@ class basic_json
std::enable_if< std::enable_if<
not std::is_same<V, basic_json::iterator>::value and not std::is_same<V, basic_json::iterator>::value and
not std::is_same<V, basic_json::const_iterator>::value and not std::is_same<V, basic_json::const_iterator>::value and
not std::is_same<V, basic_json::reverse_iterator>::value and
not std::is_same<V, basic_json::const_reverse_iterator>::value and
std::is_constructible<basic_json, typename V::value_type>::value, int>::type std::is_constructible<basic_json, typename V::value_type>::value, int>::type
= 0> = 0>
inline basic_json(const V& value) inline basic_json(const V& value)
...@@ -437,7 +443,7 @@ class basic_json ...@@ -437,7 +443,7 @@ class basic_json
: m_type(std::move(other.m_type)), : m_type(std::move(other.m_type)),
m_value(std::move(other.m_value)) m_value(std::move(other.m_value))
{ {
// invaludate payload // invalidate payload
other.m_type = value_t::null; other.m_type = value_t::null;
other.m_value = {}; other.m_value = {};
} }
...@@ -461,23 +467,24 @@ class basic_json ...@@ -461,23 +467,24 @@ class basic_json
m_value.object = nullptr; m_value.object = nullptr;
break; break;
} }
case (value_t::array): case (value_t::array):
{ {
delete m_value.array; delete m_value.array;
m_value.array = nullptr; m_value.array = nullptr;
break; break;
} }
case (value_t::string): case (value_t::string):
{ {
delete m_value.string; delete m_value.string;
m_value.string = nullptr; m_value.string = nullptr;
break; break;
} }
case (value_t::null):
case (value_t::boolean): default:
case (value_t::number_integer):
case (value_t::number_float):
{ {
// all other types need no specific destructor
break; break;
} }
} }
...@@ -815,6 +822,38 @@ class basic_json ...@@ -815,6 +822,38 @@ class basic_json
return result; return result;
} }
/// returns a reverse iterator to the end of the container
inline reverse_iterator rbegin() const noexcept
{
reverse_iterator result(this);
result.set_end();
return result;
}
/// returns a reverse iterator to the beginning of the container
inline reverse_iterator rend() const noexcept
{
reverse_iterator result(this);
result.set_begin();
return result;
}
/// returns a const reverse iterator to the end of the container
inline const_reverse_iterator crbegin() const noexcept
{
const_reverse_iterator result(this);
result.set_end();
return result;
}
/// returns a const reverse iterator to the beginning of the container
inline const_reverse_iterator crend() const noexcept
{
const_reverse_iterator result(this);
result.set_begin();
return result;
}
////////////// //////////////
// capacity // // capacity //
...@@ -839,11 +878,14 @@ class basic_json ...@@ -839,11 +878,14 @@ class basic_json
{ {
return m_value.object->empty(); return m_value.object->empty();
} }
}
default:
{
// all other types are nonempty // all other types are nonempty
return false; return false;
} }
}
}
/// returns the number of elements /// returns the number of elements
inline size_type size() const noexcept inline size_type size() const noexcept
...@@ -864,11 +906,14 @@ class basic_json ...@@ -864,11 +906,14 @@ class basic_json
{ {
return m_value.object->size(); return m_value.object->size();
} }
}
default:
{
// all other types have size 1 // all other types have size 1
return 1; return 1;
} }
}
}
/// returns the maximum possible number of elements /// returns the maximum possible number of elements
inline size_type max_size() const noexcept inline size_type max_size() const noexcept
...@@ -889,11 +934,14 @@ class basic_json ...@@ -889,11 +934,14 @@ class basic_json
{ {
return m_value.object->max_size(); return m_value.object->max_size();
} }
}
default:
{
// all other types have max_size 1 // all other types have max_size 1
return 1; return 1;
} }
}
}
/////////////// ///////////////
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment