From ed62129f8e2d2388e4c05d8de9d34ac197d09a2c Mon Sep 17 00:00:00 2001 From: HenryLee Date: Sat, 27 May 2017 13:44:14 +1000 Subject: [PATCH] Override n + iterator operator in the iterator --- src/json.hpp | 15 +++++++++++++-- test/src/unit-iterators2.cpp | 20 ++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/json.hpp b/src/json.hpp index 486b9c6c18..902d80f64e 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -8474,18 +8474,29 @@ class basic_json @brief add to iterator @pre The iterator is initialized; i.e. `m_object != nullptr`. */ - iter_impl operator+(difference_type i) + iter_impl operator+(difference_type i) const { auto result = *this; result += i; return result; } + /*! + @brief addition of distance and iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + friend iter_impl operator+(difference_type i, const iter_impl& it) + { + auto result = it; + result += i; + return result; + } + /*! @brief subtract from iterator @pre The iterator is initialized; i.e. `m_object != nullptr`. */ - iter_impl operator-(difference_type i) + iter_impl operator-(difference_type i) const { auto result = *this; result -= i; diff --git a/test/src/unit-iterators2.cpp b/test/src/unit-iterators2.cpp index e20417a176..d9f43e2f75 100644 --- a/test/src/unit-iterators2.cpp +++ b/test/src/unit-iterators2.cpp @@ -269,6 +269,16 @@ TEST_CASE("iterators 2") CHECK_THROWS_AS(it + 1, json::invalid_iterator); CHECK_THROWS_WITH(it + 1, "[json.exception.invalid_iterator.209] cannot use offsets with object iterators"); } + { + auto it = j_object.begin(); + CHECK_THROWS_AS(1 + it, json::invalid_iterator); + CHECK_THROWS_WITH(1 + it, "[json.exception.invalid_iterator.209] cannot use offsets with object iterators"); + } + { + auto it = j_object.cbegin(); + CHECK_THROWS_AS(1 + it, json::invalid_iterator); + CHECK_THROWS_WITH(1 + it, "[json.exception.invalid_iterator.209] cannot use offsets with object iterators"); + } { auto it = j_object.begin(); CHECK_THROWS_AS(it -= 1, json::invalid_iterator); @@ -688,6 +698,16 @@ TEST_CASE("iterators 2") CHECK_THROWS_AS(it + 1, json::invalid_iterator); CHECK_THROWS_WITH(it + 1, "[json.exception.invalid_iterator.209] cannot use offsets with object iterators"); } + { + auto it = j_object.rbegin(); + CHECK_THROWS_AS(1 + it, json::invalid_iterator); + CHECK_THROWS_WITH(1 + it, "[json.exception.invalid_iterator.209] cannot use offsets with object iterators"); + } + { + auto it = j_object.crbegin(); + CHECK_THROWS_AS(1 + it, json::invalid_iterator); + CHECK_THROWS_WITH(1 + it, "[json.exception.invalid_iterator.209] cannot use offsets with object iterators"); + } { auto it = j_object.rbegin(); CHECK_THROWS_AS(it -= 1, json::invalid_iterator);