🔨 cleanup + some noexcept

This commit is contained in:
Niels Lohmann 2018-01-16 20:41:04 +01:00
parent b182308eff
commit afe4571309
No known key found for this signature in database
GPG key ID: 7F3CEA63AE251B69
4 changed files with 28 additions and 35 deletions

View file

@ -79,7 +79,7 @@ template<typename IteratorType> class iteration_proxy
public:
/// construct iteration proxy from a container
explicit iteration_proxy(typename IteratorType::reference cont)
explicit iteration_proxy(typename IteratorType::reference cont) noexcept
: container(cont) {}
/// return iterator begin (needed for range-based for)

View file

@ -1,9 +1,7 @@
#pragma once
#include <ciso646> // not
#include <cstddef> // ptrdiff_t
#include <limits> // numeric_limits
#include <ostream> // ostream
namespace nlohmann
{
@ -20,9 +18,15 @@ end_value (`1`) models past the end.
*/
class primitive_iterator_t
{
public:
private:
using difference_type = std::ptrdiff_t;
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)();
public:
constexpr difference_type get_value() const noexcept
{
return m_it;
@ -62,10 +66,10 @@ class primitive_iterator_t
return lhs.m_it < rhs.m_it;
}
primitive_iterator_t operator+(difference_type i)
primitive_iterator_t operator+(difference_type n) noexcept
{
auto result = *this;
result += i;
result += n;
return result;
}
@ -74,55 +78,43 @@ class primitive_iterator_t
return lhs.m_it - rhs.m_it;
}
friend std::ostream& operator<<(std::ostream& os, primitive_iterator_t it)
{
return os << it.m_it;
}
primitive_iterator_t& operator++()
primitive_iterator_t& operator++() noexcept
{
++m_it;
return *this;
}
primitive_iterator_t const operator++(int)
primitive_iterator_t const operator++(int) noexcept
{
auto result = *this;
m_it++;
return result;
}
primitive_iterator_t& operator--()
primitive_iterator_t& operator--() noexcept
{
--m_it;
return *this;
}
primitive_iterator_t const operator--(int)
primitive_iterator_t const operator--(int) noexcept
{
auto result = *this;
m_it--;
return result;
}
primitive_iterator_t& operator+=(difference_type n)
primitive_iterator_t& operator+=(difference_type n) noexcept
{
m_it += n;
return *this;
}
primitive_iterator_t& operator-=(difference_type n)
primitive_iterator_t& operator-=(difference_type n) noexcept
{
m_it -= n;
return *this;
}
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)();
};
}
}

View file

@ -1,7 +1,5 @@
#pragma once
#include <ciso646> // not
// This file contains all internal macro definitions
// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them
@ -38,7 +36,7 @@
#endif
// allow to disable exceptions
#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && not defined(JSON_NOEXCEPTION)
#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION)
#define JSON_THROW(exception) throw exception
#define JSON_TRY try
#define JSON_CATCH(exception) catch(exception)

View file

@ -1301,7 +1301,7 @@ class basic_json
array = create<array_t>(std::move(value));
}
void destroy(value_t t)
void destroy(value_t t) noexcept
{
switch (t)
{
@ -1346,7 +1346,7 @@ class basic_json
value is changed, because the invariant expresses a relationship between
@a m_type and @a m_value.
*/
void assert_invariant() const
void assert_invariant() const noexcept
{
assert(m_type != value_t::object or m_value.object != nullptr);
assert(m_type != value_t::array or m_value.array != nullptr);
@ -2140,7 +2140,7 @@ class basic_json
@since version 1.0.0
*/
~basic_json()
~basic_json() noexcept
{
assert_invariant();
m_value.destroy(m_type);
@ -4481,7 +4481,7 @@ class basic_json
@note The name of this function is not yet final and may change in the
future.
*/
static iteration_proxy<iterator> iterator_wrapper(reference ref)
static iteration_proxy<iterator> iterator_wrapper(reference ref) noexcept
{
return iteration_proxy<iterator>(ref);
}
@ -4489,7 +4489,7 @@ class basic_json
/*!
@copydoc iterator_wrapper(reference)
*/
static iteration_proxy<const_iterator> iterator_wrapper(const_reference ref)
static iteration_proxy<const_iterator> iterator_wrapper(const_reference ref) noexcept
{
return iteration_proxy<const_iterator>(ref);
}
@ -4531,7 +4531,8 @@ class basic_json
@endcode
@note When iterating over an array, `key()` will return the index of the
element as string (see example).
element as string (see example). For primitive types (e.g., numbers),
`key()` returns an empty string.
@return iteration proxy object wrapping @a ref with an interface to use in
range-based for loops
@ -4542,8 +4543,10 @@ class basic_json
changes in the JSON value.
@complexity Constant.
@since version 3.x.x.
*/
iteration_proxy<iterator> items()
iteration_proxy<iterator> items() noexcept
{
return iteration_proxy<iterator>(*this);
}
@ -4551,7 +4554,7 @@ class basic_json
/*!
@copydoc items()
*/
iteration_proxy<const_iterator> items() const
iteration_proxy<const_iterator> items() const noexcept
{
return iteration_proxy<const_iterator>(*this);
}