From 4c98c971b838645416d7bac9de4e8a4d44e9d584 Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Wed, 20 Jul 2016 23:06:45 +0200 Subject: [PATCH 01/25] added benchmarks for numbers --- .gitignore | 2 ++ Makefile | 2 ++ benchmarks/benchmarks.cpp | 30 ++++++++++++++++++++++++++++ benchmarks/files/numbers/generate.py | 25 +++++++++++++++++++++++ 4 files changed, 59 insertions(+) create mode 100755 benchmarks/files/numbers/generate.py diff --git a/.gitignore b/.gitignore index d5bd2f7c..fd41a2e3 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,5 @@ me.nlohmann.json.docset android doc/xml + +benchmarks/files/numbers/*.json diff --git a/Makefile b/Makefile index 56e46d14..98f07687 100644 --- a/Makefile +++ b/Makefile @@ -10,6 +10,7 @@ all: json_unit # clean up clean: rm -fr json_unit json_benchmarks fuzz fuzz-testing *.dSYM + rm -fr benchmarks/files/numbers/*.json $(MAKE) clean -Cdoc @@ -85,6 +86,7 @@ pretty: # benchmarks json_benchmarks: benchmarks/benchmarks.cpp benchmarks/benchpress.hpp benchmarks/cxxopts.hpp src/json.hpp + cd benchmarks/files/numbers ; python generate.py $(CXX) -std=c++11 $(CXXFLAGS) -O3 -flto -I src -I benchmarks $< $(LDFLAGS) -o $@ ./json_benchmarks diff --git a/benchmarks/benchmarks.cpp b/benchmarks/benchmarks.cpp index 1f5eb5e3..ec6b462c 100644 --- a/benchmarks/benchmarks.cpp +++ b/benchmarks/benchmarks.cpp @@ -44,6 +44,36 @@ BENCHMARK("parse twitter.json", [](benchpress::context* ctx) } }) +BENCHMARK("parse numbers/floats.json", [](benchpress::context* ctx) +{ + for (size_t i = 0; i < ctx->num_iterations(); ++i) + { + std::ifstream input_file("benchmarks/files/numbers/floats.json"); + nlohmann::json j; + j << input_file; + } +}) + +BENCHMARK("parse numbers/signed_ints.json", [](benchpress::context* ctx) +{ + for (size_t i = 0; i < ctx->num_iterations(); ++i) + { + std::ifstream input_file("benchmarks/files/numbers/signed_ints.json"); + nlohmann::json j; + j << input_file; + } +}) + +BENCHMARK("parse numbers/unsigned_ints.json", [](benchpress::context* ctx) +{ + for (size_t i = 0; i < ctx->num_iterations(); ++i) + { + std::ifstream input_file("benchmarks/files/numbers/unsigned_ints.json"); + nlohmann::json j; + j << input_file; + } +}) + BENCHMARK("dump jeopardy.json", [](benchpress::context* ctx) { std::ifstream input_file("benchmarks/files/jeopardy/jeopardy.json"); diff --git a/benchmarks/files/numbers/generate.py b/benchmarks/files/numbers/generate.py new file mode 100755 index 00000000..714ee3a1 --- /dev/null +++ b/benchmarks/files/numbers/generate.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python + +import json +import random +import sys + +random.seed(0) + +# floats +result_floats = [] +for x in range(0, 1000000): + result_floats.append(random.uniform(-100000000.0, 100000000.0)) +json.dump(result_floats, open("floats.json", "w"), indent=2) + +# unsigned integers +result_uints = [] +for x in range(0, 1000000): + result_uints.append(random.randint(0, 18446744073709551615)) +json.dump(result_uints, open("unsigned_ints.json", "w"), indent=2) + +# signed integers +result_sints = [] +for x in range(0, 1000000): + result_sints.append(random.randint(-9223372036854775808, 9223372036854775807)) +json.dump(result_sints, open("signed_ints.json", "w"), indent=2) From 4e7501e59aff4c9dc27b4175bdefb49319d82ed3 Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Fri, 22 Jul 2016 15:34:45 +0200 Subject: [PATCH 02/25] minor changes - fixed a bug that did not discard strings with control characters between 0x10 and 0x1f - added termination proofs for two important loops - made get_ref() constexpr --- doc/images/callback_events.png | Bin 0 -> 46039 bytes src/json.hpp | 125 +++++++++++++++++++++++----- src/json.hpp.re2c | 143 ++++++++++++++++++++++++++------- test/src/unit.cpp | 33 ++++++++ 4 files changed, 248 insertions(+), 53 deletions(-) create mode 100644 doc/images/callback_events.png diff --git a/doc/images/callback_events.png b/doc/images/callback_events.png new file mode 100644 index 0000000000000000000000000000000000000000..09aa2b38355a7227b444b5b6779f2c7ca9fa05d6 GIT binary patch literal 46039 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 UkR#h1#Q*>R07*qoM6N<$f`xGfOaK4? literal 0 HcmV?d00001 diff --git a/src/json.hpp b/src/json.hpp index 29155327..00bee970 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -717,7 +717,19 @@ class basic_json This enumeration collects the different JSON types. It is internally used to distinguish the stored values, and the functions @ref is_null(), @ref is_object(), @ref is_array(), @ref is_string(), @ref is_boolean(), @ref - is_number(), and @ref is_discarded() rely on it. + is_number() (with @ref is_number_integer(), @ref is_number_unsigned(), and + @ref is_number_float()), @ref is_discarded(), @ref is_primitive(), and + @ref is_structured() rely on it. + + @note There are three enumeration entries (number_integer, + number_unsigned, and number_float), because the library distinguishes + these three types for numbers: @ref number_unsigned_t is used for unsigned + integers, @ref number_integer_t is used for signed integers, and @ref + number_float_t is used for floating-point numbers or to approximate + integers which do not fit in the limits of their respective type. + + @sa @ref basic_json(const value_t value_type) -- create a JSON value with + the default value for a given type @since version 1.0.0 */ @@ -728,7 +740,7 @@ class basic_json array, ///< array (ordered collection of values) string, ///< string value boolean, ///< boolean value - number_integer, ///< number value (integer) + number_integer, ///< number value (signed integer) number_unsigned, ///< number value (unsigned integer) number_float, ///< number value (floating-point) discarded ///< discarded by the the parser callback function @@ -758,7 +770,24 @@ class basic_json /*! @brief a JSON value - The actual storage for a JSON value of the @ref basic_json class. + The actual storage for a JSON value of the @ref basic_json class. This + union combines the different storage types for the JSON value types + defined in @ref value_t. + + JSON type | value_t type | used type + --------- | --------------- | ------------------------ + object | object | pointer to @ref object_t + array | array | pointer to @ref array_t + string | string | pointer to @ref string_t + boolean | boolean | @ref boolean_t + number | number_integer | @ref number_integer_t + number | number_unsigned | @ref number_unsigned_t + number | number_float | @ref number_float_t + null | null | *no value is stored* + + @note Variable-length types (objects, arrays, and strings) are stored as + pointers. The size of the union should not exceed 64 bits if the default + value types are used. @since version 1.0.0 */ @@ -874,6 +903,8 @@ class basic_json This enumeration lists the parser events that can trigger calling a callback function of type @ref parser_callback_t during parsing. + @image html callback_events.png "Example when certain parse events are triggered" + @since version 1.0.0 */ enum class parse_event_t : uint8_t @@ -916,6 +947,8 @@ class basic_json parse_event_t::array_end | the parser read `]` and finished processing a JSON array | depth of the parent of the JSON array | the parsed JSON array parse_event_t::value | the parser finished reading a JSON value | depth of the value | the parsed JSON value + @image html callback_events.png "Example when certain parse events are triggered" + Discarding a value (i.e., returning `false`) has different effects depending on the context in which function was called: @@ -2773,21 +2806,16 @@ class basic_json type of the current JSON */ template<typename ReferenceType, typename ThisType> - static ReferenceType get_ref_impl(ThisType& obj) + static constexpr ReferenceType get_ref_impl(ThisType& obj) { - // delegate the call to get_ptr<>() + // helper type using PointerType = typename std::add_pointer<ReferenceType>::type; - auto ptr = obj.template get_ptr<PointerType>(); - if (ptr != nullptr) - { - return *ptr; - } - else - { - throw std::domain_error("incompatible ReferenceType for get_ref, actual type is " + - obj.type_name()); - } + // delegate the call to get_ptr<>() + return obj.template get_ptr<PointerType>() != nullptr + ? *obj.template get_ptr<PointerType>() + : throw std::domain_error("incompatible ReferenceType for get_ref, actual type is " + + obj.type_name()); } public: @@ -3015,7 +3043,7 @@ class basic_json std::is_reference<ReferenceType>::value and std::is_const<typename std::remove_reference<ReferenceType>::type>::value , int>::type = 0> - ReferenceType get_ref() const + constexpr ReferenceType get_ref() const { // delegate call to get_ref_impl return get_ref_impl<ReferenceType>(*this); @@ -7286,6 +7314,8 @@ class basic_json @throw std::invalid_argument if the low surrogate is invalid; example: `""missing or wrong low surrogate""` + @complexity Constant. + @see <http://en.wikipedia.org/wiki/UTF-8#Sample_code> */ static string_t to_unicode(const std::size_t codepoint1, @@ -7402,6 +7432,17 @@ class basic_json function consists of a large block of code with `goto` jumps. @return the class of the next token read from the buffer + + @complexity Linear in the length of the input.\n + + Proposition: The loop below will always terminate for finite input.\n + + Proof (by contradiction): Assume a finite input. To loop forever, the + loop must never hit code with a `break` statement. The only code + snippets without a `break` statement are the continue statements for + whitespace and byte-order-marks. To loop forever, the input must be an + infinite sequence of whitespace or byte-order-marks. This contradicts + the assumption of finite input, q.e.d. */ token_type scan() noexcept { @@ -7422,8 +7463,8 @@ class basic_json { 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 0, 0, 32, 0, 0, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 160, 128, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 192, 192, 192, 192, 192, 192, 192, 192, @@ -7602,7 +7643,7 @@ basic_json_parser_6: basic_json_parser_9: yyaccept = 0; yych = *(m_marker = ++m_cursor); - if (yych <= 0x0F) + if (yych <= 0x1F) { goto basic_json_parser_5; } @@ -7760,7 +7801,7 @@ basic_json_parser_32: { goto basic_json_parser_31; } - if (yych <= 0x0F) + if (yych <= 0x1F) { goto basic_json_parser_33; } @@ -8233,16 +8274,53 @@ basic_json_parser_63: according to the nature of the escape. Some escapes create new characters (e.g., `"\\n"` is replaced by `"\n"`), some are copied as is (e.g., `"\\\\"`). Furthermore, Unicode escapes of the shape - `"\\uxxxx"` need special care. In this case, to_unicode takes care - of the construction of the values. + `"\\uxxxx"` need special care. In this case, @ref to_unicode takes + care of the construction of the values. 2. Unescaped characters are copied as is. + @pre `m_cursor - m_start >= 2`, meaning the length of the last token + is at least 2 bytes which is trivially true for any string (which + consists of at least two quotes). + + " c1 c2 c3 ... " + ^ ^ + m_start m_cursor + + @complexity Linear in the length of the string.\n + + Lemma: The loop body will always terminate.\n + + Proof (by contradiction): Assume the loop body does not terminate. As + the loop body does not contain another loop, one of the called + functions must never return. The called functions are `std::strtoul` + and @ref to_unicode. Neither function can loop forever, so the loop + body will never loop forever which contradicts the assumption that the + loop body does not terminate, q.e.d.\n + + Lemma: The loop condition for the for loop is eventually false.\n + + Proof (by contradiction): Assume the loop does not terminate. Due to + the above lemma, this can only be due to a tautological loop + condition; that is, the loop condition i < m_cursor - 1 must always be + true. Let x be the change of i for any loop iteration. Then + m_start + 1 + x < m_cursor - 1 must hold to loop indefinitely. + This can be rephrased to m_cursor - m_start - 2 > x. With the + precondition, we x <= 0, meaning that the loop condition holds + indefinitly if i is always decreased. However, observe that the + value of i is strictly increasing with each iteration, as it is + incremented by 1 in the iteration expression and never + decremented inside the loop body. Hence, the loop condition + will eventually be false which contradicts the assumption that + the loop condition is a tautology, q.e.d. + @return string value of current token without opening and closing quotes @throw std::out_of_range if to_unicode fails */ string_t get_string() const { + assert(m_cursor - m_start >= 2); + string_t result; result.reserve(static_cast<size_t>(m_cursor - m_start - 2)); @@ -8915,6 +8993,8 @@ basic_json_parser_63: /*! @brief create and return a reference to the pointed to value + + @complexity Linear in the number of reference tokens. */ reference get_and_create(reference j) const { @@ -9352,6 +9432,7 @@ basic_json_parser_63: basic_json result; // iterate the JSON object values + assert(value.m_value.object != nullptr); for (const auto& element : *value.m_value.object) { if (not element.second.is_primitive()) diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index 8eeedefe..05c49ec5 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -717,7 +717,19 @@ class basic_json This enumeration collects the different JSON types. It is internally used to distinguish the stored values, and the functions @ref is_null(), @ref is_object(), @ref is_array(), @ref is_string(), @ref is_boolean(), @ref - is_number(), and @ref is_discarded() rely on it. + is_number() (with @ref is_number_integer(), @ref is_number_unsigned(), and + @ref is_number_float()), @ref is_discarded(), @ref is_primitive(), and + @ref is_structured() rely on it. + + @note There are three enumeration entries (number_integer, + number_unsigned, and number_float), because the library distinguishes + these three types for numbers: @ref number_unsigned_t is used for unsigned + integers, @ref number_integer_t is used for signed integers, and @ref + number_float_t is used for floating-point numbers or to approximate + integers which do not fit in the limits of their respective type. + + @sa @ref basic_json(const value_t value_type) -- create a JSON value with + the default value for a given type @since version 1.0.0 */ @@ -728,7 +740,7 @@ class basic_json array, ///< array (ordered collection of values) string, ///< string value boolean, ///< boolean value - number_integer, ///< number value (integer) + number_integer, ///< number value (signed integer) number_unsigned, ///< number value (unsigned integer) number_float, ///< number value (floating-point) discarded ///< discarded by the the parser callback function @@ -758,7 +770,24 @@ class basic_json /*! @brief a JSON value - The actual storage for a JSON value of the @ref basic_json class. + The actual storage for a JSON value of the @ref basic_json class. This + union combines the different storage types for the JSON value types + defined in @ref value_t. + + JSON type | value_t type | used type + --------- | --------------- | ------------------------ + object | object | pointer to @ref object_t + array | array | pointer to @ref array_t + string | string | pointer to @ref string_t + boolean | boolean | @ref boolean_t + number | number_integer | @ref number_integer_t + number | number_unsigned | @ref number_unsigned_t + number | number_float | @ref number_float_t + null | null | *no value is stored* + + @note Variable-length types (objects, arrays, and strings) are stored as + pointers. The size of the union should not exceed 64 bits if the default + value types are used. @since version 1.0.0 */ @@ -874,6 +903,8 @@ class basic_json This enumeration lists the parser events that can trigger calling a callback function of type @ref parser_callback_t during parsing. + @image html callback_events.png "Example when certain parse events are triggered" + @since version 1.0.0 */ enum class parse_event_t : uint8_t @@ -916,6 +947,8 @@ class basic_json parse_event_t::array_end | the parser read `]` and finished processing a JSON array | depth of the parent of the JSON array | the parsed JSON array parse_event_t::value | the parser finished reading a JSON value | depth of the value | the parsed JSON value + @image html callback_events.png "Example when certain parse events are triggered" + Discarding a value (i.e., returning `false`) has different effects depending on the context in which function was called: @@ -2773,21 +2806,16 @@ class basic_json type of the current JSON */ template<typename ReferenceType, typename ThisType> - static ReferenceType get_ref_impl(ThisType& obj) + static constexpr ReferenceType get_ref_impl(ThisType& obj) { - // delegate the call to get_ptr<>() + // helper type using PointerType = typename std::add_pointer<ReferenceType>::type; - auto ptr = obj.template get_ptr<PointerType>(); - if (ptr != nullptr) - { - return *ptr; - } - else - { - throw std::domain_error("incompatible ReferenceType for get_ref, actual type is " + - obj.type_name()); - } + // delegate the call to get_ptr<>() + return obj.template get_ptr<PointerType>() != nullptr + ? *obj.template get_ptr<PointerType>() + : throw std::domain_error("incompatible ReferenceType for get_ref, actual type is " + + obj.type_name()); } public: @@ -3015,7 +3043,7 @@ class basic_json std::is_reference<ReferenceType>::value and std::is_const<typename std::remove_reference<ReferenceType>::type>::value , int>::type = 0> - ReferenceType get_ref() const + constexpr ReferenceType get_ref() const { // delegate call to get_ref_impl return get_ref_impl<ReferenceType>(*this); @@ -7286,6 +7314,8 @@ class basic_json @throw std::invalid_argument if the low surrogate is invalid; example: `""missing or wrong low surrogate""` + @complexity Constant. + @see <http://en.wikipedia.org/wiki/UTF-8#Sample_code> */ static string_t to_unicode(const std::size_t codepoint1, @@ -7402,6 +7432,17 @@ class basic_json function consists of a large block of code with `goto` jumps. @return the class of the next token read from the buffer + + @complexity Linear in the length of the input.\n + + Proposition: The loop below will always terminate for finite input.\n + + Proof (by contradiction): Assume a finite input. To loop forever, the + loop must never hit code with a `break` statement. The only code + snippets without a `break` statement are the continue statements for + whitespace and byte-order-marks. To loop forever, the input must be an + infinite sequence of whitespace or byte-order-marks. This contradicts + the assumption of finite input, q.e.d. */ token_type scan() noexcept { @@ -7447,32 +7488,32 @@ class basic_json "false" { last_token_type = token_type::literal_false; break; } // number - decimal_point = [.]; + decimal_point = "."; digit = [0-9]; digit_1_9 = [1-9]; - e = [eE]; - minus = [-]; - plus = [+]; - zero = [0]; - exp = e (minus|plus)? digit+; + e = "e" | "E"; + minus = "-"; + plus = "+"; + zero = "0"; + exp = e (minus | plus)? digit+; frac = decimal_point digit+; - int = (zero|digit_1_9 digit*); + int = (zero | digit_1_9 digit*); number = minus? int frac? exp?; number { last_token_type = token_type::value_number; break; } // string - quotation_mark = ["]; - escape = [\\]; - unescaped = [^"\\\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F]; - single_escaped = ["\\/bfnrt]; - unicode_escaped = [u][0-9a-fA-F]{4}; + quotation_mark = "\""; + escape = "\\"; + unescaped = [^"\\\x00-\x1f]; + single_escaped = "\"" | "\\" | "/" | "b" | "f" | "n" | "r" | "t"; + unicode_escaped = "u" [0-9a-fA-F]{4}; escaped = escape (single_escaped | unicode_escaped); char = unescaped | escaped; string = quotation_mark char* quotation_mark; string { last_token_type = token_type::value_string; break; } // end of file - '\000' { last_token_type = token_type::end_of_input; break; } + "\000" { last_token_type = token_type::end_of_input; break; } // anything else is an error . { last_token_type = token_type::parse_error; break; } @@ -7530,16 +7571,53 @@ class basic_json according to the nature of the escape. Some escapes create new characters (e.g., `"\\n"` is replaced by `"\n"`), some are copied as is (e.g., `"\\\\"`). Furthermore, Unicode escapes of the shape - `"\\uxxxx"` need special care. In this case, to_unicode takes care - of the construction of the values. + `"\\uxxxx"` need special care. In this case, @ref to_unicode takes + care of the construction of the values. 2. Unescaped characters are copied as is. + @pre `m_cursor - m_start >= 2`, meaning the length of the last token + is at least 2 bytes which is trivially true for any string (which + consists of at least two quotes). + + " c1 c2 c3 ... " + ^ ^ + m_start m_cursor + + @complexity Linear in the length of the string.\n + + Lemma: The loop body will always terminate.\n + + Proof (by contradiction): Assume the loop body does not terminate. As + the loop body does not contain another loop, one of the called + functions must never return. The called functions are `std::strtoul` + and @ref to_unicode. Neither function can loop forever, so the loop + body will never loop forever which contradicts the assumption that the + loop body does not terminate, q.e.d.\n + + Lemma: The loop condition for the for loop is eventually false.\n + + Proof (by contradiction): Assume the loop does not terminate. Due to + the above lemma, this can only be due to a tautological loop + condition; that is, the loop condition i < m_cursor - 1 must always be + true. Let x be the change of i for any loop iteration. Then + m_start + 1 + x < m_cursor - 1 must hold to loop indefinitely. + This can be rephrased to m_cursor - m_start - 2 > x. With the + precondition, we x <= 0, meaning that the loop condition holds + indefinitly if i is always decreased. However, observe that the + value of i is strictly increasing with each iteration, as it is + incremented by 1 in the iteration expression and never + decremented inside the loop body. Hence, the loop condition + will eventually be false which contradicts the assumption that + the loop condition is a tautology, q.e.d. + @return string value of current token without opening and closing quotes @throw std::out_of_range if to_unicode fails */ string_t get_string() const { + assert(m_cursor - m_start >= 2); + string_t result; result.reserve(static_cast<size_t>(m_cursor - m_start - 2)); @@ -8212,6 +8290,8 @@ class basic_json /*! @brief create and return a reference to the pointed to value + + @complexity Linear in the number of reference tokens. */ reference get_and_create(reference j) const { @@ -8649,6 +8729,7 @@ class basic_json basic_json result; // iterate the JSON object values + assert(value.m_value.object != nullptr); for (const auto& element : *value.m_value.object) { if (not element.second.is_primitive()) diff --git a/test/src/unit.cpp b/test/src/unit.cpp index a7ca7394..8ca9b01f 100644 --- a/test/src/unit.cpp +++ b/test/src/unit.cpp @@ -9716,6 +9716,39 @@ TEST_CASE("parser class") CHECK_THROWS_WITH(json::parser("\"\b\"").parse(), "parse error - unexpected '\"'"); // improve code coverage CHECK_THROWS_AS(json::parser("\uFF01").parse(), std::invalid_argument); + // unescaped control characters + CHECK_THROWS_AS(json::parser("\"\x00\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x01\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x02\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x03\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x04\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x05\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x06\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x07\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x08\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x09\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x0a\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x0b\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x0c\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x0d\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x0e\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x0f\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x10\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x11\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x12\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x13\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x14\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x15\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x16\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x17\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x18\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x19\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x1a\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x1b\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x1c\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x1d\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x1e\"").parse(), std::invalid_argument); + CHECK_THROWS_AS(json::parser("\"\x1f\"").parse(), std::invalid_argument); } SECTION("escaped") From 51a3829680dd5f5a67fe5c0390151c3157294639 Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Fri, 22 Jul 2016 15:53:38 +0200 Subject: [PATCH 03/25] reverted change to constexpr get_ref (does not work with GCC and MSVC) --- src/json.hpp | 19 +++++++++++++------ src/json.hpp.re2c | 19 +++++++++++++------ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/json.hpp b/src/json.hpp index 00bee970..b581fea1 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -2806,16 +2806,23 @@ class basic_json type of the current JSON */ template<typename ReferenceType, typename ThisType> - static constexpr ReferenceType get_ref_impl(ThisType& obj) + static ReferenceType get_ref_impl(ThisType& obj) { // helper type using PointerType = typename std::add_pointer<ReferenceType>::type; // delegate the call to get_ptr<>() - return obj.template get_ptr<PointerType>() != nullptr - ? *obj.template get_ptr<PointerType>() - : throw std::domain_error("incompatible ReferenceType for get_ref, actual type is " + - obj.type_name()); + auto ptr = obj.template get_ptr<PointerType>(); + + if (ptr != nullptr) + { + return *ptr; + } + else + { + throw std::domain_error("incompatible ReferenceType for get_ref, actual type is " + + obj.type_name()); + } } public: @@ -3043,7 +3050,7 @@ class basic_json std::is_reference<ReferenceType>::value and std::is_const<typename std::remove_reference<ReferenceType>::type>::value , int>::type = 0> - constexpr ReferenceType get_ref() const + ReferenceType get_ref() const { // delegate call to get_ref_impl return get_ref_impl<ReferenceType>(*this); diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index 05c49ec5..73185c6b 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -2806,16 +2806,23 @@ class basic_json type of the current JSON */ template<typename ReferenceType, typename ThisType> - static constexpr ReferenceType get_ref_impl(ThisType& obj) + static ReferenceType get_ref_impl(ThisType& obj) { // helper type using PointerType = typename std::add_pointer<ReferenceType>::type; // delegate the call to get_ptr<>() - return obj.template get_ptr<PointerType>() != nullptr - ? *obj.template get_ptr<PointerType>() - : throw std::domain_error("incompatible ReferenceType for get_ref, actual type is " + - obj.type_name()); + auto ptr = obj.template get_ptr<PointerType>(); + + if (ptr != nullptr) + { + return *ptr; + } + else + { + throw std::domain_error("incompatible ReferenceType for get_ref, actual type is " + + obj.type_name()); + } } public: @@ -3043,7 +3050,7 @@ class basic_json std::is_reference<ReferenceType>::value and std::is_const<typename std::remove_reference<ReferenceType>::type>::value , int>::type = 0> - constexpr ReferenceType get_ref() const + ReferenceType get_ref() const { // delegate call to get_ref_impl return get_ref_impl<ReferenceType>(*this); From ddfe86cc49f3c97b70efef77da505a05569a250f Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Fri, 22 Jul 2016 21:40:58 +0200 Subject: [PATCH 04/25] fixed a bug that was found in the discussion of #274 --- src/json.hpp | 2 +- src/json.hpp.re2c | 2 +- test/src/unit.cpp | 8 ++++++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/json.hpp b/src/json.hpp index b581fea1..614a700f 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -7283,7 +7283,7 @@ class basic_json explicit lexer(const string_t& s) noexcept : m_stream(nullptr), m_buffer(s) { - m_content = reinterpret_cast<const lexer_char_t*>(s.c_str()); + m_content = reinterpret_cast<const lexer_char_t*>(m_buffer.c_str()); assert(m_content != nullptr); m_start = m_cursor = m_content; m_limit = m_content + s.size(); diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index 73185c6b..a7c6f7e7 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -7283,7 +7283,7 @@ class basic_json explicit lexer(const string_t& s) noexcept : m_stream(nullptr), m_buffer(s) { - m_content = reinterpret_cast<const lexer_char_t*>(s.c_str()); + m_content = reinterpret_cast<const lexer_char_t*>(m_buffer.c_str()); assert(m_content != nullptr); m_start = m_cursor = m_content; m_limit = m_content + s.size(); diff --git a/test/src/unit.cpp b/test/src/unit.cpp index 8ca9b01f..2a92b327 100644 --- a/test/src/unit.cpp +++ b/test/src/unit.cpp @@ -10359,6 +10359,14 @@ TEST_CASE("parser class") CHECK(j_empty_array == json()); } } + + SECTION("copy constructor") + { + json::string_t* s = new json::string_t("[1,2,3,4]"); + json::parser p(*s); + delete s; + CHECK(p.parse() == json({1, 2, 3, 4})); + } } TEST_CASE("README", "[hide]") From 75dbbc55cf239fe225aa13b302622d4e015eca06 Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Sat, 23 Jul 2016 09:59:09 +0200 Subject: [PATCH 05/25] started to implement #283 --- src/json.hpp | 53 ++++++++- src/json.hpp.re2c | 53 ++++++++- test/src/unit.cpp | 267 +++++++++++++++++++++++++++------------------- 3 files changed, 260 insertions(+), 113 deletions(-) diff --git a/src/json.hpp b/src/json.hpp index 614a700f..a5bc864e 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -3633,8 +3633,8 @@ class basic_json /*! @brief access specified object element with default value - Returns either a copy of an object's element at the specified key @a key or - a given default value if no element with key @a key exists. + Returns either a copy of an object's element at the specified key @a key + or a given default value if no element with key @a key exists. The function is basically equivalent to executing @code {.cpp} @@ -3706,13 +3706,60 @@ class basic_json /*! @brief overload for a default value of type const char* - @copydoc basic_json::value() + @copydoc basic_json::value(const typename object_t::key_type&, ValueType) */ string_t value(const typename object_t::key_type& key, const char* default_value) const { return value(key, string_t(default_value)); } + /*! + @brief access specified object element via JSON Pointer with default value + + @param[in] ptr a JSON pointer to the element to access + @param[in] default_value the value to return if @a ptr found no value + + @tparam ValueType type compatible to JSON values, for instance `int` for + JSON integer numbers, `bool` for JSON booleans, or `std::vector` types for + JSON arrays. Note the type of the expected value at @a key and the default + value @a default_value must be compatible. + + @since version 2.0.2 + */ + template <class ValueType, typename + std::enable_if< + std::is_convertible<basic_json_t, ValueType>::value + , int>::type = 0> + ValueType value(const json_pointer& ptr, ValueType default_value) const + { + // at only works for objects + if (is_object()) + { + // if pointer resolves a value, return it or use default value + try + { + return ptr.get_checked(this); + } + catch (std::out_of_range&) + { + return default_value; + } + } + else + { + throw std::domain_error("cannot use value() with " + type_name()); + } + } + + /*! + @brief overload for a default value of type const char* + @copydoc basic_json::value(const json_pointer&, ValueType) + */ + string_t value(const json_pointer& ptr, const char* default_value) const + { + return value(ptr, string_t(default_value)); + } + /*! @brief access the first element diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index a7c6f7e7..2f5ecd2c 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -3633,8 +3633,8 @@ class basic_json /*! @brief access specified object element with default value - Returns either a copy of an object's element at the specified key @a key or - a given default value if no element with key @a key exists. + Returns either a copy of an object's element at the specified key @a key + or a given default value if no element with key @a key exists. The function is basically equivalent to executing @code {.cpp} @@ -3706,13 +3706,60 @@ class basic_json /*! @brief overload for a default value of type const char* - @copydoc basic_json::value() + @copydoc basic_json::value(const typename object_t::key_type&, ValueType) */ string_t value(const typename object_t::key_type& key, const char* default_value) const { return value(key, string_t(default_value)); } + /*! + @brief access specified object element via JSON Pointer with default value + + @param[in] ptr a JSON pointer to the element to access + @param[in] default_value the value to return if @a ptr found no value + + @tparam ValueType type compatible to JSON values, for instance `int` for + JSON integer numbers, `bool` for JSON booleans, or `std::vector` types for + JSON arrays. Note the type of the expected value at @a key and the default + value @a default_value must be compatible. + + @since version 2.0.2 + */ + template <class ValueType, typename + std::enable_if< + std::is_convertible<basic_json_t, ValueType>::value + , int>::type = 0> + ValueType value(const json_pointer& ptr, ValueType default_value) const + { + // at only works for objects + if (is_object()) + { + // if pointer resolves a value, return it or use default value + try + { + return ptr.get_checked(this); + } + catch (std::out_of_range&) + { + return default_value; + } + } + else + { + throw std::domain_error("cannot use value() with " + type_name()); + } + } + + /*! + @brief overload for a default value of type const char* + @copydoc basic_json::value(const json_pointer&, ValueType) + */ + string_t value(const json_pointer& ptr, const char* default_value) const + { + return value(ptr, string_t(default_value)); + } + /*! @brief access the first element diff --git a/test/src/unit.cpp b/test/src/unit.cpp index 2a92b327..2952708c 100644 --- a/test/src/unit.cpp +++ b/test/src/unit.cpp @@ -3768,123 +3768,176 @@ TEST_CASE("element access") SECTION("access specified element with default value") { - SECTION("access existing value") + SECTION("given a key") { - CHECK(j.value("integer", 2) == 1); - CHECK(j.value("integer", 1.0) == Approx(1)); - CHECK(j.value("unsigned", 2) == 1u); - CHECK(j.value("unsigned", 1.0) == Approx(1u)); - CHECK(j.value("null", json(1)) == json()); - CHECK(j.value("boolean", false) == true); - CHECK(j.value("string", "bar") == "hello world"); - CHECK(j.value("string", std::string("bar")) == "hello world"); - CHECK(j.value("floating", 12.34) == Approx(42.23)); - CHECK(j.value("floating", 12) == 42); - CHECK(j.value("object", json({{"foo", "bar"}})) == json(json::object())); - CHECK(j.value("array", json({10, 100})) == json({1, 2, 3})); + SECTION("access existing value") + { + CHECK(j.value("integer", 2) == 1); + CHECK(j.value("integer", 1.0) == Approx(1)); + CHECK(j.value("unsigned", 2) == 1u); + CHECK(j.value("unsigned", 1.0) == Approx(1u)); + CHECK(j.value("null", json(1)) == json()); + CHECK(j.value("boolean", false) == true); + CHECK(j.value("string", "bar") == "hello world"); + CHECK(j.value("string", std::string("bar")) == "hello world"); + CHECK(j.value("floating", 12.34) == Approx(42.23)); + CHECK(j.value("floating", 12) == 42); + CHECK(j.value("object", json({{"foo", "bar"}})) == json(json::object())); + CHECK(j.value("array", json({10, 100})) == json({1, 2, 3})); - CHECK(j_const.value("integer", 2) == 1); - CHECK(j_const.value("integer", 1.0) == Approx(1)); - CHECK(j_const.value("unsigned", 2) == 1u); - CHECK(j_const.value("unsigned", 1.0) == Approx(1u)); - CHECK(j_const.value("boolean", false) == true); - CHECK(j_const.value("string", "bar") == "hello world"); - CHECK(j_const.value("string", std::string("bar")) == "hello world"); - CHECK(j_const.value("floating", 12.34) == Approx(42.23)); - CHECK(j_const.value("floating", 12) == 42); - CHECK(j_const.value("object", json({{"foo", "bar"}})) == json(json::object())); - CHECK(j_const.value("array", json({10, 100})) == json({1, 2, 3})); + CHECK(j_const.value("integer", 2) == 1); + CHECK(j_const.value("integer", 1.0) == Approx(1)); + CHECK(j_const.value("unsigned", 2) == 1u); + CHECK(j_const.value("unsigned", 1.0) == Approx(1u)); + CHECK(j_const.value("boolean", false) == true); + CHECK(j_const.value("string", "bar") == "hello world"); + CHECK(j_const.value("string", std::string("bar")) == "hello world"); + CHECK(j_const.value("floating", 12.34) == Approx(42.23)); + CHECK(j_const.value("floating", 12) == 42); + CHECK(j_const.value("object", json({{"foo", "bar"}})) == json(json::object())); + CHECK(j_const.value("array", json({10, 100})) == json({1, 2, 3})); + } + + SECTION("access non-existing value") + { + CHECK(j.value("_", 2) == 2); + CHECK(j.value("_", 2u) == 2u); + CHECK(j.value("_", false) == false); + CHECK(j.value("_", "bar") == "bar"); + CHECK(j.value("_", 12.34) == Approx(12.34)); + CHECK(j.value("_", json({{"foo", "bar"}})) == json({{"foo", "bar"}})); + CHECK(j.value("_", json({10, 100})) == json({10, 100})); + + CHECK(j_const.value("_", 2) == 2); + CHECK(j_const.value("_", 2u) == 2u); + CHECK(j_const.value("_", false) == false); + CHECK(j_const.value("_", "bar") == "bar"); + CHECK(j_const.value("_", 12.34) == Approx(12.34)); + CHECK(j_const.value("_", json({{"foo", "bar"}})) == json({{"foo", "bar"}})); + CHECK(j_const.value("_", json({10, 100})) == json({10, 100})); + } + + SECTION("access on non-object type") + { + SECTION("null") + { + json j_nonobject(json::value_t::null); + const json j_nonobject_const(j_nonobject); + CHECK_THROWS_AS(j_nonobject.value("foo", 1), std::domain_error); + CHECK_THROWS_AS(j_nonobject_const.value("foo", 1), std::domain_error); + CHECK_THROWS_WITH(j_nonobject.value("foo", 1), "cannot use value() with null"); + CHECK_THROWS_WITH(j_nonobject_const.value("foo", 1), "cannot use value() with null"); + } + + SECTION("boolean") + { + json j_nonobject(json::value_t::boolean); + const json j_nonobject_const(j_nonobject); + CHECK_THROWS_AS(j_nonobject.value("foo", 1), std::domain_error); + CHECK_THROWS_AS(j_nonobject_const.value("foo", 1), std::domain_error); + CHECK_THROWS_WITH(j_nonobject.value("foo", 1), "cannot use value() with boolean"); + CHECK_THROWS_WITH(j_nonobject_const.value("foo", 1), "cannot use value() with boolean"); + } + + SECTION("string") + { + json j_nonobject(json::value_t::string); + const json j_nonobject_const(j_nonobject); + CHECK_THROWS_AS(j_nonobject.value("foo", 1), std::domain_error); + CHECK_THROWS_AS(j_nonobject_const.value("foo", 1), std::domain_error); + CHECK_THROWS_WITH(j_nonobject.value("foo", 1), "cannot use value() with string"); + CHECK_THROWS_WITH(j_nonobject_const.value("foo", 1), "cannot use value() with string"); + } + + SECTION("array") + { + json j_nonobject(json::value_t::array); + const json j_nonobject_const(j_nonobject); + CHECK_THROWS_AS(j_nonobject.value("foo", 1), std::domain_error); + CHECK_THROWS_AS(j_nonobject_const.value("foo", 1), std::domain_error); + CHECK_THROWS_WITH(j_nonobject.value("foo", 1), "cannot use value() with array"); + CHECK_THROWS_WITH(j_nonobject_const.value("foo", 1), "cannot use value() with array"); + } + + SECTION("number (integer)") + { + json j_nonobject(json::value_t::number_integer); + const json j_nonobject_const(j_nonobject); + CHECK_THROWS_AS(j_nonobject.value("foo", 1), std::domain_error); + CHECK_THROWS_AS(j_nonobject_const.value("foo", 1), std::domain_error); + CHECK_THROWS_WITH(j_nonobject.value("foo", 1), "cannot use value() with number"); + CHECK_THROWS_WITH(j_nonobject_const.value("foo", 1), "cannot use value() with number"); + } + + SECTION("number (unsigned)") + { + json j_nonobject(json::value_t::number_unsigned); + const json j_nonobject_const(j_nonobject); + CHECK_THROWS_AS(j_nonobject.value("foo", 1), std::domain_error); + CHECK_THROWS_AS(j_nonobject_const.value("foo", 1), std::domain_error); + CHECK_THROWS_WITH(j_nonobject.value("foo", 1), "cannot use value() with number"); + CHECK_THROWS_WITH(j_nonobject_const.value("foo", 1), "cannot use value() with number"); + } + + SECTION("number (floating-point)") + { + json j_nonobject(json::value_t::number_float); + const json j_nonobject_const(j_nonobject); + CHECK_THROWS_AS(j_nonobject.value("foo", 1), std::domain_error); + CHECK_THROWS_AS(j_nonobject_const.value("foo", 1), std::domain_error); + CHECK_THROWS_WITH(j_nonobject.value("foo", 1), "cannot use value() with number"); + CHECK_THROWS_WITH(j_nonobject_const.value("foo", 1), "cannot use value() with number"); + } + } } - SECTION("access non-existing value") + SECTION("given a JSON pointer") { - CHECK(j.value("_", 2) == 2); - CHECK(j.value("_", 2u) == 2u); - CHECK(j.value("_", false) == false); - CHECK(j.value("_", "bar") == "bar"); - CHECK(j.value("_", 12.34) == Approx(12.34)); - CHECK(j.value("_", json({{"foo", "bar"}})) == json({{"foo", "bar"}})); - CHECK(j.value("_", json({10, 100})) == json({10, 100})); - - CHECK(j_const.value("_", 2) == 2); - CHECK(j_const.value("_", 2u) == 2u); - CHECK(j_const.value("_", false) == false); - CHECK(j_const.value("_", "bar") == "bar"); - CHECK(j_const.value("_", 12.34) == Approx(12.34)); - CHECK(j_const.value("_", json({{"foo", "bar"}})) == json({{"foo", "bar"}})); - CHECK(j_const.value("_", json({10, 100})) == json({10, 100})); - } - - SECTION("access on non-object type") - { - SECTION("null") + SECTION("access existing value") { - json j_nonobject(json::value_t::null); - const json j_nonobject_const(j_nonobject); - CHECK_THROWS_AS(j_nonobject.value("foo", 1), std::domain_error); - CHECK_THROWS_AS(j_nonobject_const.value("foo", 1), std::domain_error); - CHECK_THROWS_WITH(j_nonobject.value("foo", 1), "cannot use value() with null"); - CHECK_THROWS_WITH(j_nonobject_const.value("foo", 1), "cannot use value() with null"); + CHECK(j.value("/integer"_json_pointer, 2) == 1); + CHECK(j.value("/integer"_json_pointer, 1.0) == Approx(1)); + CHECK(j.value("/unsigned"_json_pointer, 2) == 1u); + CHECK(j.value("/unsigned"_json_pointer, 1.0) == Approx(1u)); + CHECK(j.value("/null"_json_pointer, json(1)) == json()); + CHECK(j.value("/boolean"_json_pointer, false) == true); + CHECK(j.value("/string"_json_pointer, "bar") == "hello world"); + CHECK(j.value("/string"_json_pointer, std::string("bar")) == "hello world"); + CHECK(j.value("/floating"_json_pointer, 12.34) == Approx(42.23)); + CHECK(j.value("/floating"_json_pointer, 12) == 42); + CHECK(j.value("/object"_json_pointer, json({{"foo", "bar"}})) == json(json::object())); + CHECK(j.value("/array"_json_pointer, json({10, 100})) == json({1, 2, 3})); + + CHECK(j_const.value("/integer"_json_pointer, 2) == 1); + CHECK(j_const.value("/integer"_json_pointer, 1.0) == Approx(1)); + CHECK(j_const.value("/unsigned"_json_pointer, 2) == 1u); + CHECK(j_const.value("/unsigned"_json_pointer, 1.0) == Approx(1u)); + CHECK(j_const.value("/boolean"_json_pointer, false) == true); + CHECK(j_const.value("/string"_json_pointer, "bar") == "hello world"); + CHECK(j_const.value("/string"_json_pointer, std::string("bar")) == "hello world"); + CHECK(j_const.value("/floating"_json_pointer, 12.34) == Approx(42.23)); + CHECK(j_const.value("/floating"_json_pointer, 12) == 42); + CHECK(j_const.value("/object"_json_pointer, json({{"foo", "bar"}})) == json(json::object())); + CHECK(j_const.value("/array"_json_pointer, json({10, 100})) == json({1, 2, 3})); } - SECTION("boolean") + SECTION("access non-existing value") { - json j_nonobject(json::value_t::boolean); - const json j_nonobject_const(j_nonobject); - CHECK_THROWS_AS(j_nonobject.value("foo", 1), std::domain_error); - CHECK_THROWS_AS(j_nonobject_const.value("foo", 1), std::domain_error); - CHECK_THROWS_WITH(j_nonobject.value("foo", 1), "cannot use value() with boolean"); - CHECK_THROWS_WITH(j_nonobject_const.value("foo", 1), "cannot use value() with boolean"); - } + CHECK(j.value("/not/existing", 2) == 2); + CHECK(j.value("/not/existing", 2u) == 2u); + CHECK(j.value("/not/existing", false) == false); + CHECK(j.value("/not/existing", "bar") == "bar"); + CHECK(j.value("/not/existing", 12.34) == Approx(12.34)); + CHECK(j.value("/not/existing", json({{"foo", "bar"}})) == json({{"foo", "bar"}})); + CHECK(j.value("/not/existing", json({10, 100})) == json({10, 100})); - SECTION("string") - { - json j_nonobject(json::value_t::string); - const json j_nonobject_const(j_nonobject); - CHECK_THROWS_AS(j_nonobject.value("foo", 1), std::domain_error); - CHECK_THROWS_AS(j_nonobject_const.value("foo", 1), std::domain_error); - CHECK_THROWS_WITH(j_nonobject.value("foo", 1), "cannot use value() with string"); - CHECK_THROWS_WITH(j_nonobject_const.value("foo", 1), "cannot use value() with string"); - } - - SECTION("array") - { - json j_nonobject(json::value_t::array); - const json j_nonobject_const(j_nonobject); - CHECK_THROWS_AS(j_nonobject.value("foo", 1), std::domain_error); - CHECK_THROWS_AS(j_nonobject_const.value("foo", 1), std::domain_error); - CHECK_THROWS_WITH(j_nonobject.value("foo", 1), "cannot use value() with array"); - CHECK_THROWS_WITH(j_nonobject_const.value("foo", 1), "cannot use value() with array"); - } - - SECTION("number (integer)") - { - json j_nonobject(json::value_t::number_integer); - const json j_nonobject_const(j_nonobject); - CHECK_THROWS_AS(j_nonobject.value("foo", 1), std::domain_error); - CHECK_THROWS_AS(j_nonobject_const.value("foo", 1), std::domain_error); - CHECK_THROWS_WITH(j_nonobject.value("foo", 1), "cannot use value() with number"); - CHECK_THROWS_WITH(j_nonobject_const.value("foo", 1), "cannot use value() with number"); - } - - SECTION("number (unsigned)") - { - json j_nonobject(json::value_t::number_unsigned); - const json j_nonobject_const(j_nonobject); - CHECK_THROWS_AS(j_nonobject.value("foo", 1), std::domain_error); - CHECK_THROWS_AS(j_nonobject_const.value("foo", 1), std::domain_error); - CHECK_THROWS_WITH(j_nonobject.value("foo", 1), "cannot use value() with number"); - CHECK_THROWS_WITH(j_nonobject_const.value("foo", 1), "cannot use value() with number"); - } - - SECTION("number (floating-point)") - { - json j_nonobject(json::value_t::number_float); - const json j_nonobject_const(j_nonobject); - CHECK_THROWS_AS(j_nonobject.value("foo", 1), std::domain_error); - CHECK_THROWS_AS(j_nonobject_const.value("foo", 1), std::domain_error); - CHECK_THROWS_WITH(j_nonobject.value("foo", 1), "cannot use value() with number"); - CHECK_THROWS_WITH(j_nonobject_const.value("foo", 1), "cannot use value() with number"); + CHECK(j_const.value("/not/existing", 2) == 2); + CHECK(j_const.value("/not/existing", 2u) == 2u); + CHECK(j_const.value("/not/existing", false) == false); + CHECK(j_const.value("/not/existing", "bar") == "bar"); + CHECK(j_const.value("/not/existing", 12.34) == Approx(12.34)); + CHECK(j_const.value("/not/existing", json({{"foo", "bar"}})) == json({{"foo", "bar"}})); + CHECK(j_const.value("/not/existing", json({10, 100})) == json({10, 100})); } } } From e2aa2d21899536db3724cacd207c70d233696345 Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Sun, 24 Jul 2016 11:01:47 +0200 Subject: [PATCH 06/25] improved test coverage --- test/src/unit.cpp | 106 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 92 insertions(+), 14 deletions(-) diff --git a/test/src/unit.cpp b/test/src/unit.cpp index 2952708c..92ba97b0 100644 --- a/test/src/unit.cpp +++ b/test/src/unit.cpp @@ -3923,21 +3923,99 @@ TEST_CASE("element access") SECTION("access non-existing value") { - CHECK(j.value("/not/existing", 2) == 2); - CHECK(j.value("/not/existing", 2u) == 2u); - CHECK(j.value("/not/existing", false) == false); - CHECK(j.value("/not/existing", "bar") == "bar"); - CHECK(j.value("/not/existing", 12.34) == Approx(12.34)); - CHECK(j.value("/not/existing", json({{"foo", "bar"}})) == json({{"foo", "bar"}})); - CHECK(j.value("/not/existing", json({10, 100})) == json({10, 100})); + CHECK(j.value("/not/existing"_json_pointer, 2) == 2); + CHECK(j.value("/not/existing"_json_pointer, 2u) == 2u); + CHECK(j.value("/not/existing"_json_pointer, false) == false); + CHECK(j.value("/not/existing"_json_pointer, "bar") == "bar"); + CHECK(j.value("/not/existing"_json_pointer, 12.34) == Approx(12.34)); + CHECK(j.value("/not/existing"_json_pointer, json({{"foo", "bar"}})) == json({{"foo", "bar"}})); + CHECK(j.value("/not/existing"_json_pointer, json({10, 100})) == json({10, 100})); - CHECK(j_const.value("/not/existing", 2) == 2); - CHECK(j_const.value("/not/existing", 2u) == 2u); - CHECK(j_const.value("/not/existing", false) == false); - CHECK(j_const.value("/not/existing", "bar") == "bar"); - CHECK(j_const.value("/not/existing", 12.34) == Approx(12.34)); - CHECK(j_const.value("/not/existing", json({{"foo", "bar"}})) == json({{"foo", "bar"}})); - CHECK(j_const.value("/not/existing", json({10, 100})) == json({10, 100})); + CHECK(j_const.value("/not/existing"_json_pointer, 2) == 2); + CHECK(j_const.value("/not/existing"_json_pointer, 2u) == 2u); + CHECK(j_const.value("/not/existing"_json_pointer, false) == false); + CHECK(j_const.value("/not/existing"_json_pointer, "bar") == "bar"); + CHECK(j_const.value("/not/existing"_json_pointer, 12.34) == Approx(12.34)); + CHECK(j_const.value("/not/existing"_json_pointer, json({{"foo", "bar"}})) == json({{"foo", "bar"}})); + CHECK(j_const.value("/not/existing"_json_pointer, json({10, 100})) == json({10, 100})); + } + + SECTION("access on non-object type") + { + SECTION("null") + { + json j_nonobject(json::value_t::null); + const json j_nonobject_const(j_nonobject); + CHECK_THROWS_AS(j_nonobject.value("/foo"_json_pointer, 1), std::domain_error); + CHECK_THROWS_AS(j_nonobject_const.value("/foo"_json_pointer, 1), std::domain_error); + CHECK_THROWS_WITH(j_nonobject.value("/foo"_json_pointer, 1), "cannot use value() with null"); + CHECK_THROWS_WITH(j_nonobject_const.value("/foo"_json_pointer, 1), "cannot use value() with null"); + } + + SECTION("boolean") + { + json j_nonobject(json::value_t::boolean); + const json j_nonobject_const(j_nonobject); + CHECK_THROWS_AS(j_nonobject.value("/foo"_json_pointer, 1), std::domain_error); + CHECK_THROWS_AS(j_nonobject_const.value("/foo"_json_pointer, 1), std::domain_error); + CHECK_THROWS_WITH(j_nonobject.value("/foo"_json_pointer, 1), "cannot use value() with boolean"); + CHECK_THROWS_WITH(j_nonobject_const.value("/foo"_json_pointer, 1), + "cannot use value() with boolean"); + } + + SECTION("string") + { + json j_nonobject(json::value_t::string); + const json j_nonobject_const(j_nonobject); + CHECK_THROWS_AS(j_nonobject.value("/foo"_json_pointer, 1), std::domain_error); + CHECK_THROWS_AS(j_nonobject_const.value("/foo"_json_pointer, 1), std::domain_error); + CHECK_THROWS_WITH(j_nonobject.value("/foo"_json_pointer, 1), "cannot use value() with string"); + CHECK_THROWS_WITH(j_nonobject_const.value("/foo"_json_pointer, 1), + "cannot use value() with string"); + } + + SECTION("array") + { + json j_nonobject(json::value_t::array); + const json j_nonobject_const(j_nonobject); + CHECK_THROWS_AS(j_nonobject.value("/foo"_json_pointer, 1), std::domain_error); + CHECK_THROWS_AS(j_nonobject_const.value("/foo"_json_pointer, 1), std::domain_error); + CHECK_THROWS_WITH(j_nonobject.value("/foo"_json_pointer, 1), "cannot use value() with array"); + CHECK_THROWS_WITH(j_nonobject_const.value("/foo"_json_pointer, 1), "cannot use value() with array"); + } + + SECTION("number (integer)") + { + json j_nonobject(json::value_t::number_integer); + const json j_nonobject_const(j_nonobject); + CHECK_THROWS_AS(j_nonobject.value("/foo"_json_pointer, 1), std::domain_error); + CHECK_THROWS_AS(j_nonobject_const.value("/foo"_json_pointer, 1), std::domain_error); + CHECK_THROWS_WITH(j_nonobject.value("/foo"_json_pointer, 1), "cannot use value() with number"); + CHECK_THROWS_WITH(j_nonobject_const.value("/foo"_json_pointer, 1), + "cannot use value() with number"); + } + + SECTION("number (unsigned)") + { + json j_nonobject(json::value_t::number_unsigned); + const json j_nonobject_const(j_nonobject); + CHECK_THROWS_AS(j_nonobject.value("/foo"_json_pointer, 1), std::domain_error); + CHECK_THROWS_AS(j_nonobject_const.value("/foo"_json_pointer, 1), std::domain_error); + CHECK_THROWS_WITH(j_nonobject.value("/foo"_json_pointer, 1), "cannot use value() with number"); + CHECK_THROWS_WITH(j_nonobject_const.value("/foo"_json_pointer, 1), + "cannot use value() with number"); + } + + SECTION("number (floating-point)") + { + json j_nonobject(json::value_t::number_float); + const json j_nonobject_const(j_nonobject); + CHECK_THROWS_AS(j_nonobject.value("/foo"_json_pointer, 1), std::domain_error); + CHECK_THROWS_AS(j_nonobject_const.value("/foo"_json_pointer, 1), std::domain_error); + CHECK_THROWS_WITH(j_nonobject.value("/foo"_json_pointer, 1), "cannot use value() with number"); + CHECK_THROWS_WITH(j_nonobject_const.value("/foo"_json_pointer, 1), + "cannot use value() with number"); + } } } } From 84673b7de38df50d4cdb32a5e78e3e5857291d58 Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Sun, 24 Jul 2016 11:08:39 +0200 Subject: [PATCH 07/25] added test case from issue #283 --- test/src/unit.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/src/unit.cpp b/test/src/unit.cpp index 92ba97b0..a1589949 100644 --- a/test/src/unit.cpp +++ b/test/src/unit.cpp @@ -14331,6 +14331,19 @@ TEST_CASE("regression tests") // check roundtrip CHECK(doc.patch(json::diff(doc, expected)) == expected); } + + SECTION("issue #283 - value() does not work with _json_pointer types") + { + json j = + { + {"object", {{"key1", 1}, {"key2", 2}}}, + }; + + int at_integer = j.at("/object/key2"_json_pointer); + int val_integer = j.value("/object/key2"_json_pointer, 0); + + CHECK(at_integer == val_integer); + } } // special test case to check if memory is leaked if constructor throws From 369671f028739178d22c53546d30d0ba87746985 Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Mon, 25 Jul 2016 16:05:58 +0200 Subject: [PATCH 08/25] added more Unicode tests --- README.md | 2 +- test/src/unit.cpp | 81 ++++++++++++++++++++++++++++++++--------------- 2 files changed, 56 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 24f6d7ab..5adcf15c 100644 --- a/README.md +++ b/README.md @@ -505,7 +505,7 @@ $ make $ ./json_unit "*" =============================================================================== -All tests passed (5568718 assertions in 32 test cases) +All tests passed (8905012 assertions in 32 test cases) ``` For more information, have a look at the file [.travis.yml](https://github.com/nlohmann/json/blob/master/.travis.yml). diff --git a/test/src/unit.cpp b/test/src/unit.cpp index a1589949..c2738fae 100644 --- a/test/src/unit.cpp +++ b/test/src/unit.cpp @@ -12285,19 +12285,23 @@ TEST_CASE("RFC 7159 examples") TEST_CASE("Unicode", "[hide]") { - SECTION("full enumeration of Unicode codepoints") + SECTION("full enumeration of Unicode code points") { - // create a string from a codepoint - auto codepoint_to_unicode = [](std::size_t cp) + // create an escaped string from a code point + const auto codepoint_to_unicode = [](std::size_t cp) { - char* buffer = new char[10]; - sprintf(buffer, "\\u%04lx", cp); - std::string result(buffer); - delete[] buffer; - return result; + // copd points are represented as a six-character sequence: a + // reverse solidus, followed by the lowercase letter u, followed + // by four hexadecimal digits that encode the character's code + // point + std::stringstream ss; + ss << "\\u" << std::setw(4) << std::setfill('0') << std::hex << cp; + return ss.str(); }; - // generate all codepoints + // generate all UTF8 code points; in total, 1112064 code points are + // generated: 0x1FFFFF code points - 2047 invalid values between + // 0xD800 and 0xDFFF. for (std::size_t cp = 0; cp <= 0x10FFFFu; ++cp) { // The Unicode standard permanently reserves these code point @@ -12307,34 +12311,57 @@ TEST_CASE("Unicode", "[hide]") // no UTF forms, including UTF-16, can encode these code points. if (cp >= 0xD800u and cp <= 0xDFFFu) { + // if we would not skip these code points, we would get a + // "missing low surrogate" exception continue; } - std::string res; + // string to store the code point as in \uxxxx format + std::string escaped_string; + // string to store the code point as unescaped character sequence + std::string unescaped_string; if (cp < 0x10000u) { - // codepoint can be represented with 16 bit - res += codepoint_to_unicode(cp); + // code points in the Basic Multilingual Plane can be + // represented with one \\uxxxx sequence + escaped_string = codepoint_to_unicode(cp); + + // All Unicode characters may be placed within the quotation + // marks, except for the characters that must be escaped: + // quotation mark, reverse solidus, and the control characters + // (U+0000 through U+001F); we ignore these code points as + // they are checked with codepoint_to_unicode. + if (cp > 0x1f and cp != 0x22 and cp != 0x5c) + { + unescaped_string = json::lexer::to_unicode(cp); + } } else { - // codepoint can be represented with a pair - res += codepoint_to_unicode(0xd800u + (((cp - 0x10000u) >> 10) & 0x3ffu)); - res += codepoint_to_unicode(0xdc00u + ((cp - 0x10000u) & 0x3ffu)); + // To escape an extended character that is not in the Basic + // Multilingual Plane, the character is represented as a + // 12-character sequence, encoding the UTF-16 surrogate pair + const auto codepoint1 = 0xd800u + (((cp - 0x10000u) >> 10) & 0x3ffu); + const auto codepoint2 = 0xdc00u + ((cp - 0x10000u) & 0x3ffu); + escaped_string = codepoint_to_unicode(codepoint1); + escaped_string += codepoint_to_unicode(codepoint2); + unescaped_string += json::lexer::to_unicode(codepoint1, codepoint2); } - try - { - json j1, j2; - CHECK_NOTHROW(j1 = json::parse("\"" + res + "\"")); - CHECK_NOTHROW(j2 = json::parse(j1.dump())); - CHECK(j1 == j2); - } - catch (std::invalid_argument) - { - // we ignore parsing errors - } + // all other code points are valid and must not yield parse errors + CAPTURE(cp); + CAPTURE(escaped_string); + CAPTURE(unescaped_string); + + json j1, j2, j3, j4; + CHECK_NOTHROW(j1 = json::parse("\"" + escaped_string + "\"")); + CHECK_NOTHROW(j2 = json::parse(j1.dump())); + CHECK(j1 == j2); + + CHECK_NOTHROW(j3 = json::parse("\"" + unescaped_string + "\"")); + CHECK_NOTHROW(j4 = json::parse(j3.dump())); + CHECK(j3 == j4); } } @@ -12347,6 +12374,8 @@ TEST_CASE("Unicode", "[hide]") CHECK_NOTHROW(j << f); // the array has 1112064 + 1 elemnts (a terminating "null" value) + // Note: 1112064 = 0x1FFFFF code points - 2047 invalid values between + // 0xD800 and 0xDFFF. CHECK(j.size() == 1112065); SECTION("check JSON Pointers") From d08e013dd01cc00e2d3e5097ca603310ff4722d0 Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Mon, 25 Jul 2016 16:06:13 +0200 Subject: [PATCH 09/25] improved documentation --- doc/examples/basic_json__value_ptr.cpp | 29 ++++++++++++++++++++ doc/examples/basic_json__value_ptr.link | 1 + doc/examples/basic_json__value_ptr.output | 1 + src/json.hpp | 32 ++++++++++++++++++++++- src/json.hpp.re2c | 32 ++++++++++++++++++++++- 5 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 doc/examples/basic_json__value_ptr.cpp create mode 100644 doc/examples/basic_json__value_ptr.link create mode 100644 doc/examples/basic_json__value_ptr.output diff --git a/doc/examples/basic_json__value_ptr.cpp b/doc/examples/basic_json__value_ptr.cpp new file mode 100644 index 00000000..f45fb8b0 --- /dev/null +++ b/doc/examples/basic_json__value_ptr.cpp @@ -0,0 +1,29 @@ +#include <json.hpp> + +using json = nlohmann::json; + +int main() +{ + // create a JSON object with different entry types + json j = + { + {"integer", 1}, + {"floating", 42.23}, + {"string", "hello world"}, + {"boolean", true}, + {"object", {{"key1", 1}, {"key2", 2}}}, + {"array", {1, 2, 3}} + }; + + // access existing values + int v_integer = j.value("/integer"_json_pointer, 0); + double v_floating = j.value("/floating"_json_pointer, 47.11); + + // access nonexisting values and rely on default value + std::string v_string = j.value("/nonexisting"_json_pointer, "oops"); + bool v_boolean = j.value("/nonexisting"_json_pointer, false); + + // output values + std::cout << std::boolalpha << v_integer << " " << v_floating + << " " << v_string << " " << v_boolean << "\n"; +} diff --git a/doc/examples/basic_json__value_ptr.link b/doc/examples/basic_json__value_ptr.link new file mode 100644 index 00000000..2f8fc83c --- /dev/null +++ b/doc/examples/basic_json__value_ptr.link @@ -0,0 +1 @@ +<a target="_blank" href="http://melpon.org/wandbox/permlink/K4L4D6nibuGXbjfd"><b>online</b></a> \ No newline at end of file diff --git a/doc/examples/basic_json__value_ptr.output b/doc/examples/basic_json__value_ptr.output new file mode 100644 index 00000000..dfc40e58 --- /dev/null +++ b/doc/examples/basic_json__value_ptr.output @@ -0,0 +1 @@ +1 42.23 oops false diff --git a/src/json.hpp b/src/json.hpp index a5bc864e..fc99374b 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -974,7 +974,9 @@ class basic_json @since version 1.0.0 */ - using parser_callback_t = std::function<bool(int depth, parse_event_t event, basic_json& parsed)>; + using parser_callback_t = std::function<bool(int depth, + parse_event_t event, + basic_json& parsed)>; ////////////////// @@ -3716,6 +3718,21 @@ class basic_json /*! @brief access specified object element via JSON Pointer with default value + Returns either a copy of an object's element at the specified key @a key + or a given default value if no element with key @a key exists. + + The function is basically equivalent to executing + @code {.cpp} + try { + return at(ptr); + } catch(std::out_of_range) { + return default_value; + } + @endcode + + @note Unlike @ref at(const json_pointer&), this function does not throw + if the given key @a key was not found. + @param[in] ptr a JSON pointer to the element to access @param[in] default_value the value to return if @a ptr found no value @@ -3724,6 +3741,19 @@ class basic_json JSON arrays. Note the type of the expected value at @a key and the default value @a default_value must be compatible. + @return copy of the element at key @a key or @a default_value if @a key + is not found + + @throw std::domain_error if JSON is not an object; example: `"cannot use + value() with null"` + + @complexity Logarithmic in the size of the container. + + @liveexample{The example below shows how object elements can be queried + with a default value.,basic_json__value_ptr} + + @sa @ref operator[](const json_ptr&) for unchecked access by reference + @since version 2.0.2 */ template <class ValueType, typename diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index 2f5ecd2c..1227f36d 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -974,7 +974,9 @@ class basic_json @since version 1.0.0 */ - using parser_callback_t = std::function<bool(int depth, parse_event_t event, basic_json& parsed)>; + using parser_callback_t = std::function<bool(int depth, + parse_event_t event, + basic_json& parsed)>; ////////////////// @@ -3716,6 +3718,21 @@ class basic_json /*! @brief access specified object element via JSON Pointer with default value + Returns either a copy of an object's element at the specified key @a key + or a given default value if no element with key @a key exists. + + The function is basically equivalent to executing + @code {.cpp} + try { + return at(ptr); + } catch(std::out_of_range) { + return default_value; + } + @endcode + + @note Unlike @ref at(const json_pointer&), this function does not throw + if the given key @a key was not found. + @param[in] ptr a JSON pointer to the element to access @param[in] default_value the value to return if @a ptr found no value @@ -3724,6 +3741,19 @@ class basic_json JSON arrays. Note the type of the expected value at @a key and the default value @a default_value must be compatible. + @return copy of the element at key @a key or @a default_value if @a key + is not found + + @throw std::domain_error if JSON is not an object; example: `"cannot use + value() with null"` + + @complexity Logarithmic in the size of the container. + + @liveexample{The example below shows how object elements can be queried + with a default value.,basic_json__value_ptr} + + @sa @ref operator[](const json_ptr&) for unchecked access by reference + @since version 2.0.2 */ template <class ValueType, typename From a01ec918ac104fbe2d43e78f1fc78a5d18f803fc Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Mon, 25 Jul 2016 16:21:15 +0200 Subject: [PATCH 10/25] minor changes --- src/json.hpp | 12 +++++++++--- src/json.hpp.re2c | 12 +++++++++--- test/src/unit.cpp | 2 +- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/json.hpp b/src/json.hpp index fc99374b..15221b8b 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -7386,12 +7386,18 @@ class basic_json lexer operator=(const lexer&) = delete; /*! - @brief create a string from a Unicode code point + @brief create a string from one or two Unicode code points + + There are two cases: (1) @a codepoint1 is in the Basic Multilingual + Plane (U+0000 through U+FFFF) and @a codepoint2 is 0, or (2) + @a codepoint1 and @a codepoint2 are a UTF-16 surrogate pair to + represent a code point above U+FFFF. @param[in] codepoint1 the code point (can be high surrogate) @param[in] codepoint2 the code point (can be low surrogate or 0) - @return string representation of the code point + @return string representation of the code point; the length of the + result string is between 1 and 4 characters. @throw std::out_of_range if code point is > 0x10ffff; example: `"code points above 0x10FFFF are invalid"` @@ -7405,7 +7411,7 @@ class basic_json static string_t to_unicode(const std::size_t codepoint1, const std::size_t codepoint2 = 0) { - // calculate the codepoint from the given code points + // calculate the code point from the given code points std::size_t codepoint = codepoint1; // check if codepoint1 is a high surrogate diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index 1227f36d..74db214e 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -7386,12 +7386,18 @@ class basic_json lexer operator=(const lexer&) = delete; /*! - @brief create a string from a Unicode code point + @brief create a string from one or two Unicode code points + + There are two cases: (1) @a codepoint1 is in the Basic Multilingual + Plane (U+0000 through U+FFFF) and @a codepoint2 is 0, or (2) + @a codepoint1 and @a codepoint2 are a UTF-16 surrogate pair to + represent a code point above U+FFFF. @param[in] codepoint1 the code point (can be high surrogate) @param[in] codepoint2 the code point (can be low surrogate or 0) - @return string representation of the code point + @return string representation of the code point; the length of the + result string is between 1 and 4 characters. @throw std::out_of_range if code point is > 0x10ffff; example: `"code points above 0x10FFFF are invalid"` @@ -7405,7 +7411,7 @@ class basic_json static string_t to_unicode(const std::size_t codepoint1, const std::size_t codepoint2 = 0) { - // calculate the codepoint from the given code points + // calculate the code point from the given code points std::size_t codepoint = codepoint1; // check if codepoint1 is a high surrogate diff --git a/test/src/unit.cpp b/test/src/unit.cpp index c2738fae..cdeb1127 100644 --- a/test/src/unit.cpp +++ b/test/src/unit.cpp @@ -12299,7 +12299,7 @@ TEST_CASE("Unicode", "[hide]") return ss.str(); }; - // generate all UTF8 code points; in total, 1112064 code points are + // generate all UTF-8 code points; in total, 1112064 code points are // generated: 0x1FFFFF code points - 2047 invalid values between // 0xD800 and 0xDFFF. for (std::size_t cp = 0; cp <= 0x10FFFFu; ++cp) From 02fc3cddee97a476752775cb54cc50ff67b4cc0d Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Mon, 25 Jul 2016 16:48:26 +0200 Subject: [PATCH 11/25] test homebrew on OSX --- .travis.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.travis.yml b/.travis.yml index b459f5d5..64deb2fe 100644 --- a/.travis.yml +++ b/.travis.yml @@ -168,3 +168,8 @@ script: - if [ `which valgrind` ]; then valgrind --error-exitcode=1 --leak-check=full ./json_unit ; fi + - if [ $os = "osx" ]; then + brew tap nlohmann/json ; + brew install nlohmann_json --HEAD ; + brew test nlohmann_json + fi From 148fed1e635b552ef47ee31a3bd79f3926a661f0 Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Mon, 25 Jul 2016 18:06:59 +0200 Subject: [PATCH 12/25] minor change --- test/src/unit.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/src/unit.cpp b/test/src/unit.cpp index cdeb1127..edbafacf 100644 --- a/test/src/unit.cpp +++ b/test/src/unit.cpp @@ -12300,7 +12300,7 @@ TEST_CASE("Unicode", "[hide]") }; // generate all UTF-8 code points; in total, 1112064 code points are - // generated: 0x1FFFFF code points - 2047 invalid values between + // generated: 0x1FFFFF code points - 2048 invalid values between // 0xD800 and 0xDFFF. for (std::size_t cp = 0; cp <= 0x10FFFFu; ++cp) { @@ -12374,7 +12374,7 @@ TEST_CASE("Unicode", "[hide]") CHECK_NOTHROW(j << f); // the array has 1112064 + 1 elemnts (a terminating "null" value) - // Note: 1112064 = 0x1FFFFF code points - 2047 invalid values between + // Note: 1112064 = 0x1FFFFF code points - 2048 invalid values between // 0xD800 and 0xDFFF. CHECK(j.size() == 1112065); From fd7c7be851a7a3cc8f2eb0f782a81cd709bcda67 Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Mon, 25 Jul 2016 19:38:51 +0200 Subject: [PATCH 13/25] fixed bash errors --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 64deb2fe..0373ca3f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -168,8 +168,8 @@ script: - if [ `which valgrind` ]; then valgrind --error-exitcode=1 --leak-check=full ./json_unit ; fi - - if [ $os = "osx" ]; then + - if [ $os="osx" ]; then brew tap nlohmann/json ; brew install nlohmann_json --HEAD ; - brew test nlohmann_json + brew test nlohmann_json ; fi From cc8102f0c4e3ccc60d1fe8e2d37c0f4827cc36a3 Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Mon, 25 Jul 2016 22:19:49 +0200 Subject: [PATCH 14/25] used the wrong variable --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 0373ca3f..424465eb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -168,7 +168,7 @@ script: - if [ `which valgrind` ]; then valgrind --error-exitcode=1 --leak-check=full ./json_unit ; fi - - if [ $os="osx" ]; then + - if [ $TRAVIS_OS_NAME="osx" ]; then brew tap nlohmann/json ; brew install nlohmann_json --HEAD ; brew test nlohmann_json ; From 5e88c6f2547cf1300940dbe3cadf4202dd5cd96f Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Mon, 25 Jul 2016 23:41:16 +0200 Subject: [PATCH 15/25] more on travis --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 424465eb..ffe05ec6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -168,7 +168,8 @@ script: - if [ `which valgrind` ]; then valgrind --error-exitcode=1 --leak-check=full ./json_unit ; fi - - if [ $TRAVIS_OS_NAME="osx" ]; then + - if [ `which brew` ]; then + brew update ; brew tap nlohmann/json ; brew install nlohmann_json --HEAD ; brew test nlohmann_json ; From bdaade91f5705fd2b4c47f574d8d00328d5adb28 Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Wed, 27 Jul 2016 17:07:00 +0200 Subject: [PATCH 16/25] fixed some errors in the README gif --- doc/json.gif | Bin 451520 -> 450319 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/json.gif b/doc/json.gif index 7edafe018c464d59c673ee3913805c83a370ae35..46f005dd0da32ad9a2723e34edf4a8219699d118 100644 GIT binary patch delta 124209 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 B>zM!m delta 125410 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 From a7f8c47f68240f6ea6a3d3475379bbb818bc82fb Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Wed, 27 Jul 2016 21:29:55 +0200 Subject: [PATCH 17/25] cleaned up code - removed unnecessary assertions - simplified simple if/return patterns --- ChangeLog.md | 3 + src/json.hpp | 234 ++++++++++++---------------------------------- src/json.hpp.re2c | 234 ++++++++++++---------------------------------- 3 files changed, 121 insertions(+), 350 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index e3a7cc07..901e37c1 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -5,6 +5,9 @@ All notable changes to this project will be documented in this file. This projec [Full Changelog](https://github.com/nlohmann/json/compare/v2.0.1...HEAD) +- value\(\) does not work with \_json\_pointer types [\#283](https://github.com/nlohmann/json/issues/283) +- Easy serialization of classes [\#280](https://github.com/nlohmann/json/issues/280) + - Build error for std::int64 [\#282](https://github.com/nlohmann/json/issues/282) - hexify\(\) function emits conversion warning [\#270](https://github.com/nlohmann/json/issues/270) diff --git a/src/json.hpp b/src/json.hpp index 15221b8b..9c80cee0 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -621,8 +621,8 @@ class basic_json > that implementations will agree exactly on their numeric values. As this range is a subrange (when considered in conjunction with the - number_integer_t type) of the exactly supported range [0, UINT64_MAX], this - class's integer type is interoperable. + number_integer_t type) of the exactly supported range [0, UINT64_MAX], + this class's integer type is interoperable. #### Storage @@ -760,6 +760,7 @@ class basic_json }; std::unique_ptr<T, decltype(deleter)> object(alloc.allocate(1), deleter); alloc.construct(object.get(), std::forward<Args>(args)...); + assert(object.get() != nullptr); return object.release(); } @@ -1415,8 +1416,8 @@ class basic_json Create an unsigned integer number JSON value with a given content. - @tparam T helper type to compare number_unsigned_t and unsigned int - (not visible in) the interface. + @tparam T helper type to compare number_unsigned_t and unsigned int (not + visible in) the interface. @param[in] val an integer to create a JSON number from @@ -1521,8 +1522,8 @@ class basic_json disallows NaN values: > Numeric values that cannot be represented in the grammar below (such as > Infinity and NaN) are not permitted. - In case the parameter @a val is not a number, a JSON null value is - created instead. + In case the parameter @a val is not a number, a JSON null value is created + instead. @complexity Constant. @@ -1647,8 +1648,6 @@ class basic_json m_type = value_t::object; m_value = value_t::object; - assert(m_value.object != nullptr); - std::for_each(init.begin(), init.end(), [this](const basic_json & element) { m_value.object->emplace(*(element[0].m_value.string), element[1]); @@ -1806,7 +1805,8 @@ class basic_json std::is_same<InputIT, typename basic_json_t::const_iterator>::value , int>::type = 0> - basic_json(InputIT first, InputIT last) : m_type(first.m_object->m_type) + basic_json(InputIT first, InputIT last) + : m_type(first.m_object->m_type) { // make sure iterator fits the current value if (first.m_object != last.m_object) @@ -1840,35 +1840,30 @@ class basic_json { case value_t::number_integer: { - assert(first.m_object != nullptr); m_value.number_integer = first.m_object->m_value.number_integer; break; } case value_t::number_unsigned: { - assert(first.m_object != nullptr); m_value.number_unsigned = first.m_object->m_value.number_unsigned; break; } case value_t::number_float: { - assert(first.m_object != nullptr); m_value.number_float = first.m_object->m_value.number_float; break; } case value_t::boolean: { - assert(first.m_object != nullptr); m_value.boolean = first.m_object->m_value.boolean; break; } case value_t::string: { - assert(first.m_object != nullptr); m_value = *first.m_object->m_value.string; break; } @@ -1887,7 +1882,6 @@ class basic_json default: { - assert(first.m_object != nullptr); throw std::domain_error("cannot use construct with iterators from " + first.m_object->type_name()); } } @@ -1951,21 +1945,18 @@ class basic_json { case value_t::object: { - assert(other.m_value.object != nullptr); m_value = *other.m_value.object; break; } case value_t::array: { - assert(other.m_value.array != nullptr); m_value = *other.m_value.array; break; } case value_t::string: { - assert(other.m_value.string != nullptr); m_value = *other.m_value.string; break; } @@ -2020,8 +2011,7 @@ class basic_json @since version 1.0.0 */ basic_json(basic_json&& other) noexcept - : m_type(std::move(other.m_type)), - m_value(std::move(other.m_value)) + : m_type(std::move(other.m_type)), m_value(std::move(other.m_value)) { // invalidate payload other.m_type = value_t::null; @@ -2543,29 +2533,17 @@ class basic_json , int>::type = 0> T get_impl(T*) const { - if (is_object()) - { - assert(m_value.object != nullptr); - return T(m_value.object->begin(), m_value.object->end()); - } - else - { - throw std::domain_error("type must be object, but is " + type_name()); - } + return is_object() + ? T(m_value.object->begin(), m_value.object->end()) + : throw std::domain_error("type must be object, but is " + type_name()); } /// get an object (explicit) object_t get_impl(object_t*) const { - if (is_object()) - { - assert(m_value.object != nullptr); - return *(m_value.object); - } - else - { - throw std::domain_error("type must be object, but is " + type_name()); - } + return is_object() + ? *(m_value.object) + : throw std::domain_error("type must be object, but is " + type_name()); } /// get an array (explicit) @@ -2582,7 +2560,6 @@ class basic_json if (is_array()) { T to_vector; - assert(m_value.array != nullptr); std::transform(m_value.array->begin(), m_value.array->end(), std::inserter(to_vector, to_vector.end()), [](basic_json i) { @@ -2607,7 +2584,6 @@ class basic_json if (is_array()) { std::vector<T> to_vector; - assert(m_value.array != nullptr); to_vector.reserve(m_value.array->size()); std::transform(m_value.array->begin(), m_value.array->end(), std::inserter(to_vector, to_vector.end()), [](basic_json i) @@ -2630,29 +2606,17 @@ class basic_json , int>::type = 0> T get_impl(T*) const { - if (is_array()) - { - assert(m_value.array != nullptr); - return T(m_value.array->begin(), m_value.array->end()); - } - else - { - throw std::domain_error("type must be array, but is " + type_name()); - } + return is_array() + ? T(m_value.array->begin(), m_value.array->end()) + : throw std::domain_error("type must be array, but is " + type_name()); } /// get an array (explicit) array_t get_impl(array_t*) const { - if (is_array()) - { - assert(m_value.array != nullptr); - return *(m_value.array); - } - else - { - throw std::domain_error("type must be array, but is " + type_name()); - } + return is_array() + ? *(m_value.array) + : throw std::domain_error("type must be array, but is " + type_name()); } /// get a string (explicit) @@ -2662,15 +2626,9 @@ class basic_json , int>::type = 0> T get_impl(T*) const { - if (is_string()) - { - assert(m_value.string != nullptr); - return *m_value.string; - } - else - { - throw std::domain_error("type must be string, but is " + type_name()); - } + return is_string() + ? *m_value.string + : throw std::domain_error("type must be string, but is " + type_name()); } /// get a number (explicit) @@ -3140,7 +3098,6 @@ class basic_json { try { - assert(m_value.array != nullptr); return m_value.array->at(idx); } catch (std::out_of_range&) @@ -3184,7 +3141,6 @@ class basic_json { try { - assert(m_value.array != nullptr); return m_value.array->at(idx); } catch (std::out_of_range&) @@ -3232,7 +3188,6 @@ class basic_json { try { - assert(m_value.object != nullptr); return m_value.object->at(key); } catch (std::out_of_range&) @@ -3280,7 +3235,6 @@ class basic_json { try { - assert(m_value.object != nullptr); return m_value.object->at(key); } catch (std::out_of_range&) @@ -3333,7 +3287,6 @@ class basic_json if (is_array()) { // fill up array with null values if given idx is outside range - assert(m_value.array != nullptr); if (idx >= m_value.array->size()) { m_value.array->insert(m_value.array->end(), @@ -3371,15 +3324,9 @@ class basic_json const_reference operator[](size_type idx) const { // const operator[] only works for arrays - if (is_array()) - { - assert(m_value.array != nullptr); - return m_value.array->operator[](idx); - } - else - { - throw std::domain_error("cannot use operator[] with " + type_name()); - } + return is_array() + ? m_value.array->operator[](idx) + : throw std::domain_error("cannot use operator[] with " + type_name()); } /*! @@ -3419,15 +3366,9 @@ class basic_json } // operator[] only works for objects - if (is_object()) - { - assert(m_value.object != nullptr); - return m_value.object->operator[](key); - } - else - { - throw std::domain_error("cannot use operator[] with " + type_name()); - } + return is_object() + ? m_value.object->operator[](key) + : throw std::domain_error("cannot use operator[] with " + type_name()); } /*! @@ -3460,16 +3401,9 @@ class basic_json const_reference operator[](const typename object_t::key_type& key) const { // const operator[] only works for objects - if (is_object()) - { - assert(m_value.object != nullptr); - assert(m_value.object->find(key) != m_value.object->end()); - return m_value.object->find(key)->second; - } - else - { - throw std::domain_error("cannot use operator[] with " + type_name()); - } + return is_object() + ? m_value.object->find(key)->second + : throw std::domain_error("cannot use operator[] with " + type_name()); } /*! @@ -3578,15 +3512,9 @@ class basic_json } // at only works for objects - if (is_object()) - { - assert(m_value.object != nullptr); - return m_value.object->operator[](key); - } - else - { - throw std::domain_error("cannot use operator[] with " + type_name()); - } + return is_object() + ? m_value.object->operator[](key) + : throw std::domain_error("cannot use operator[] with " + type_name()); } /*! @@ -3620,16 +3548,9 @@ class basic_json const_reference operator[](T* key) const { // at only works for objects - if (is_object()) - { - assert(m_value.object != nullptr); - assert(m_value.object->find(key) != m_value.object->end()); - return m_value.object->find(key)->second; - } - else - { - throw std::domain_error("cannot use operator[] with " + type_name()); - } + return is_object() + ? m_value.object->find(key)->second + : throw std::domain_error("cannot use operator[] with " + type_name()); } /*! @@ -3959,14 +3880,12 @@ class basic_json case value_t::object: { - assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->erase(pos.m_it.object_iterator); break; } case value_t::array: { - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->erase(pos.m_it.array_iterator); break; } @@ -4067,7 +3986,6 @@ class basic_json case value_t::object: { - assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->erase(first.m_it.object_iterator, last.m_it.object_iterator); break; @@ -4075,7 +3993,6 @@ class basic_json case value_t::array: { - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->erase(first.m_it.array_iterator, last.m_it.array_iterator); break; @@ -4122,15 +4039,9 @@ class basic_json size_type erase(const typename object_t::key_type& key) { // this erase only works for objects - if (is_object()) - { - assert(m_value.object != nullptr); - return m_value.object->erase(key); - } - else - { - throw std::domain_error("cannot use erase() with " + type_name()); - } + return is_object() + ? m_value.object->erase(key) + : throw std::domain_error("cannot use erase() with " + type_name()); } /*! @@ -4167,7 +4078,6 @@ class basic_json throw std::out_of_range("array index " + std::to_string(idx) + " is out of range"); } - assert(m_value.array != nullptr); m_value.array->erase(m_value.array->begin() + static_cast<difference_type>(idx)); } else @@ -4210,7 +4120,6 @@ class basic_json if (is_object()) { - assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->find(key); } @@ -4227,7 +4136,6 @@ class basic_json if (is_object()) { - assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->find(key); } @@ -4255,7 +4163,6 @@ class basic_json size_type count(typename object_t::key_type key) const { // return 0 for all nonobject types - assert(not is_object() or m_value.object != nullptr); return is_object() ? m_value.object->count(key) : 0; } @@ -4597,6 +4504,10 @@ class basic_json object | result of function `object_t::empty()` array | result of function `array_t::empty()` + @note This function does not return whether a string stored as JSON value + is empty - it returns whether the JSON container itself is empty which is + false in the case of a string. + @complexity Constant, as long as @ref array_t and @ref object_t satisfy the Container concept; that is, their `empty()` functions have constant complexity. @@ -4626,13 +4537,13 @@ class basic_json case value_t::array: { - assert(m_value.array != nullptr); + // delegate call to array_t::empty() return m_value.array->empty(); } case value_t::object: { - assert(m_value.object != nullptr); + // delegate call to object_t::empty() return m_value.object->empty(); } @@ -4660,6 +4571,10 @@ class basic_json object | result of function object_t::size() array | result of function array_t::size() + @note This function does not return the length of a string stored as JSON + value - it returns the number of elements in the JSON value which is 1 in + the case of a string. + @complexity Constant, as long as @ref array_t and @ref object_t satisfy the Container concept; that is, their size() functions have constant complexity. @@ -4690,13 +4605,13 @@ class basic_json case value_t::array: { - assert(m_value.array != nullptr); + // delegate call to array_t::size() return m_value.array->size(); } case value_t::object: { - assert(m_value.object != nullptr); + // delegate call to object_t::size() return m_value.object->size(); } @@ -4750,13 +4665,13 @@ class basic_json { case value_t::array: { - assert(m_value.array != nullptr); + // delegate call to array_t::max_size() return m_value.array->max_size(); } case value_t::object: { - assert(m_value.object != nullptr); + // delegate call to object_t::max_size() return m_value.object->max_size(); } @@ -4833,21 +4748,18 @@ class basic_json case value_t::string: { - assert(m_value.string != nullptr); m_value.string->clear(); break; } case value_t::array: { - assert(m_value.array != nullptr); m_value.array->clear(); break; } case value_t::object: { - assert(m_value.object != nullptr); m_value.object->clear(); break; } @@ -4895,7 +4807,6 @@ class basic_json } // add element to array (move semantics) - assert(m_value.array != nullptr); m_value.array->push_back(std::move(val)); // invalidate object val.m_type = value_t::null; @@ -4931,7 +4842,6 @@ class basic_json } // add element to array - assert(m_value.array != nullptr); m_value.array->push_back(val); } @@ -4981,7 +4891,6 @@ class basic_json } // add element to array - assert(m_value.object != nullptr); m_value.object->insert(val); } @@ -5078,7 +4987,6 @@ class basic_json // insert to array and return iterator iterator result(this); - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, val); return result; } @@ -5134,7 +5042,6 @@ class basic_json // insert to array and return iterator iterator result(this); - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, cnt, val); return result; } @@ -5201,7 +5108,6 @@ class basic_json // insert to array and return iterator iterator result(this); - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert( pos.m_it.array_iterator, first.m_it.array_iterator, @@ -5249,7 +5155,6 @@ class basic_json // insert to array and return iterator iterator result(this); - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, ilist); return result; } @@ -5307,7 +5212,6 @@ class basic_json // swap only works for arrays if (is_array()) { - assert(m_value.array != nullptr); std::swap(*(m_value.array), other); } else @@ -5341,7 +5245,6 @@ class basic_json // swap only works for objects if (is_object()) { - assert(m_value.object != nullptr); std::swap(*(m_value.object), other); } else @@ -5375,7 +5278,6 @@ class basic_json // swap only works for strings if (is_string()) { - assert(m_value.string != nullptr); std::swap(*(m_value.string), other); } else @@ -5462,14 +5364,10 @@ class basic_json { case value_t::array: { - assert(lhs.m_value.array != nullptr); - assert(rhs.m_value.array != nullptr); return *lhs.m_value.array == *rhs.m_value.array; } case value_t::object: { - assert(lhs.m_value.object != nullptr); - assert(rhs.m_value.object != nullptr); return *lhs.m_value.object == *rhs.m_value.object; } case value_t::null: @@ -5478,8 +5376,6 @@ class basic_json } case value_t::string: { - assert(lhs.m_value.string != nullptr); - assert(rhs.m_value.string != nullptr); return *lhs.m_value.string == *rhs.m_value.string; } case value_t::boolean: @@ -5652,14 +5548,10 @@ class basic_json { case value_t::array: { - assert(lhs.m_value.array != nullptr); - assert(rhs.m_value.array != nullptr); return *lhs.m_value.array < *rhs.m_value.array; } case value_t::object: { - assert(lhs.m_value.object != nullptr); - assert(rhs.m_value.object != nullptr); return *lhs.m_value.object < *rhs.m_value.object; } case value_t::null: @@ -5668,8 +5560,6 @@ class basic_json } case value_t::string: { - assert(lhs.m_value.string != nullptr); - assert(rhs.m_value.string != nullptr); return *lhs.m_value.string < *rhs.m_value.string; } case value_t::boolean: @@ -5844,14 +5734,14 @@ class basic_json // string->float->string, string->double->string or string->long // double->string; to be safe, we read this value from // std::numeric_limits<number_float_t>::digits10 - const auto old_preicison = o.precision(std::numeric_limits<double>::digits10); + const auto old_precision = o.precision(std::numeric_limits<double>::digits10); // do the actual serialization j.dump(o, pretty_print, static_cast<unsigned int>(indentation)); // reset locale and precision o.imbue(old_locale); - o.precision(old_preicison); + o.precision(old_precision); return o; } @@ -6201,8 +6091,6 @@ class basic_json { case value_t::object: { - assert(m_value.object != nullptr); - if (m_value.object->empty()) { o << "{}"; @@ -6243,8 +6131,6 @@ class basic_json case value_t::array: { - assert(m_value.array != nullptr); - if (m_value.array->empty()) { o << "[]"; @@ -6283,7 +6169,6 @@ class basic_json case value_t::string: { - assert(m_value.string != nullptr); o << string_t("\"") << escape_string(*m_value.string) << "\""; return; } @@ -9522,7 +9407,6 @@ basic_json_parser_63: basic_json result; // iterate the JSON object values - assert(value.m_value.object != nullptr); for (const auto& element : *value.m_value.object) { if (not element.second.is_primitive()) diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index 74db214e..73e6d8e5 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -621,8 +621,8 @@ class basic_json > that implementations will agree exactly on their numeric values. As this range is a subrange (when considered in conjunction with the - number_integer_t type) of the exactly supported range [0, UINT64_MAX], this - class's integer type is interoperable. + number_integer_t type) of the exactly supported range [0, UINT64_MAX], + this class's integer type is interoperable. #### Storage @@ -760,6 +760,7 @@ class basic_json }; std::unique_ptr<T, decltype(deleter)> object(alloc.allocate(1), deleter); alloc.construct(object.get(), std::forward<Args>(args)...); + assert(object.get() != nullptr); return object.release(); } @@ -1415,8 +1416,8 @@ class basic_json Create an unsigned integer number JSON value with a given content. - @tparam T helper type to compare number_unsigned_t and unsigned int - (not visible in) the interface. + @tparam T helper type to compare number_unsigned_t and unsigned int (not + visible in) the interface. @param[in] val an integer to create a JSON number from @@ -1521,8 +1522,8 @@ class basic_json disallows NaN values: > Numeric values that cannot be represented in the grammar below (such as > Infinity and NaN) are not permitted. - In case the parameter @a val is not a number, a JSON null value is - created instead. + In case the parameter @a val is not a number, a JSON null value is created + instead. @complexity Constant. @@ -1647,8 +1648,6 @@ class basic_json m_type = value_t::object; m_value = value_t::object; - assert(m_value.object != nullptr); - std::for_each(init.begin(), init.end(), [this](const basic_json & element) { m_value.object->emplace(*(element[0].m_value.string), element[1]); @@ -1806,7 +1805,8 @@ class basic_json std::is_same<InputIT, typename basic_json_t::const_iterator>::value , int>::type = 0> - basic_json(InputIT first, InputIT last) : m_type(first.m_object->m_type) + basic_json(InputIT first, InputIT last) + : m_type(first.m_object->m_type) { // make sure iterator fits the current value if (first.m_object != last.m_object) @@ -1840,35 +1840,30 @@ class basic_json { case value_t::number_integer: { - assert(first.m_object != nullptr); m_value.number_integer = first.m_object->m_value.number_integer; break; } case value_t::number_unsigned: { - assert(first.m_object != nullptr); m_value.number_unsigned = first.m_object->m_value.number_unsigned; break; } case value_t::number_float: { - assert(first.m_object != nullptr); m_value.number_float = first.m_object->m_value.number_float; break; } case value_t::boolean: { - assert(first.m_object != nullptr); m_value.boolean = first.m_object->m_value.boolean; break; } case value_t::string: { - assert(first.m_object != nullptr); m_value = *first.m_object->m_value.string; break; } @@ -1887,7 +1882,6 @@ class basic_json default: { - assert(first.m_object != nullptr); throw std::domain_error("cannot use construct with iterators from " + first.m_object->type_name()); } } @@ -1951,21 +1945,18 @@ class basic_json { case value_t::object: { - assert(other.m_value.object != nullptr); m_value = *other.m_value.object; break; } case value_t::array: { - assert(other.m_value.array != nullptr); m_value = *other.m_value.array; break; } case value_t::string: { - assert(other.m_value.string != nullptr); m_value = *other.m_value.string; break; } @@ -2020,8 +2011,7 @@ class basic_json @since version 1.0.0 */ basic_json(basic_json&& other) noexcept - : m_type(std::move(other.m_type)), - m_value(std::move(other.m_value)) + : m_type(std::move(other.m_type)), m_value(std::move(other.m_value)) { // invalidate payload other.m_type = value_t::null; @@ -2543,29 +2533,17 @@ class basic_json , int>::type = 0> T get_impl(T*) const { - if (is_object()) - { - assert(m_value.object != nullptr); - return T(m_value.object->begin(), m_value.object->end()); - } - else - { - throw std::domain_error("type must be object, but is " + type_name()); - } + return is_object() + ? T(m_value.object->begin(), m_value.object->end()) + : throw std::domain_error("type must be object, but is " + type_name()); } /// get an object (explicit) object_t get_impl(object_t*) const { - if (is_object()) - { - assert(m_value.object != nullptr); - return *(m_value.object); - } - else - { - throw std::domain_error("type must be object, but is " + type_name()); - } + return is_object() + ? *(m_value.object) + : throw std::domain_error("type must be object, but is " + type_name()); } /// get an array (explicit) @@ -2582,7 +2560,6 @@ class basic_json if (is_array()) { T to_vector; - assert(m_value.array != nullptr); std::transform(m_value.array->begin(), m_value.array->end(), std::inserter(to_vector, to_vector.end()), [](basic_json i) { @@ -2607,7 +2584,6 @@ class basic_json if (is_array()) { std::vector<T> to_vector; - assert(m_value.array != nullptr); to_vector.reserve(m_value.array->size()); std::transform(m_value.array->begin(), m_value.array->end(), std::inserter(to_vector, to_vector.end()), [](basic_json i) @@ -2630,29 +2606,17 @@ class basic_json , int>::type = 0> T get_impl(T*) const { - if (is_array()) - { - assert(m_value.array != nullptr); - return T(m_value.array->begin(), m_value.array->end()); - } - else - { - throw std::domain_error("type must be array, but is " + type_name()); - } + return is_array() + ? T(m_value.array->begin(), m_value.array->end()) + : throw std::domain_error("type must be array, but is " + type_name()); } /// get an array (explicit) array_t get_impl(array_t*) const { - if (is_array()) - { - assert(m_value.array != nullptr); - return *(m_value.array); - } - else - { - throw std::domain_error("type must be array, but is " + type_name()); - } + return is_array() + ? *(m_value.array) + : throw std::domain_error("type must be array, but is " + type_name()); } /// get a string (explicit) @@ -2662,15 +2626,9 @@ class basic_json , int>::type = 0> T get_impl(T*) const { - if (is_string()) - { - assert(m_value.string != nullptr); - return *m_value.string; - } - else - { - throw std::domain_error("type must be string, but is " + type_name()); - } + return is_string() + ? *m_value.string + : throw std::domain_error("type must be string, but is " + type_name()); } /// get a number (explicit) @@ -3140,7 +3098,6 @@ class basic_json { try { - assert(m_value.array != nullptr); return m_value.array->at(idx); } catch (std::out_of_range&) @@ -3184,7 +3141,6 @@ class basic_json { try { - assert(m_value.array != nullptr); return m_value.array->at(idx); } catch (std::out_of_range&) @@ -3232,7 +3188,6 @@ class basic_json { try { - assert(m_value.object != nullptr); return m_value.object->at(key); } catch (std::out_of_range&) @@ -3280,7 +3235,6 @@ class basic_json { try { - assert(m_value.object != nullptr); return m_value.object->at(key); } catch (std::out_of_range&) @@ -3333,7 +3287,6 @@ class basic_json if (is_array()) { // fill up array with null values if given idx is outside range - assert(m_value.array != nullptr); if (idx >= m_value.array->size()) { m_value.array->insert(m_value.array->end(), @@ -3371,15 +3324,9 @@ class basic_json const_reference operator[](size_type idx) const { // const operator[] only works for arrays - if (is_array()) - { - assert(m_value.array != nullptr); - return m_value.array->operator[](idx); - } - else - { - throw std::domain_error("cannot use operator[] with " + type_name()); - } + return is_array() + ? m_value.array->operator[](idx) + : throw std::domain_error("cannot use operator[] with " + type_name()); } /*! @@ -3419,15 +3366,9 @@ class basic_json } // operator[] only works for objects - if (is_object()) - { - assert(m_value.object != nullptr); - return m_value.object->operator[](key); - } - else - { - throw std::domain_error("cannot use operator[] with " + type_name()); - } + return is_object() + ? m_value.object->operator[](key) + : throw std::domain_error("cannot use operator[] with " + type_name()); } /*! @@ -3460,16 +3401,9 @@ class basic_json const_reference operator[](const typename object_t::key_type& key) const { // const operator[] only works for objects - if (is_object()) - { - assert(m_value.object != nullptr); - assert(m_value.object->find(key) != m_value.object->end()); - return m_value.object->find(key)->second; - } - else - { - throw std::domain_error("cannot use operator[] with " + type_name()); - } + return is_object() + ? m_value.object->find(key)->second + : throw std::domain_error("cannot use operator[] with " + type_name()); } /*! @@ -3578,15 +3512,9 @@ class basic_json } // at only works for objects - if (is_object()) - { - assert(m_value.object != nullptr); - return m_value.object->operator[](key); - } - else - { - throw std::domain_error("cannot use operator[] with " + type_name()); - } + return is_object() + ? m_value.object->operator[](key) + : throw std::domain_error("cannot use operator[] with " + type_name()); } /*! @@ -3620,16 +3548,9 @@ class basic_json const_reference operator[](T* key) const { // at only works for objects - if (is_object()) - { - assert(m_value.object != nullptr); - assert(m_value.object->find(key) != m_value.object->end()); - return m_value.object->find(key)->second; - } - else - { - throw std::domain_error("cannot use operator[] with " + type_name()); - } + return is_object() + ? m_value.object->find(key)->second + : throw std::domain_error("cannot use operator[] with " + type_name()); } /*! @@ -3959,14 +3880,12 @@ class basic_json case value_t::object: { - assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->erase(pos.m_it.object_iterator); break; } case value_t::array: { - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->erase(pos.m_it.array_iterator); break; } @@ -4067,7 +3986,6 @@ class basic_json case value_t::object: { - assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->erase(first.m_it.object_iterator, last.m_it.object_iterator); break; @@ -4075,7 +3993,6 @@ class basic_json case value_t::array: { - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->erase(first.m_it.array_iterator, last.m_it.array_iterator); break; @@ -4122,15 +4039,9 @@ class basic_json size_type erase(const typename object_t::key_type& key) { // this erase only works for objects - if (is_object()) - { - assert(m_value.object != nullptr); - return m_value.object->erase(key); - } - else - { - throw std::domain_error("cannot use erase() with " + type_name()); - } + return is_object() + ? m_value.object->erase(key) + : throw std::domain_error("cannot use erase() with " + type_name()); } /*! @@ -4167,7 +4078,6 @@ class basic_json throw std::out_of_range("array index " + std::to_string(idx) + " is out of range"); } - assert(m_value.array != nullptr); m_value.array->erase(m_value.array->begin() + static_cast<difference_type>(idx)); } else @@ -4210,7 +4120,6 @@ class basic_json if (is_object()) { - assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->find(key); } @@ -4227,7 +4136,6 @@ class basic_json if (is_object()) { - assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->find(key); } @@ -4255,7 +4163,6 @@ class basic_json size_type count(typename object_t::key_type key) const { // return 0 for all nonobject types - assert(not is_object() or m_value.object != nullptr); return is_object() ? m_value.object->count(key) : 0; } @@ -4597,6 +4504,10 @@ class basic_json object | result of function `object_t::empty()` array | result of function `array_t::empty()` + @note This function does not return whether a string stored as JSON value + is empty - it returns whether the JSON container itself is empty which is + false in the case of a string. + @complexity Constant, as long as @ref array_t and @ref object_t satisfy the Container concept; that is, their `empty()` functions have constant complexity. @@ -4626,13 +4537,13 @@ class basic_json case value_t::array: { - assert(m_value.array != nullptr); + // delegate call to array_t::empty() return m_value.array->empty(); } case value_t::object: { - assert(m_value.object != nullptr); + // delegate call to object_t::empty() return m_value.object->empty(); } @@ -4660,6 +4571,10 @@ class basic_json object | result of function object_t::size() array | result of function array_t::size() + @note This function does not return the length of a string stored as JSON + value - it returns the number of elements in the JSON value which is 1 in + the case of a string. + @complexity Constant, as long as @ref array_t and @ref object_t satisfy the Container concept; that is, their size() functions have constant complexity. @@ -4690,13 +4605,13 @@ class basic_json case value_t::array: { - assert(m_value.array != nullptr); + // delegate call to array_t::size() return m_value.array->size(); } case value_t::object: { - assert(m_value.object != nullptr); + // delegate call to object_t::size() return m_value.object->size(); } @@ -4750,13 +4665,13 @@ class basic_json { case value_t::array: { - assert(m_value.array != nullptr); + // delegate call to array_t::max_size() return m_value.array->max_size(); } case value_t::object: { - assert(m_value.object != nullptr); + // delegate call to object_t::max_size() return m_value.object->max_size(); } @@ -4833,21 +4748,18 @@ class basic_json case value_t::string: { - assert(m_value.string != nullptr); m_value.string->clear(); break; } case value_t::array: { - assert(m_value.array != nullptr); m_value.array->clear(); break; } case value_t::object: { - assert(m_value.object != nullptr); m_value.object->clear(); break; } @@ -4895,7 +4807,6 @@ class basic_json } // add element to array (move semantics) - assert(m_value.array != nullptr); m_value.array->push_back(std::move(val)); // invalidate object val.m_type = value_t::null; @@ -4931,7 +4842,6 @@ class basic_json } // add element to array - assert(m_value.array != nullptr); m_value.array->push_back(val); } @@ -4981,7 +4891,6 @@ class basic_json } // add element to array - assert(m_value.object != nullptr); m_value.object->insert(val); } @@ -5078,7 +4987,6 @@ class basic_json // insert to array and return iterator iterator result(this); - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, val); return result; } @@ -5134,7 +5042,6 @@ class basic_json // insert to array and return iterator iterator result(this); - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, cnt, val); return result; } @@ -5201,7 +5108,6 @@ class basic_json // insert to array and return iterator iterator result(this); - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert( pos.m_it.array_iterator, first.m_it.array_iterator, @@ -5249,7 +5155,6 @@ class basic_json // insert to array and return iterator iterator result(this); - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, ilist); return result; } @@ -5307,7 +5212,6 @@ class basic_json // swap only works for arrays if (is_array()) { - assert(m_value.array != nullptr); std::swap(*(m_value.array), other); } else @@ -5341,7 +5245,6 @@ class basic_json // swap only works for objects if (is_object()) { - assert(m_value.object != nullptr); std::swap(*(m_value.object), other); } else @@ -5375,7 +5278,6 @@ class basic_json // swap only works for strings if (is_string()) { - assert(m_value.string != nullptr); std::swap(*(m_value.string), other); } else @@ -5462,14 +5364,10 @@ class basic_json { case value_t::array: { - assert(lhs.m_value.array != nullptr); - assert(rhs.m_value.array != nullptr); return *lhs.m_value.array == *rhs.m_value.array; } case value_t::object: { - assert(lhs.m_value.object != nullptr); - assert(rhs.m_value.object != nullptr); return *lhs.m_value.object == *rhs.m_value.object; } case value_t::null: @@ -5478,8 +5376,6 @@ class basic_json } case value_t::string: { - assert(lhs.m_value.string != nullptr); - assert(rhs.m_value.string != nullptr); return *lhs.m_value.string == *rhs.m_value.string; } case value_t::boolean: @@ -5652,14 +5548,10 @@ class basic_json { case value_t::array: { - assert(lhs.m_value.array != nullptr); - assert(rhs.m_value.array != nullptr); return *lhs.m_value.array < *rhs.m_value.array; } case value_t::object: { - assert(lhs.m_value.object != nullptr); - assert(rhs.m_value.object != nullptr); return *lhs.m_value.object < *rhs.m_value.object; } case value_t::null: @@ -5668,8 +5560,6 @@ class basic_json } case value_t::string: { - assert(lhs.m_value.string != nullptr); - assert(rhs.m_value.string != nullptr); return *lhs.m_value.string < *rhs.m_value.string; } case value_t::boolean: @@ -5844,14 +5734,14 @@ class basic_json // string->float->string, string->double->string or string->long // double->string; to be safe, we read this value from // std::numeric_limits<number_float_t>::digits10 - const auto old_preicison = o.precision(std::numeric_limits<double>::digits10); + const auto old_precision = o.precision(std::numeric_limits<double>::digits10); // do the actual serialization j.dump(o, pretty_print, static_cast<unsigned int>(indentation)); // reset locale and precision o.imbue(old_locale); - o.precision(old_preicison); + o.precision(old_precision); return o; } @@ -6201,8 +6091,6 @@ class basic_json { case value_t::object: { - assert(m_value.object != nullptr); - if (m_value.object->empty()) { o << "{}"; @@ -6243,8 +6131,6 @@ class basic_json case value_t::array: { - assert(m_value.array != nullptr); - if (m_value.array->empty()) { o << "[]"; @@ -6283,7 +6169,6 @@ class basic_json case value_t::string: { - assert(m_value.string != nullptr); o << string_t("\"") << escape_string(*m_value.string) << "\""; return; } @@ -8819,7 +8704,6 @@ class basic_json basic_json result; // iterate the JSON object values - assert(value.m_value.object != nullptr); for (const auto& element : *value.m_value.object) { if (not element.second.is_primitive()) From 6297631e22f28e8691add1a65898f33ca7b13e59 Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Wed, 27 Jul 2016 21:40:15 +0200 Subject: [PATCH 18/25] reverted breaking changes --- src/json.hpp | 234 ++++++++++++++++++++++++++++++++++------------ src/json.hpp.re2c | 234 ++++++++++++++++++++++++++++++++++------------ 2 files changed, 350 insertions(+), 118 deletions(-) diff --git a/src/json.hpp b/src/json.hpp index 9c80cee0..15221b8b 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -621,8 +621,8 @@ class basic_json > that implementations will agree exactly on their numeric values. As this range is a subrange (when considered in conjunction with the - number_integer_t type) of the exactly supported range [0, UINT64_MAX], - this class's integer type is interoperable. + number_integer_t type) of the exactly supported range [0, UINT64_MAX], this + class's integer type is interoperable. #### Storage @@ -760,7 +760,6 @@ class basic_json }; std::unique_ptr<T, decltype(deleter)> object(alloc.allocate(1), deleter); alloc.construct(object.get(), std::forward<Args>(args)...); - assert(object.get() != nullptr); return object.release(); } @@ -1416,8 +1415,8 @@ class basic_json Create an unsigned integer number JSON value with a given content. - @tparam T helper type to compare number_unsigned_t and unsigned int (not - visible in) the interface. + @tparam T helper type to compare number_unsigned_t and unsigned int + (not visible in) the interface. @param[in] val an integer to create a JSON number from @@ -1522,8 +1521,8 @@ class basic_json disallows NaN values: > Numeric values that cannot be represented in the grammar below (such as > Infinity and NaN) are not permitted. - In case the parameter @a val is not a number, a JSON null value is created - instead. + In case the parameter @a val is not a number, a JSON null value is + created instead. @complexity Constant. @@ -1648,6 +1647,8 @@ class basic_json m_type = value_t::object; m_value = value_t::object; + assert(m_value.object != nullptr); + std::for_each(init.begin(), init.end(), [this](const basic_json & element) { m_value.object->emplace(*(element[0].m_value.string), element[1]); @@ -1805,8 +1806,7 @@ class basic_json std::is_same<InputIT, typename basic_json_t::const_iterator>::value , int>::type = 0> - basic_json(InputIT first, InputIT last) - : m_type(first.m_object->m_type) + basic_json(InputIT first, InputIT last) : m_type(first.m_object->m_type) { // make sure iterator fits the current value if (first.m_object != last.m_object) @@ -1840,30 +1840,35 @@ class basic_json { case value_t::number_integer: { + assert(first.m_object != nullptr); m_value.number_integer = first.m_object->m_value.number_integer; break; } case value_t::number_unsigned: { + assert(first.m_object != nullptr); m_value.number_unsigned = first.m_object->m_value.number_unsigned; break; } case value_t::number_float: { + assert(first.m_object != nullptr); m_value.number_float = first.m_object->m_value.number_float; break; } case value_t::boolean: { + assert(first.m_object != nullptr); m_value.boolean = first.m_object->m_value.boolean; break; } case value_t::string: { + assert(first.m_object != nullptr); m_value = *first.m_object->m_value.string; break; } @@ -1882,6 +1887,7 @@ class basic_json default: { + assert(first.m_object != nullptr); throw std::domain_error("cannot use construct with iterators from " + first.m_object->type_name()); } } @@ -1945,18 +1951,21 @@ class basic_json { case value_t::object: { + assert(other.m_value.object != nullptr); m_value = *other.m_value.object; break; } case value_t::array: { + assert(other.m_value.array != nullptr); m_value = *other.m_value.array; break; } case value_t::string: { + assert(other.m_value.string != nullptr); m_value = *other.m_value.string; break; } @@ -2011,7 +2020,8 @@ class basic_json @since version 1.0.0 */ basic_json(basic_json&& other) noexcept - : m_type(std::move(other.m_type)), m_value(std::move(other.m_value)) + : m_type(std::move(other.m_type)), + m_value(std::move(other.m_value)) { // invalidate payload other.m_type = value_t::null; @@ -2533,17 +2543,29 @@ class basic_json , int>::type = 0> T get_impl(T*) const { - return is_object() - ? T(m_value.object->begin(), m_value.object->end()) - : throw std::domain_error("type must be object, but is " + type_name()); + if (is_object()) + { + assert(m_value.object != nullptr); + return T(m_value.object->begin(), m_value.object->end()); + } + else + { + throw std::domain_error("type must be object, but is " + type_name()); + } } /// get an object (explicit) object_t get_impl(object_t*) const { - return is_object() - ? *(m_value.object) - : throw std::domain_error("type must be object, but is " + type_name()); + if (is_object()) + { + assert(m_value.object != nullptr); + return *(m_value.object); + } + else + { + throw std::domain_error("type must be object, but is " + type_name()); + } } /// get an array (explicit) @@ -2560,6 +2582,7 @@ class basic_json if (is_array()) { T to_vector; + assert(m_value.array != nullptr); std::transform(m_value.array->begin(), m_value.array->end(), std::inserter(to_vector, to_vector.end()), [](basic_json i) { @@ -2584,6 +2607,7 @@ class basic_json if (is_array()) { std::vector<T> to_vector; + assert(m_value.array != nullptr); to_vector.reserve(m_value.array->size()); std::transform(m_value.array->begin(), m_value.array->end(), std::inserter(to_vector, to_vector.end()), [](basic_json i) @@ -2606,17 +2630,29 @@ class basic_json , int>::type = 0> T get_impl(T*) const { - return is_array() - ? T(m_value.array->begin(), m_value.array->end()) - : throw std::domain_error("type must be array, but is " + type_name()); + if (is_array()) + { + assert(m_value.array != nullptr); + return T(m_value.array->begin(), m_value.array->end()); + } + else + { + throw std::domain_error("type must be array, but is " + type_name()); + } } /// get an array (explicit) array_t get_impl(array_t*) const { - return is_array() - ? *(m_value.array) - : throw std::domain_error("type must be array, but is " + type_name()); + if (is_array()) + { + assert(m_value.array != nullptr); + return *(m_value.array); + } + else + { + throw std::domain_error("type must be array, but is " + type_name()); + } } /// get a string (explicit) @@ -2626,9 +2662,15 @@ class basic_json , int>::type = 0> T get_impl(T*) const { - return is_string() - ? *m_value.string - : throw std::domain_error("type must be string, but is " + type_name()); + if (is_string()) + { + assert(m_value.string != nullptr); + return *m_value.string; + } + else + { + throw std::domain_error("type must be string, but is " + type_name()); + } } /// get a number (explicit) @@ -3098,6 +3140,7 @@ class basic_json { try { + assert(m_value.array != nullptr); return m_value.array->at(idx); } catch (std::out_of_range&) @@ -3141,6 +3184,7 @@ class basic_json { try { + assert(m_value.array != nullptr); return m_value.array->at(idx); } catch (std::out_of_range&) @@ -3188,6 +3232,7 @@ class basic_json { try { + assert(m_value.object != nullptr); return m_value.object->at(key); } catch (std::out_of_range&) @@ -3235,6 +3280,7 @@ class basic_json { try { + assert(m_value.object != nullptr); return m_value.object->at(key); } catch (std::out_of_range&) @@ -3287,6 +3333,7 @@ class basic_json if (is_array()) { // fill up array with null values if given idx is outside range + assert(m_value.array != nullptr); if (idx >= m_value.array->size()) { m_value.array->insert(m_value.array->end(), @@ -3324,9 +3371,15 @@ class basic_json const_reference operator[](size_type idx) const { // const operator[] only works for arrays - return is_array() - ? m_value.array->operator[](idx) - : throw std::domain_error("cannot use operator[] with " + type_name()); + if (is_array()) + { + assert(m_value.array != nullptr); + return m_value.array->operator[](idx); + } + else + { + throw std::domain_error("cannot use operator[] with " + type_name()); + } } /*! @@ -3366,9 +3419,15 @@ class basic_json } // operator[] only works for objects - return is_object() - ? m_value.object->operator[](key) - : throw std::domain_error("cannot use operator[] with " + type_name()); + if (is_object()) + { + assert(m_value.object != nullptr); + return m_value.object->operator[](key); + } + else + { + throw std::domain_error("cannot use operator[] with " + type_name()); + } } /*! @@ -3401,9 +3460,16 @@ class basic_json const_reference operator[](const typename object_t::key_type& key) const { // const operator[] only works for objects - return is_object() - ? m_value.object->find(key)->second - : throw std::domain_error("cannot use operator[] with " + type_name()); + if (is_object()) + { + assert(m_value.object != nullptr); + assert(m_value.object->find(key) != m_value.object->end()); + return m_value.object->find(key)->second; + } + else + { + throw std::domain_error("cannot use operator[] with " + type_name()); + } } /*! @@ -3512,9 +3578,15 @@ class basic_json } // at only works for objects - return is_object() - ? m_value.object->operator[](key) - : throw std::domain_error("cannot use operator[] with " + type_name()); + if (is_object()) + { + assert(m_value.object != nullptr); + return m_value.object->operator[](key); + } + else + { + throw std::domain_error("cannot use operator[] with " + type_name()); + } } /*! @@ -3548,9 +3620,16 @@ class basic_json const_reference operator[](T* key) const { // at only works for objects - return is_object() - ? m_value.object->find(key)->second - : throw std::domain_error("cannot use operator[] with " + type_name()); + if (is_object()) + { + assert(m_value.object != nullptr); + assert(m_value.object->find(key) != m_value.object->end()); + return m_value.object->find(key)->second; + } + else + { + throw std::domain_error("cannot use operator[] with " + type_name()); + } } /*! @@ -3880,12 +3959,14 @@ class basic_json case value_t::object: { + assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->erase(pos.m_it.object_iterator); break; } case value_t::array: { + assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->erase(pos.m_it.array_iterator); break; } @@ -3986,6 +4067,7 @@ class basic_json case value_t::object: { + assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->erase(first.m_it.object_iterator, last.m_it.object_iterator); break; @@ -3993,6 +4075,7 @@ class basic_json case value_t::array: { + assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->erase(first.m_it.array_iterator, last.m_it.array_iterator); break; @@ -4039,9 +4122,15 @@ class basic_json size_type erase(const typename object_t::key_type& key) { // this erase only works for objects - return is_object() - ? m_value.object->erase(key) - : throw std::domain_error("cannot use erase() with " + type_name()); + if (is_object()) + { + assert(m_value.object != nullptr); + return m_value.object->erase(key); + } + else + { + throw std::domain_error("cannot use erase() with " + type_name()); + } } /*! @@ -4078,6 +4167,7 @@ class basic_json throw std::out_of_range("array index " + std::to_string(idx) + " is out of range"); } + assert(m_value.array != nullptr); m_value.array->erase(m_value.array->begin() + static_cast<difference_type>(idx)); } else @@ -4120,6 +4210,7 @@ class basic_json if (is_object()) { + assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->find(key); } @@ -4136,6 +4227,7 @@ class basic_json if (is_object()) { + assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->find(key); } @@ -4163,6 +4255,7 @@ class basic_json size_type count(typename object_t::key_type key) const { // return 0 for all nonobject types + assert(not is_object() or m_value.object != nullptr); return is_object() ? m_value.object->count(key) : 0; } @@ -4504,10 +4597,6 @@ class basic_json object | result of function `object_t::empty()` array | result of function `array_t::empty()` - @note This function does not return whether a string stored as JSON value - is empty - it returns whether the JSON container itself is empty which is - false in the case of a string. - @complexity Constant, as long as @ref array_t and @ref object_t satisfy the Container concept; that is, their `empty()` functions have constant complexity. @@ -4537,13 +4626,13 @@ class basic_json case value_t::array: { - // delegate call to array_t::empty() + assert(m_value.array != nullptr); return m_value.array->empty(); } case value_t::object: { - // delegate call to object_t::empty() + assert(m_value.object != nullptr); return m_value.object->empty(); } @@ -4571,10 +4660,6 @@ class basic_json object | result of function object_t::size() array | result of function array_t::size() - @note This function does not return the length of a string stored as JSON - value - it returns the number of elements in the JSON value which is 1 in - the case of a string. - @complexity Constant, as long as @ref array_t and @ref object_t satisfy the Container concept; that is, their size() functions have constant complexity. @@ -4605,13 +4690,13 @@ class basic_json case value_t::array: { - // delegate call to array_t::size() + assert(m_value.array != nullptr); return m_value.array->size(); } case value_t::object: { - // delegate call to object_t::size() + assert(m_value.object != nullptr); return m_value.object->size(); } @@ -4665,13 +4750,13 @@ class basic_json { case value_t::array: { - // delegate call to array_t::max_size() + assert(m_value.array != nullptr); return m_value.array->max_size(); } case value_t::object: { - // delegate call to object_t::max_size() + assert(m_value.object != nullptr); return m_value.object->max_size(); } @@ -4748,18 +4833,21 @@ class basic_json case value_t::string: { + assert(m_value.string != nullptr); m_value.string->clear(); break; } case value_t::array: { + assert(m_value.array != nullptr); m_value.array->clear(); break; } case value_t::object: { + assert(m_value.object != nullptr); m_value.object->clear(); break; } @@ -4807,6 +4895,7 @@ class basic_json } // add element to array (move semantics) + assert(m_value.array != nullptr); m_value.array->push_back(std::move(val)); // invalidate object val.m_type = value_t::null; @@ -4842,6 +4931,7 @@ class basic_json } // add element to array + assert(m_value.array != nullptr); m_value.array->push_back(val); } @@ -4891,6 +4981,7 @@ class basic_json } // add element to array + assert(m_value.object != nullptr); m_value.object->insert(val); } @@ -4987,6 +5078,7 @@ class basic_json // insert to array and return iterator iterator result(this); + assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, val); return result; } @@ -5042,6 +5134,7 @@ class basic_json // insert to array and return iterator iterator result(this); + assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, cnt, val); return result; } @@ -5108,6 +5201,7 @@ class basic_json // insert to array and return iterator iterator result(this); + assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert( pos.m_it.array_iterator, first.m_it.array_iterator, @@ -5155,6 +5249,7 @@ class basic_json // insert to array and return iterator iterator result(this); + assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, ilist); return result; } @@ -5212,6 +5307,7 @@ class basic_json // swap only works for arrays if (is_array()) { + assert(m_value.array != nullptr); std::swap(*(m_value.array), other); } else @@ -5245,6 +5341,7 @@ class basic_json // swap only works for objects if (is_object()) { + assert(m_value.object != nullptr); std::swap(*(m_value.object), other); } else @@ -5278,6 +5375,7 @@ class basic_json // swap only works for strings if (is_string()) { + assert(m_value.string != nullptr); std::swap(*(m_value.string), other); } else @@ -5364,10 +5462,14 @@ class basic_json { case value_t::array: { + assert(lhs.m_value.array != nullptr); + assert(rhs.m_value.array != nullptr); return *lhs.m_value.array == *rhs.m_value.array; } case value_t::object: { + assert(lhs.m_value.object != nullptr); + assert(rhs.m_value.object != nullptr); return *lhs.m_value.object == *rhs.m_value.object; } case value_t::null: @@ -5376,6 +5478,8 @@ class basic_json } case value_t::string: { + assert(lhs.m_value.string != nullptr); + assert(rhs.m_value.string != nullptr); return *lhs.m_value.string == *rhs.m_value.string; } case value_t::boolean: @@ -5548,10 +5652,14 @@ class basic_json { case value_t::array: { + assert(lhs.m_value.array != nullptr); + assert(rhs.m_value.array != nullptr); return *lhs.m_value.array < *rhs.m_value.array; } case value_t::object: { + assert(lhs.m_value.object != nullptr); + assert(rhs.m_value.object != nullptr); return *lhs.m_value.object < *rhs.m_value.object; } case value_t::null: @@ -5560,6 +5668,8 @@ class basic_json } case value_t::string: { + assert(lhs.m_value.string != nullptr); + assert(rhs.m_value.string != nullptr); return *lhs.m_value.string < *rhs.m_value.string; } case value_t::boolean: @@ -5734,14 +5844,14 @@ class basic_json // string->float->string, string->double->string or string->long // double->string; to be safe, we read this value from // std::numeric_limits<number_float_t>::digits10 - const auto old_precision = o.precision(std::numeric_limits<double>::digits10); + const auto old_preicison = o.precision(std::numeric_limits<double>::digits10); // do the actual serialization j.dump(o, pretty_print, static_cast<unsigned int>(indentation)); // reset locale and precision o.imbue(old_locale); - o.precision(old_precision); + o.precision(old_preicison); return o; } @@ -6091,6 +6201,8 @@ class basic_json { case value_t::object: { + assert(m_value.object != nullptr); + if (m_value.object->empty()) { o << "{}"; @@ -6131,6 +6243,8 @@ class basic_json case value_t::array: { + assert(m_value.array != nullptr); + if (m_value.array->empty()) { o << "[]"; @@ -6169,6 +6283,7 @@ class basic_json case value_t::string: { + assert(m_value.string != nullptr); o << string_t("\"") << escape_string(*m_value.string) << "\""; return; } @@ -9407,6 +9522,7 @@ basic_json_parser_63: basic_json result; // iterate the JSON object values + assert(value.m_value.object != nullptr); for (const auto& element : *value.m_value.object) { if (not element.second.is_primitive()) diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index 73e6d8e5..74db214e 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -621,8 +621,8 @@ class basic_json > that implementations will agree exactly on their numeric values. As this range is a subrange (when considered in conjunction with the - number_integer_t type) of the exactly supported range [0, UINT64_MAX], - this class's integer type is interoperable. + number_integer_t type) of the exactly supported range [0, UINT64_MAX], this + class's integer type is interoperable. #### Storage @@ -760,7 +760,6 @@ class basic_json }; std::unique_ptr<T, decltype(deleter)> object(alloc.allocate(1), deleter); alloc.construct(object.get(), std::forward<Args>(args)...); - assert(object.get() != nullptr); return object.release(); } @@ -1416,8 +1415,8 @@ class basic_json Create an unsigned integer number JSON value with a given content. - @tparam T helper type to compare number_unsigned_t and unsigned int (not - visible in) the interface. + @tparam T helper type to compare number_unsigned_t and unsigned int + (not visible in) the interface. @param[in] val an integer to create a JSON number from @@ -1522,8 +1521,8 @@ class basic_json disallows NaN values: > Numeric values that cannot be represented in the grammar below (such as > Infinity and NaN) are not permitted. - In case the parameter @a val is not a number, a JSON null value is created - instead. + In case the parameter @a val is not a number, a JSON null value is + created instead. @complexity Constant. @@ -1648,6 +1647,8 @@ class basic_json m_type = value_t::object; m_value = value_t::object; + assert(m_value.object != nullptr); + std::for_each(init.begin(), init.end(), [this](const basic_json & element) { m_value.object->emplace(*(element[0].m_value.string), element[1]); @@ -1805,8 +1806,7 @@ class basic_json std::is_same<InputIT, typename basic_json_t::const_iterator>::value , int>::type = 0> - basic_json(InputIT first, InputIT last) - : m_type(first.m_object->m_type) + basic_json(InputIT first, InputIT last) : m_type(first.m_object->m_type) { // make sure iterator fits the current value if (first.m_object != last.m_object) @@ -1840,30 +1840,35 @@ class basic_json { case value_t::number_integer: { + assert(first.m_object != nullptr); m_value.number_integer = first.m_object->m_value.number_integer; break; } case value_t::number_unsigned: { + assert(first.m_object != nullptr); m_value.number_unsigned = first.m_object->m_value.number_unsigned; break; } case value_t::number_float: { + assert(first.m_object != nullptr); m_value.number_float = first.m_object->m_value.number_float; break; } case value_t::boolean: { + assert(first.m_object != nullptr); m_value.boolean = first.m_object->m_value.boolean; break; } case value_t::string: { + assert(first.m_object != nullptr); m_value = *first.m_object->m_value.string; break; } @@ -1882,6 +1887,7 @@ class basic_json default: { + assert(first.m_object != nullptr); throw std::domain_error("cannot use construct with iterators from " + first.m_object->type_name()); } } @@ -1945,18 +1951,21 @@ class basic_json { case value_t::object: { + assert(other.m_value.object != nullptr); m_value = *other.m_value.object; break; } case value_t::array: { + assert(other.m_value.array != nullptr); m_value = *other.m_value.array; break; } case value_t::string: { + assert(other.m_value.string != nullptr); m_value = *other.m_value.string; break; } @@ -2011,7 +2020,8 @@ class basic_json @since version 1.0.0 */ basic_json(basic_json&& other) noexcept - : m_type(std::move(other.m_type)), m_value(std::move(other.m_value)) + : m_type(std::move(other.m_type)), + m_value(std::move(other.m_value)) { // invalidate payload other.m_type = value_t::null; @@ -2533,17 +2543,29 @@ class basic_json , int>::type = 0> T get_impl(T*) const { - return is_object() - ? T(m_value.object->begin(), m_value.object->end()) - : throw std::domain_error("type must be object, but is " + type_name()); + if (is_object()) + { + assert(m_value.object != nullptr); + return T(m_value.object->begin(), m_value.object->end()); + } + else + { + throw std::domain_error("type must be object, but is " + type_name()); + } } /// get an object (explicit) object_t get_impl(object_t*) const { - return is_object() - ? *(m_value.object) - : throw std::domain_error("type must be object, but is " + type_name()); + if (is_object()) + { + assert(m_value.object != nullptr); + return *(m_value.object); + } + else + { + throw std::domain_error("type must be object, but is " + type_name()); + } } /// get an array (explicit) @@ -2560,6 +2582,7 @@ class basic_json if (is_array()) { T to_vector; + assert(m_value.array != nullptr); std::transform(m_value.array->begin(), m_value.array->end(), std::inserter(to_vector, to_vector.end()), [](basic_json i) { @@ -2584,6 +2607,7 @@ class basic_json if (is_array()) { std::vector<T> to_vector; + assert(m_value.array != nullptr); to_vector.reserve(m_value.array->size()); std::transform(m_value.array->begin(), m_value.array->end(), std::inserter(to_vector, to_vector.end()), [](basic_json i) @@ -2606,17 +2630,29 @@ class basic_json , int>::type = 0> T get_impl(T*) const { - return is_array() - ? T(m_value.array->begin(), m_value.array->end()) - : throw std::domain_error("type must be array, but is " + type_name()); + if (is_array()) + { + assert(m_value.array != nullptr); + return T(m_value.array->begin(), m_value.array->end()); + } + else + { + throw std::domain_error("type must be array, but is " + type_name()); + } } /// get an array (explicit) array_t get_impl(array_t*) const { - return is_array() - ? *(m_value.array) - : throw std::domain_error("type must be array, but is " + type_name()); + if (is_array()) + { + assert(m_value.array != nullptr); + return *(m_value.array); + } + else + { + throw std::domain_error("type must be array, but is " + type_name()); + } } /// get a string (explicit) @@ -2626,9 +2662,15 @@ class basic_json , int>::type = 0> T get_impl(T*) const { - return is_string() - ? *m_value.string - : throw std::domain_error("type must be string, but is " + type_name()); + if (is_string()) + { + assert(m_value.string != nullptr); + return *m_value.string; + } + else + { + throw std::domain_error("type must be string, but is " + type_name()); + } } /// get a number (explicit) @@ -3098,6 +3140,7 @@ class basic_json { try { + assert(m_value.array != nullptr); return m_value.array->at(idx); } catch (std::out_of_range&) @@ -3141,6 +3184,7 @@ class basic_json { try { + assert(m_value.array != nullptr); return m_value.array->at(idx); } catch (std::out_of_range&) @@ -3188,6 +3232,7 @@ class basic_json { try { + assert(m_value.object != nullptr); return m_value.object->at(key); } catch (std::out_of_range&) @@ -3235,6 +3280,7 @@ class basic_json { try { + assert(m_value.object != nullptr); return m_value.object->at(key); } catch (std::out_of_range&) @@ -3287,6 +3333,7 @@ class basic_json if (is_array()) { // fill up array with null values if given idx is outside range + assert(m_value.array != nullptr); if (idx >= m_value.array->size()) { m_value.array->insert(m_value.array->end(), @@ -3324,9 +3371,15 @@ class basic_json const_reference operator[](size_type idx) const { // const operator[] only works for arrays - return is_array() - ? m_value.array->operator[](idx) - : throw std::domain_error("cannot use operator[] with " + type_name()); + if (is_array()) + { + assert(m_value.array != nullptr); + return m_value.array->operator[](idx); + } + else + { + throw std::domain_error("cannot use operator[] with " + type_name()); + } } /*! @@ -3366,9 +3419,15 @@ class basic_json } // operator[] only works for objects - return is_object() - ? m_value.object->operator[](key) - : throw std::domain_error("cannot use operator[] with " + type_name()); + if (is_object()) + { + assert(m_value.object != nullptr); + return m_value.object->operator[](key); + } + else + { + throw std::domain_error("cannot use operator[] with " + type_name()); + } } /*! @@ -3401,9 +3460,16 @@ class basic_json const_reference operator[](const typename object_t::key_type& key) const { // const operator[] only works for objects - return is_object() - ? m_value.object->find(key)->second - : throw std::domain_error("cannot use operator[] with " + type_name()); + if (is_object()) + { + assert(m_value.object != nullptr); + assert(m_value.object->find(key) != m_value.object->end()); + return m_value.object->find(key)->second; + } + else + { + throw std::domain_error("cannot use operator[] with " + type_name()); + } } /*! @@ -3512,9 +3578,15 @@ class basic_json } // at only works for objects - return is_object() - ? m_value.object->operator[](key) - : throw std::domain_error("cannot use operator[] with " + type_name()); + if (is_object()) + { + assert(m_value.object != nullptr); + return m_value.object->operator[](key); + } + else + { + throw std::domain_error("cannot use operator[] with " + type_name()); + } } /*! @@ -3548,9 +3620,16 @@ class basic_json const_reference operator[](T* key) const { // at only works for objects - return is_object() - ? m_value.object->find(key)->second - : throw std::domain_error("cannot use operator[] with " + type_name()); + if (is_object()) + { + assert(m_value.object != nullptr); + assert(m_value.object->find(key) != m_value.object->end()); + return m_value.object->find(key)->second; + } + else + { + throw std::domain_error("cannot use operator[] with " + type_name()); + } } /*! @@ -3880,12 +3959,14 @@ class basic_json case value_t::object: { + assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->erase(pos.m_it.object_iterator); break; } case value_t::array: { + assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->erase(pos.m_it.array_iterator); break; } @@ -3986,6 +4067,7 @@ class basic_json case value_t::object: { + assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->erase(first.m_it.object_iterator, last.m_it.object_iterator); break; @@ -3993,6 +4075,7 @@ class basic_json case value_t::array: { + assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->erase(first.m_it.array_iterator, last.m_it.array_iterator); break; @@ -4039,9 +4122,15 @@ class basic_json size_type erase(const typename object_t::key_type& key) { // this erase only works for objects - return is_object() - ? m_value.object->erase(key) - : throw std::domain_error("cannot use erase() with " + type_name()); + if (is_object()) + { + assert(m_value.object != nullptr); + return m_value.object->erase(key); + } + else + { + throw std::domain_error("cannot use erase() with " + type_name()); + } } /*! @@ -4078,6 +4167,7 @@ class basic_json throw std::out_of_range("array index " + std::to_string(idx) + " is out of range"); } + assert(m_value.array != nullptr); m_value.array->erase(m_value.array->begin() + static_cast<difference_type>(idx)); } else @@ -4120,6 +4210,7 @@ class basic_json if (is_object()) { + assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->find(key); } @@ -4136,6 +4227,7 @@ class basic_json if (is_object()) { + assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->find(key); } @@ -4163,6 +4255,7 @@ class basic_json size_type count(typename object_t::key_type key) const { // return 0 for all nonobject types + assert(not is_object() or m_value.object != nullptr); return is_object() ? m_value.object->count(key) : 0; } @@ -4504,10 +4597,6 @@ class basic_json object | result of function `object_t::empty()` array | result of function `array_t::empty()` - @note This function does not return whether a string stored as JSON value - is empty - it returns whether the JSON container itself is empty which is - false in the case of a string. - @complexity Constant, as long as @ref array_t and @ref object_t satisfy the Container concept; that is, their `empty()` functions have constant complexity. @@ -4537,13 +4626,13 @@ class basic_json case value_t::array: { - // delegate call to array_t::empty() + assert(m_value.array != nullptr); return m_value.array->empty(); } case value_t::object: { - // delegate call to object_t::empty() + assert(m_value.object != nullptr); return m_value.object->empty(); } @@ -4571,10 +4660,6 @@ class basic_json object | result of function object_t::size() array | result of function array_t::size() - @note This function does not return the length of a string stored as JSON - value - it returns the number of elements in the JSON value which is 1 in - the case of a string. - @complexity Constant, as long as @ref array_t and @ref object_t satisfy the Container concept; that is, their size() functions have constant complexity. @@ -4605,13 +4690,13 @@ class basic_json case value_t::array: { - // delegate call to array_t::size() + assert(m_value.array != nullptr); return m_value.array->size(); } case value_t::object: { - // delegate call to object_t::size() + assert(m_value.object != nullptr); return m_value.object->size(); } @@ -4665,13 +4750,13 @@ class basic_json { case value_t::array: { - // delegate call to array_t::max_size() + assert(m_value.array != nullptr); return m_value.array->max_size(); } case value_t::object: { - // delegate call to object_t::max_size() + assert(m_value.object != nullptr); return m_value.object->max_size(); } @@ -4748,18 +4833,21 @@ class basic_json case value_t::string: { + assert(m_value.string != nullptr); m_value.string->clear(); break; } case value_t::array: { + assert(m_value.array != nullptr); m_value.array->clear(); break; } case value_t::object: { + assert(m_value.object != nullptr); m_value.object->clear(); break; } @@ -4807,6 +4895,7 @@ class basic_json } // add element to array (move semantics) + assert(m_value.array != nullptr); m_value.array->push_back(std::move(val)); // invalidate object val.m_type = value_t::null; @@ -4842,6 +4931,7 @@ class basic_json } // add element to array + assert(m_value.array != nullptr); m_value.array->push_back(val); } @@ -4891,6 +4981,7 @@ class basic_json } // add element to array + assert(m_value.object != nullptr); m_value.object->insert(val); } @@ -4987,6 +5078,7 @@ class basic_json // insert to array and return iterator iterator result(this); + assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, val); return result; } @@ -5042,6 +5134,7 @@ class basic_json // insert to array and return iterator iterator result(this); + assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, cnt, val); return result; } @@ -5108,6 +5201,7 @@ class basic_json // insert to array and return iterator iterator result(this); + assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert( pos.m_it.array_iterator, first.m_it.array_iterator, @@ -5155,6 +5249,7 @@ class basic_json // insert to array and return iterator iterator result(this); + assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, ilist); return result; } @@ -5212,6 +5307,7 @@ class basic_json // swap only works for arrays if (is_array()) { + assert(m_value.array != nullptr); std::swap(*(m_value.array), other); } else @@ -5245,6 +5341,7 @@ class basic_json // swap only works for objects if (is_object()) { + assert(m_value.object != nullptr); std::swap(*(m_value.object), other); } else @@ -5278,6 +5375,7 @@ class basic_json // swap only works for strings if (is_string()) { + assert(m_value.string != nullptr); std::swap(*(m_value.string), other); } else @@ -5364,10 +5462,14 @@ class basic_json { case value_t::array: { + assert(lhs.m_value.array != nullptr); + assert(rhs.m_value.array != nullptr); return *lhs.m_value.array == *rhs.m_value.array; } case value_t::object: { + assert(lhs.m_value.object != nullptr); + assert(rhs.m_value.object != nullptr); return *lhs.m_value.object == *rhs.m_value.object; } case value_t::null: @@ -5376,6 +5478,8 @@ class basic_json } case value_t::string: { + assert(lhs.m_value.string != nullptr); + assert(rhs.m_value.string != nullptr); return *lhs.m_value.string == *rhs.m_value.string; } case value_t::boolean: @@ -5548,10 +5652,14 @@ class basic_json { case value_t::array: { + assert(lhs.m_value.array != nullptr); + assert(rhs.m_value.array != nullptr); return *lhs.m_value.array < *rhs.m_value.array; } case value_t::object: { + assert(lhs.m_value.object != nullptr); + assert(rhs.m_value.object != nullptr); return *lhs.m_value.object < *rhs.m_value.object; } case value_t::null: @@ -5560,6 +5668,8 @@ class basic_json } case value_t::string: { + assert(lhs.m_value.string != nullptr); + assert(rhs.m_value.string != nullptr); return *lhs.m_value.string < *rhs.m_value.string; } case value_t::boolean: @@ -5734,14 +5844,14 @@ class basic_json // string->float->string, string->double->string or string->long // double->string; to be safe, we read this value from // std::numeric_limits<number_float_t>::digits10 - const auto old_precision = o.precision(std::numeric_limits<double>::digits10); + const auto old_preicison = o.precision(std::numeric_limits<double>::digits10); // do the actual serialization j.dump(o, pretty_print, static_cast<unsigned int>(indentation)); // reset locale and precision o.imbue(old_locale); - o.precision(old_precision); + o.precision(old_preicison); return o; } @@ -6091,6 +6201,8 @@ class basic_json { case value_t::object: { + assert(m_value.object != nullptr); + if (m_value.object->empty()) { o << "{}"; @@ -6131,6 +6243,8 @@ class basic_json case value_t::array: { + assert(m_value.array != nullptr); + if (m_value.array->empty()) { o << "[]"; @@ -6169,6 +6283,7 @@ class basic_json case value_t::string: { + assert(m_value.string != nullptr); o << string_t("\"") << escape_string(*m_value.string) << "\""; return; } @@ -8704,6 +8819,7 @@ class basic_json basic_json result; // iterate the JSON object values + assert(value.m_value.object != nullptr); for (const auto& element : *value.m_value.object) { if (not element.second.is_primitive()) From 161c74a92ed97f163a3842ba6ed08a1b6d2d3995 Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Thu, 28 Jul 2016 21:19:56 +0200 Subject: [PATCH 19/25] some cleanup --- src/json.hpp | 19 +++++++++++++++++-- src/json.hpp.re2c | 28 +++++++++++++++++++++++++--- 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/json.hpp b/src/json.hpp index 15221b8b..f4c1b0f5 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -760,6 +760,7 @@ class basic_json }; std::unique_ptr<T, decltype(deleter)> object(alloc.allocate(1), deleter); alloc.construct(object.get(), std::forward<Args>(args)...); + assert(object.get() != nullptr); return object.release(); } @@ -4597,6 +4598,10 @@ class basic_json object | result of function `object_t::empty()` array | result of function `array_t::empty()` + @note This function does not return whether a string stored as JSON value + is empty - it returns whether the JSON container itself is empty which is + false in the case of a string. + @complexity Constant, as long as @ref array_t and @ref object_t satisfy the Container concept; that is, their `empty()` functions have constant complexity. @@ -4626,12 +4631,14 @@ class basic_json case value_t::array: { + // delegate call to array_t::empty() assert(m_value.array != nullptr); return m_value.array->empty(); } case value_t::object: { + // delegate call to object_t::empty() assert(m_value.object != nullptr); return m_value.object->empty(); } @@ -4660,6 +4667,10 @@ class basic_json object | result of function object_t::size() array | result of function array_t::size() + @note This function does not return the length of a string stored as JSON + value - it returns the number of elements in the JSON value which is 1 in + the case of a string. + @complexity Constant, as long as @ref array_t and @ref object_t satisfy the Container concept; that is, their size() functions have constant complexity. @@ -4690,12 +4701,14 @@ class basic_json case value_t::array: { + // delegate call to array_t::size() assert(m_value.array != nullptr); return m_value.array->size(); } case value_t::object: { + // delegate call to object_t::size() assert(m_value.object != nullptr); return m_value.object->size(); } @@ -4750,12 +4763,14 @@ class basic_json { case value_t::array: { + // delegate call to array_t::max_size() assert(m_value.array != nullptr); return m_value.array->max_size(); } case value_t::object: { + // delegate call to object_t::max_size() assert(m_value.object != nullptr); return m_value.object->max_size(); } @@ -5844,14 +5859,14 @@ class basic_json // string->float->string, string->double->string or string->long // double->string; to be safe, we read this value from // std::numeric_limits<number_float_t>::digits10 - const auto old_preicison = o.precision(std::numeric_limits<double>::digits10); + const auto old_precision = o.precision(std::numeric_limits<double>::digits10); // do the actual serialization j.dump(o, pretty_print, static_cast<unsigned int>(indentation)); // reset locale and precision o.imbue(old_locale); - o.precision(old_preicison); + o.precision(old_precision); return o; } diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index 74db214e..d7b19793 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -760,6 +760,7 @@ class basic_json }; std::unique_ptr<T, decltype(deleter)> object(alloc.allocate(1), deleter); alloc.construct(object.get(), std::forward<Args>(args)...); + assert(object.get() != nullptr); return object.release(); } @@ -4597,6 +4598,10 @@ class basic_json object | result of function `object_t::empty()` array | result of function `array_t::empty()` + @note This function does not return whether a string stored as JSON value + is empty - it returns whether the JSON container itself is empty which is + false in the case of a string. + @complexity Constant, as long as @ref array_t and @ref object_t satisfy the Container concept; that is, their `empty()` functions have constant complexity. @@ -4626,12 +4631,14 @@ class basic_json case value_t::array: { + // delegate call to array_t::empty() assert(m_value.array != nullptr); return m_value.array->empty(); } case value_t::object: { + // delegate call to object_t::empty() assert(m_value.object != nullptr); return m_value.object->empty(); } @@ -4660,6 +4667,10 @@ class basic_json object | result of function object_t::size() array | result of function array_t::size() + @note This function does not return the length of a string stored as JSON + value - it returns the number of elements in the JSON value which is 1 in + the case of a string. + @complexity Constant, as long as @ref array_t and @ref object_t satisfy the Container concept; that is, their size() functions have constant complexity. @@ -4690,12 +4701,14 @@ class basic_json case value_t::array: { + // delegate call to array_t::size() assert(m_value.array != nullptr); return m_value.array->size(); } case value_t::object: { + // delegate call to object_t::size() assert(m_value.object != nullptr); return m_value.object->size(); } @@ -4750,12 +4763,14 @@ class basic_json { case value_t::array: { + // delegate call to array_t::max_size() assert(m_value.array != nullptr); return m_value.array->max_size(); } case value_t::object: { + // delegate call to object_t::max_size() assert(m_value.object != nullptr); return m_value.object->max_size(); } @@ -5844,14 +5859,14 @@ class basic_json // string->float->string, string->double->string or string->long // double->string; to be safe, we read this value from // std::numeric_limits<number_float_t>::digits10 - const auto old_preicison = o.precision(std::numeric_limits<double>::digits10); + const auto old_precision = o.precision(std::numeric_limits<double>::digits10); // do the actual serialization j.dump(o, pretty_print, static_cast<unsigned int>(indentation)); // reset locale and precision o.imbue(old_locale); - o.precision(old_preicison); + o.precision(old_precision); return o; } @@ -9560,7 +9575,7 @@ struct hash<nlohmann::json> @brief user-defined string literal for JSON values This operator implements a user-defined string literal for JSON objects. It -can be used by adding \p "_json" to a string literal and returns a JSON object +can be used by adding `"_json"` to a string literal and returns a JSON object if no parse error occurred. @param[in] s a string representation of a JSON object @@ -9576,6 +9591,13 @@ inline nlohmann::json operator "" _json(const char* s, std::size_t) /*! @brief user-defined string literal for JSON pointer +This operator implements a user-defined string literal for JSON Pointers. It +can be used by adding `"_json"` to a string literal and returns a JSON pointer +object if no parse error occurred. + +@param[in] s a string representation of a JSON Pointer +@return a JSON pointer object + @since version 2.0.0 */ inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std::size_t) From b2b68a0fa1f3e41933548b4e5684def7d96f3306 Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Fri, 29 Jul 2016 22:24:47 +0200 Subject: [PATCH 20/25] header + cleanup --- src/json.hpp | 74 +++++++++++++++++++++++++---------------------- src/json.hpp.re2c | 65 ++++++++++++++++++++--------------------- 2 files changed, 72 insertions(+), 67 deletions(-) diff --git a/src/json.hpp b/src/json.hpp index f4c1b0f5..646e260d 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -32,7 +32,6 @@ SOFTWARE. #include <algorithm> #include <array> #include <cassert> -#include <cerrno> #include <ciso646> #include <cmath> #include <cstddef> @@ -44,6 +43,7 @@ SOFTWARE. #include <iostream> #include <iterator> #include <limits> +#include <locale> #include <map> #include <memory> #include <numeric> @@ -384,7 +384,7 @@ class basic_json @tparam ArrayType container type to store arrays (e.g., `std::vector` or `std::list`) - @tparam AllocatorType allocator to use for arrays (e.g., `std::allocator`) + @tparam AllocatorType allocator to use for arrays (e.g., `std::allocator`) #### Default type @@ -621,15 +621,14 @@ class basic_json > that implementations will agree exactly on their numeric values. As this range is a subrange (when considered in conjunction with the - number_integer_t type) of the exactly supported range [0, UINT64_MAX], this - class's integer type is interoperable. + number_integer_t type) of the exactly supported range [0, UINT64_MAX], + this class's integer type is interoperable. #### Storage Integer number values are stored directly inside a @ref basic_json type. @sa @ref number_float_t -- type for number values (floating-point) - @sa @ref number_integer_t -- type for number values (integer) @since version 2.0.0 @@ -1416,8 +1415,8 @@ class basic_json Create an unsigned integer number JSON value with a given content. - @tparam T helper type to compare number_unsigned_t and unsigned int - (not visible in) the interface. + @tparam T helper type to compare number_unsigned_t and unsigned int (not + visible in) the interface. @param[in] val an integer to create a JSON number from @@ -1481,8 +1480,8 @@ class basic_json disallows NaN values: > Numeric values that cannot be represented in the grammar below (such as > Infinity and NaN) are not permitted. - In case the parameter @a val is not a number, a JSON null value is - created instead. + In case the parameter @a val is not a number, a JSON null value is created + instead. @complexity Constant. @@ -1555,21 +1554,21 @@ class basic_json 1. If the list is empty, an empty JSON object value `{}` is created. 2. If the list consists of pairs whose first element is a string, a JSON - object value is created where the first elements of the pairs are treated - as keys and the second elements are as values. + object value is created where the first elements of the pairs are + treated as keys and the second elements are as values. 3. In all other cases, an array is created. The rules aim to create the best fit between a C++ initializer list and JSON values. The rationale is as follows: 1. The empty initializer list is written as `{}` which is exactly an empty - JSON object. + JSON object. 2. C++ has now way of describing mapped types other than to list a list of - pairs. As JSON requires that keys must be of type string, rule 2 is the - weakest constraint one can pose on initializer lists to interpret them as - an object. + pairs. As JSON requires that keys must be of type string, rule 2 is the + weakest constraint one can pose on initializer lists to interpret them + as an object. 3. In all other cases, the initializer list could not be interpreted as - JSON object type, so interpreting it as JSON array type is safe. + JSON object type, so interpreting it as JSON array type is safe. With the rules described above, the following JSON values cannot be expressed by an initializer list: @@ -3709,7 +3708,7 @@ class basic_json /*! @brief overload for a default value of type const char* - @copydoc basic_json::value(const typename object_t::key_type&, ValueType) + @copydoc basic_json::value(const typename object_t::key_type&, ValueType) const */ string_t value(const typename object_t::key_type& key, const char* default_value) const { @@ -3753,7 +3752,7 @@ class basic_json @liveexample{The example below shows how object elements can be queried with a default value.,basic_json__value_ptr} - @sa @ref operator[](const json_ptr&) for unchecked access by reference + @sa @ref operator[](const json_pointer&) for unchecked access by reference @since version 2.0.2 */ @@ -3784,7 +3783,7 @@ class basic_json /*! @brief overload for a default value of type const char* - @copydoc basic_json::value(const json_pointer&, ValueType) + @copydoc basic_json::value(const json_pointer&, ValueType) const */ string_t value(const json_pointer& ptr, const char* default_value) const { @@ -7386,7 +7385,7 @@ class basic_json : m_stream(s), m_buffer() { assert(m_stream != nullptr); - getline(*m_stream, m_buffer); + std::getline(*m_stream, m_buffer); m_content = reinterpret_cast<const lexer_char_t*>(m_buffer.c_str()); assert(m_content != nullptr); m_start = m_cursor = m_content; @@ -8379,8 +8378,8 @@ basic_json_parser_63: according to the nature of the escape. Some escapes create new characters (e.g., `"\\n"` is replaced by `"\n"`), some are copied as is (e.g., `"\\\\"`). Furthermore, Unicode escapes of the shape - `"\\uxxxx"` need special care. In this case, @ref to_unicode takes - care of the construction of the values. + `"\\uxxxx"` need special care. In this case, to_unicode takes care + of the construction of the values. 2. Unescaped characters are copied as is. @pre `m_cursor - m_start >= 2`, meaning the length of the last token @@ -8398,9 +8397,9 @@ basic_json_parser_63: Proof (by contradiction): Assume the loop body does not terminate. As the loop body does not contain another loop, one of the called functions must never return. The called functions are `std::strtoul` - and @ref to_unicode. Neither function can loop forever, so the loop - body will never loop forever which contradicts the assumption that the - loop body does not terminate, q.e.d.\n + and to_unicode. Neither function can loop forever, so the loop body + will never loop forever which contradicts the assumption that the loop + body does not terminate, q.e.d.\n Lemma: The loop condition for the for loop is eventually false.\n @@ -8408,15 +8407,15 @@ basic_json_parser_63: the above lemma, this can only be due to a tautological loop condition; that is, the loop condition i < m_cursor - 1 must always be true. Let x be the change of i for any loop iteration. Then - m_start + 1 + x < m_cursor - 1 must hold to loop indefinitely. - This can be rephrased to m_cursor - m_start - 2 > x. With the + m_start + 1 + x < m_cursor - 1 must hold to loop indefinitely. This + can be rephrased to m_cursor - m_start - 2 > x. With the precondition, we x <= 0, meaning that the loop condition holds - indefinitly if i is always decreased. However, observe that the - value of i is strictly increasing with each iteration, as it is - incremented by 1 in the iteration expression and never - decremented inside the loop body. Hence, the loop condition - will eventually be false which contradicts the assumption that - the loop condition is a tautology, q.e.d. + indefinitly if i is always decreased. However, observe that the value + of i is strictly increasing with each iteration, as it is incremented + by 1 in the iteration expression and never decremented inside the loop + body. Hence, the loop condition will eventually be false which + contradicts the assumption that the loop condition is a tautology, + q.e.d. @return string value of current token without opening and closing quotes @@ -10278,7 +10277,7 @@ struct hash<nlohmann::json> @brief user-defined string literal for JSON values This operator implements a user-defined string literal for JSON objects. It -can be used by adding \p "_json" to a string literal and returns a JSON object +can be used by adding `"_json"` to a string literal and returns a JSON object if no parse error occurred. @param[in] s a string representation of a JSON object @@ -10294,6 +10293,13 @@ inline nlohmann::json operator "" _json(const char* s, std::size_t) /*! @brief user-defined string literal for JSON pointer +This operator implements a user-defined string literal for JSON Pointers. It +can be used by adding `"_json"` to a string literal and returns a JSON pointer +object if no parse error occurred. + +@param[in] s a string representation of a JSON Pointer +@return a JSON pointer object + @since version 2.0.0 */ inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std::size_t) diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index d7b19793..18e7f48d 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -32,7 +32,6 @@ SOFTWARE. #include <algorithm> #include <array> #include <cassert> -#include <cerrno> #include <ciso646> #include <cmath> #include <cstddef> @@ -44,6 +43,7 @@ SOFTWARE. #include <iostream> #include <iterator> #include <limits> +#include <locale> #include <map> #include <memory> #include <numeric> @@ -384,7 +384,7 @@ class basic_json @tparam ArrayType container type to store arrays (e.g., `std::vector` or `std::list`) - @tparam AllocatorType allocator to use for arrays (e.g., `std::allocator`) + @tparam AllocatorType allocator to use for arrays (e.g., `std::allocator`) #### Default type @@ -621,15 +621,14 @@ class basic_json > that implementations will agree exactly on their numeric values. As this range is a subrange (when considered in conjunction with the - number_integer_t type) of the exactly supported range [0, UINT64_MAX], this - class's integer type is interoperable. + number_integer_t type) of the exactly supported range [0, UINT64_MAX], + this class's integer type is interoperable. #### Storage Integer number values are stored directly inside a @ref basic_json type. @sa @ref number_float_t -- type for number values (floating-point) - @sa @ref number_integer_t -- type for number values (integer) @since version 2.0.0 @@ -1416,8 +1415,8 @@ class basic_json Create an unsigned integer number JSON value with a given content. - @tparam T helper type to compare number_unsigned_t and unsigned int - (not visible in) the interface. + @tparam T helper type to compare number_unsigned_t and unsigned int (not + visible in) the interface. @param[in] val an integer to create a JSON number from @@ -1481,8 +1480,8 @@ class basic_json disallows NaN values: > Numeric values that cannot be represented in the grammar below (such as > Infinity and NaN) are not permitted. - In case the parameter @a val is not a number, a JSON null value is - created instead. + In case the parameter @a val is not a number, a JSON null value is created + instead. @complexity Constant. @@ -1555,21 +1554,21 @@ class basic_json 1. If the list is empty, an empty JSON object value `{}` is created. 2. If the list consists of pairs whose first element is a string, a JSON - object value is created where the first elements of the pairs are treated - as keys and the second elements are as values. + object value is created where the first elements of the pairs are + treated as keys and the second elements are as values. 3. In all other cases, an array is created. The rules aim to create the best fit between a C++ initializer list and JSON values. The rationale is as follows: 1. The empty initializer list is written as `{}` which is exactly an empty - JSON object. + JSON object. 2. C++ has now way of describing mapped types other than to list a list of - pairs. As JSON requires that keys must be of type string, rule 2 is the - weakest constraint one can pose on initializer lists to interpret them as - an object. + pairs. As JSON requires that keys must be of type string, rule 2 is the + weakest constraint one can pose on initializer lists to interpret them + as an object. 3. In all other cases, the initializer list could not be interpreted as - JSON object type, so interpreting it as JSON array type is safe. + JSON object type, so interpreting it as JSON array type is safe. With the rules described above, the following JSON values cannot be expressed by an initializer list: @@ -3709,7 +3708,7 @@ class basic_json /*! @brief overload for a default value of type const char* - @copydoc basic_json::value(const typename object_t::key_type&, ValueType) + @copydoc basic_json::value(const typename object_t::key_type&, ValueType) const */ string_t value(const typename object_t::key_type& key, const char* default_value) const { @@ -3753,7 +3752,7 @@ class basic_json @liveexample{The example below shows how object elements can be queried with a default value.,basic_json__value_ptr} - @sa @ref operator[](const json_ptr&) for unchecked access by reference + @sa @ref operator[](const json_pointer&) for unchecked access by reference @since version 2.0.2 */ @@ -3784,7 +3783,7 @@ class basic_json /*! @brief overload for a default value of type const char* - @copydoc basic_json::value(const json_pointer&, ValueType) + @copydoc basic_json::value(const json_pointer&, ValueType) const */ string_t value(const json_pointer& ptr, const char* default_value) const { @@ -7386,7 +7385,7 @@ class basic_json : m_stream(s), m_buffer() { assert(m_stream != nullptr); - getline(*m_stream, m_buffer); + std::getline(*m_stream, m_buffer); m_content = reinterpret_cast<const lexer_char_t*>(m_buffer.c_str()); assert(m_content != nullptr); m_start = m_cursor = m_content; @@ -7676,8 +7675,8 @@ class basic_json according to the nature of the escape. Some escapes create new characters (e.g., `"\\n"` is replaced by `"\n"`), some are copied as is (e.g., `"\\\\"`). Furthermore, Unicode escapes of the shape - `"\\uxxxx"` need special care. In this case, @ref to_unicode takes - care of the construction of the values. + `"\\uxxxx"` need special care. In this case, to_unicode takes care + of the construction of the values. 2. Unescaped characters are copied as is. @pre `m_cursor - m_start >= 2`, meaning the length of the last token @@ -7695,9 +7694,9 @@ class basic_json Proof (by contradiction): Assume the loop body does not terminate. As the loop body does not contain another loop, one of the called functions must never return. The called functions are `std::strtoul` - and @ref to_unicode. Neither function can loop forever, so the loop - body will never loop forever which contradicts the assumption that the - loop body does not terminate, q.e.d.\n + and to_unicode. Neither function can loop forever, so the loop body + will never loop forever which contradicts the assumption that the loop + body does not terminate, q.e.d.\n Lemma: The loop condition for the for loop is eventually false.\n @@ -7705,15 +7704,15 @@ class basic_json the above lemma, this can only be due to a tautological loop condition; that is, the loop condition i < m_cursor - 1 must always be true. Let x be the change of i for any loop iteration. Then - m_start + 1 + x < m_cursor - 1 must hold to loop indefinitely. - This can be rephrased to m_cursor - m_start - 2 > x. With the + m_start + 1 + x < m_cursor - 1 must hold to loop indefinitely. This + can be rephrased to m_cursor - m_start - 2 > x. With the precondition, we x <= 0, meaning that the loop condition holds - indefinitly if i is always decreased. However, observe that the - value of i is strictly increasing with each iteration, as it is - incremented by 1 in the iteration expression and never - decremented inside the loop body. Hence, the loop condition - will eventually be false which contradicts the assumption that - the loop condition is a tautology, q.e.d. + indefinitly if i is always decreased. However, observe that the value + of i is strictly increasing with each iteration, as it is incremented + by 1 in the iteration expression and never decremented inside the loop + body. Hence, the loop condition will eventually be false which + contradicts the assumption that the loop condition is a tautology, + q.e.d. @return string value of current token without opening and closing quotes From b145e0c404e72e17f711735a7cf1ddcd29176ac9 Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Fri, 29 Jul 2016 23:47:16 +0200 Subject: [PATCH 21/25] more cleanup --- README.md | 2 +- src/json.hpp | 66 +++++++++++++++++++++++++++-------------------- src/json.hpp.re2c | 66 +++++++++++++++++++++++++++-------------------- 3 files changed, 77 insertions(+), 57 deletions(-) diff --git a/README.md b/README.md index 5adcf15c..58490679 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Other aspects were not so important to us: - **Memory efficiency**. Each JSON object has an overhead of one pointer (the maximal size of a union) and one enumeration element (1 byte). The default generalization uses the following C++ data types: `std::string` for strings, `int64_t`, `uint64_t` or `double` for numbers, `std::map` for objects, `std::vector` for arrays, and `bool` for Booleans. However, you can template the generalized class `basic_json` to your needs. -- **Speed**. We currently implement the parser as naive [recursive descent parser](http://en.wikipedia.org/wiki/Recursive_descent_parser) with hand coded string handling. It is fast enough, but a [LALR-parser](http://en.wikipedia.org/wiki/LALR_parser) with a decent regular expression processor should be even faster (but would consist of more files which makes the integration harder). +- **Speed**. We currently implement the parser as naive [recursive descent parser](http://en.wikipedia.org/wiki/Recursive_descent_parser) with hand coded string handling. It is fast enough, but a [LALR-parser](http://en.wikipedia.org/wiki/LALR_parser) may be even faster (but would consist of more files which makes the integration harder). See the [contribution guidelines](https://github.com/nlohmann/json/blob/master/.github/CONTRIBUTING.md#please-dont) for more information. diff --git a/src/json.hpp b/src/json.hpp index 646e260d..565c0415 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -927,12 +927,13 @@ class basic_json @brief per-element parser callback type With a parser callback function, the result of parsing a JSON text can be - influenced. When passed to @ref parse(std::istream&, parser_callback_t) or - @ref parse(const string_t&, parser_callback_t), it is called on certain - events (passed as @ref parse_event_t via parameter @a event) with a set - recursion depth @a depth and context JSON value @a parsed. The return - value of the callback function is a boolean indicating whether the element - that emitted the callback shall be kept or not. + influenced. When passed to @ref parse(std::istream&, const + parser_callback_t) or @ref parse(const string_t&, const parser_callback_t), + it is called on certain events (passed as @ref parse_event_t via parameter + @a event) with a set recursion depth @a depth and context JSON value + @a parsed. The return value of the callback function is a boolean + indicating whether the element that emitted the callback shall be kept or + not. We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values @@ -1913,7 +1914,7 @@ class basic_json @since version 2.0.0 */ - explicit basic_json(std::istream& i, parser_callback_t cb = nullptr) + explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr) { *this = parser(i, cb).parse(); } @@ -5907,12 +5908,13 @@ class basic_json @liveexample{The example below demonstrates the `parse()` function with and without callback function.,parse__string__parser_callback_t} - @sa @ref parse(std::istream&, parser_callback_t) for a version that reads - from an input stream + @sa @ref parse(std::istream&, const parser_callback_t) for a version that + reads from an input stream @since version 1.0.0 */ - static basic_json parse(const string_t& s, parser_callback_t cb = nullptr) + static basic_json parse(const string_t& s, + const parser_callback_t cb = nullptr) { return parser(s, cb).parse(); } @@ -5936,20 +5938,22 @@ class basic_json @liveexample{The example below demonstrates the `parse()` function with and without callback function.,parse__istream__parser_callback_t} - @sa @ref parse(const string_t&, parser_callback_t) for a version that - reads from a string + @sa @ref parse(const string_t&, const parser_callback_t) for a version + that reads from a string @since version 1.0.0 */ - static basic_json parse(std::istream& i, parser_callback_t cb = nullptr) + static basic_json parse(std::istream& i, + const parser_callback_t cb = nullptr) { return parser(i, cb).parse(); } /*! - @copydoc parse(std::istream&, parser_callback_t) + @copydoc parse(std::istream&, const parser_callback_t) */ - static basic_json parse(std::istream&& i, parser_callback_t cb = nullptr) + static basic_json parse(std::istream&& i, + const parser_callback_t cb = nullptr) { return parser(i, cb).parse(); } @@ -5972,8 +5976,8 @@ class basic_json @liveexample{The example below shows how a JSON value is constructed by reading a serialization from a stream.,operator_deserialize} - @sa parse(std::istream&, parser_callback_t) for a variant with a parser - callback function to filter values while parsing + @sa parse(std::istream&, const parser_callback_t) for a variant with a + parser callback function to filter values while parsing @since version 1.0.0 */ @@ -6001,7 +6005,18 @@ class basic_json // convenience functions // /////////////////////////// - /// return the type as string + /*! + @brief return the type as string + + Returns the type name as string to be used in error messages - usually to + indicate that a function was called on a wrong JSON type. + + @return basically a string representation of a the @ref m_type member + + @complexity Constant. + + @since version 1.0.0 + */ std::string type_name() const { switch (m_type) @@ -7487,7 +7502,7 @@ class basic_json } /// return name of values of type token_type (only used for errors) - static std::string token_type_name(token_type t) + static std::string token_type_name(const token_type t) { switch (t) { @@ -8540,11 +8555,6 @@ basic_json_parser_63: the number @return the floating point number - - @bug This function uses `std::strtof`, `std::strtod`, or `std::strtold` - which use the current C locale to determine which character is used as - decimal point character. This may yield to parse errors if the locale - does not used `.`. */ long double str_to_float_t(long double* /* type */, char** endptr) const { @@ -8725,7 +8735,7 @@ basic_json_parser_63: { public: /// constructor for strings - parser(const string_t& s, parser_callback_t cb = nullptr) noexcept + parser(const string_t& s, const parser_callback_t cb = nullptr) noexcept : callback(cb), m_lexer(s) { // read first token @@ -8733,7 +8743,7 @@ basic_json_parser_63: } /// a parser reading from an input stream - parser(std::istream& _is, parser_callback_t cb = nullptr) noexcept + parser(std::istream& _is, const parser_callback_t cb = nullptr) noexcept : callback(cb), m_lexer(&_is) { // read first token @@ -8981,7 +8991,7 @@ basic_json_parser_63: /// current level of recursion int depth = 0; /// callback function - parser_callback_t callback; + const parser_callback_t callback; /// the type of the last read token typename lexer::token_type last_token = lexer::token_type::uninitialized; /// the lexer @@ -9420,7 +9430,7 @@ basic_json_parser_63: @param[in,out] s the string to manipulate @param[in] f the substring to replace with @a t - @param[out] t the string to replace @a f + @param[in] t the string to replace @a f @return The string @a s where all occurrences of @a f are replaced with @a t. diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index 18e7f48d..26fafa54 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -927,12 +927,13 @@ class basic_json @brief per-element parser callback type With a parser callback function, the result of parsing a JSON text can be - influenced. When passed to @ref parse(std::istream&, parser_callback_t) or - @ref parse(const string_t&, parser_callback_t), it is called on certain - events (passed as @ref parse_event_t via parameter @a event) with a set - recursion depth @a depth and context JSON value @a parsed. The return - value of the callback function is a boolean indicating whether the element - that emitted the callback shall be kept or not. + influenced. When passed to @ref parse(std::istream&, const + parser_callback_t) or @ref parse(const string_t&, const parser_callback_t), + it is called on certain events (passed as @ref parse_event_t via parameter + @a event) with a set recursion depth @a depth and context JSON value + @a parsed. The return value of the callback function is a boolean + indicating whether the element that emitted the callback shall be kept or + not. We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values @@ -1913,7 +1914,7 @@ class basic_json @since version 2.0.0 */ - explicit basic_json(std::istream& i, parser_callback_t cb = nullptr) + explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr) { *this = parser(i, cb).parse(); } @@ -5907,12 +5908,13 @@ class basic_json @liveexample{The example below demonstrates the `parse()` function with and without callback function.,parse__string__parser_callback_t} - @sa @ref parse(std::istream&, parser_callback_t) for a version that reads - from an input stream + @sa @ref parse(std::istream&, const parser_callback_t) for a version that + reads from an input stream @since version 1.0.0 */ - static basic_json parse(const string_t& s, parser_callback_t cb = nullptr) + static basic_json parse(const string_t& s, + const parser_callback_t cb = nullptr) { return parser(s, cb).parse(); } @@ -5936,20 +5938,22 @@ class basic_json @liveexample{The example below demonstrates the `parse()` function with and without callback function.,parse__istream__parser_callback_t} - @sa @ref parse(const string_t&, parser_callback_t) for a version that - reads from a string + @sa @ref parse(const string_t&, const parser_callback_t) for a version + that reads from a string @since version 1.0.0 */ - static basic_json parse(std::istream& i, parser_callback_t cb = nullptr) + static basic_json parse(std::istream& i, + const parser_callback_t cb = nullptr) { return parser(i, cb).parse(); } /*! - @copydoc parse(std::istream&, parser_callback_t) + @copydoc parse(std::istream&, const parser_callback_t) */ - static basic_json parse(std::istream&& i, parser_callback_t cb = nullptr) + static basic_json parse(std::istream&& i, + const parser_callback_t cb = nullptr) { return parser(i, cb).parse(); } @@ -5972,8 +5976,8 @@ class basic_json @liveexample{The example below shows how a JSON value is constructed by reading a serialization from a stream.,operator_deserialize} - @sa parse(std::istream&, parser_callback_t) for a variant with a parser - callback function to filter values while parsing + @sa parse(std::istream&, const parser_callback_t) for a variant with a + parser callback function to filter values while parsing @since version 1.0.0 */ @@ -6001,7 +6005,18 @@ class basic_json // convenience functions // /////////////////////////// - /// return the type as string + /*! + @brief return the type as string + + Returns the type name as string to be used in error messages - usually to + indicate that a function was called on a wrong JSON type. + + @return basically a string representation of a the @ref m_type member + + @complexity Constant. + + @since version 1.0.0 + */ std::string type_name() const { switch (m_type) @@ -7487,7 +7502,7 @@ class basic_json } /// return name of values of type token_type (only used for errors) - static std::string token_type_name(token_type t) + static std::string token_type_name(const token_type t) { switch (t) { @@ -7837,11 +7852,6 @@ class basic_json the number @return the floating point number - - @bug This function uses `std::strtof`, `std::strtod`, or `std::strtold` - which use the current C locale to determine which character is used as - decimal point character. This may yield to parse errors if the locale - does not used `.`. */ long double str_to_float_t(long double* /* type */, char** endptr) const { @@ -8022,7 +8032,7 @@ class basic_json { public: /// constructor for strings - parser(const string_t& s, parser_callback_t cb = nullptr) noexcept + parser(const string_t& s, const parser_callback_t cb = nullptr) noexcept : callback(cb), m_lexer(s) { // read first token @@ -8030,7 +8040,7 @@ class basic_json } /// a parser reading from an input stream - parser(std::istream& _is, parser_callback_t cb = nullptr) noexcept + parser(std::istream& _is, const parser_callback_t cb = nullptr) noexcept : callback(cb), m_lexer(&_is) { // read first token @@ -8278,7 +8288,7 @@ class basic_json /// current level of recursion int depth = 0; /// callback function - parser_callback_t callback; + const parser_callback_t callback; /// the type of the last read token typename lexer::token_type last_token = lexer::token_type::uninitialized; /// the lexer @@ -8717,7 +8727,7 @@ class basic_json @param[in,out] s the string to manipulate @param[in] f the substring to replace with @a t - @param[out] t the string to replace @a f + @param[in] t the string to replace @a f @return The string @a s where all occurrences of @a f are replaced with @a t. From 5405ae860117f55f9b5af287a7006dd64cef9eaa Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Sat, 30 Jul 2016 10:50:53 +0200 Subject: [PATCH 22/25] added default value --- src/json.hpp | 2 +- src/json.hpp.re2c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/json.hpp b/src/json.hpp index 565c0415..9d2305d8 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -8991,7 +8991,7 @@ basic_json_parser_63: /// current level of recursion int depth = 0; /// callback function - const parser_callback_t callback; + const parser_callback_t callback = nullptr; /// the type of the last read token typename lexer::token_type last_token = lexer::token_type::uninitialized; /// the lexer diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index 26fafa54..537d4f4d 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -8288,7 +8288,7 @@ class basic_json /// current level of recursion int depth = 0; /// callback function - const parser_callback_t callback; + const parser_callback_t callback = nullptr; /// the type of the last read token typename lexer::token_type last_token = lexer::token_type::uninitialized; /// the lexer From 891918a30f16a515ed0c499dcab5526c266ccb70 Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Sat, 30 Jul 2016 16:12:10 +0200 Subject: [PATCH 23/25] cleanup and documentation --- src/json.hpp | 190 ++++++++++++++++++++++++++++++++++------------ src/json.hpp.re2c | 190 ++++++++++++++++++++++++++++++++++------------ 2 files changed, 282 insertions(+), 98 deletions(-) diff --git a/src/json.hpp b/src/json.hpp index 9d2305d8..46edec62 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -1785,6 +1785,8 @@ class basic_json @param[in] first begin of the range to copy from (included) @param[in] last end of the range to copy from (excluded) + @pre Iterators @a first and @a last must be initialized. + @throw std::domain_error if iterators are not compatible; that is, do not belong to the same JSON value; example: `"iterators are not compatible"` @throw std::out_of_range if iterators are for a primitive type (number, @@ -1807,14 +1809,20 @@ class basic_json std::is_same<InputIT, typename basic_json_t::const_iterator>::value , int>::type = 0> - basic_json(InputIT first, InputIT last) : m_type(first.m_object->m_type) + basic_json(InputIT first, InputIT last) { + assert(first.m_object != nullptr); + assert(last.m_object != nullptr); + // make sure iterator fits the current value if (first.m_object != last.m_object) { throw std::domain_error("iterators are not compatible"); } + // copy type from first iterator + m_type = first.m_object->m_type; + // check if iterator range is complete for primitive values switch (m_type) { @@ -1841,35 +1849,30 @@ class basic_json { case value_t::number_integer: { - assert(first.m_object != nullptr); m_value.number_integer = first.m_object->m_value.number_integer; break; } case value_t::number_unsigned: { - assert(first.m_object != nullptr); m_value.number_unsigned = first.m_object->m_value.number_unsigned; break; } case value_t::number_float: { - assert(first.m_object != nullptr); m_value.number_float = first.m_object->m_value.number_float; break; } case value_t::boolean: { - assert(first.m_object != nullptr); m_value.boolean = first.m_object->m_value.boolean; break; } case value_t::string: { - assert(first.m_object != nullptr); m_value = *first.m_object->m_value.string; break; } @@ -1888,7 +1891,6 @@ class basic_json default: { - assert(first.m_object != nullptr); throw std::domain_error("cannot use construct with iterators from " + first.m_object->type_name()); } } @@ -6561,6 +6563,12 @@ class basic_json This class implements a const iterator for the @ref basic_json class. From this class, the @ref iterator class is derived. + @note An iterator is called *initialized* when a pointer to a JSON value + has been set (e.g., by a constructor or a copy assignment). If the + iterator is default-constructed, it is *uninitialized* and most + methods are undefined. The library uses assertions to detect calls + on uninitialized iterators. + @requirement The class satisfies the following concept requirements: - [RandomAccessIterator](http://en.cppreference.com/w/cpp/concept/RandomAccessIterator): The iterator that can be moved to point (forward and backward) to any @@ -6588,7 +6596,12 @@ class basic_json /// default constructor const_iterator() = default; - /// constructor for a given JSON instance + /*! + @brief constructor for a given JSON instance + @param[in] object pointer to a JSON object for this iterator + @pre object != nullptr + @post The iterator is initialized; i.e. `m_object != nullptr`. + */ explicit const_iterator(pointer object) noexcept : m_object(object) { @@ -6616,40 +6629,53 @@ class basic_json } } - /// copy constructor given a nonconst iterator + /*! + @brief copy constructor given a non-const iterator + @param[in] other iterator to copy from + @note It is not checked whether @a other is initialized. + */ explicit const_iterator(const iterator& other) noexcept : m_object(other.m_object) { - assert(m_object != nullptr); - - switch (m_object->m_type) + if (m_object != nullptr) { - case basic_json::value_t::object: + switch (m_object->m_type) { - m_it.object_iterator = other.m_it.object_iterator; - break; - } + case basic_json::value_t::object: + { + m_it.object_iterator = other.m_it.object_iterator; + break; + } - case basic_json::value_t::array: - { - m_it.array_iterator = other.m_it.array_iterator; - break; - } + case basic_json::value_t::array: + { + m_it.array_iterator = other.m_it.array_iterator; + break; + } - default: - { - m_it.primitive_iterator = other.m_it.primitive_iterator; - break; + default: + { + m_it.primitive_iterator = other.m_it.primitive_iterator; + break; + } } } } - /// copy constructor + /*! + @brief copy constructor + @param[in] other iterator to copy from + @note It is not checked whether @a other is initialized. + */ const_iterator(const const_iterator& other) noexcept : m_object(other.m_object), m_it(other.m_it) {} - /// copy assignment + /*! + @brief copy assignment + @param[in,out] other iterator to copy from + @note It is not checked whether @a other is initialized. + */ const_iterator& operator=(const_iterator other) noexcept( std::is_nothrow_move_constructible<pointer>::value and std::is_nothrow_move_assignable<pointer>::value and @@ -6663,7 +6689,10 @@ class basic_json } private: - /// set the iterator to the first value + /*! + @brief set the iterator to the first value + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ void set_begin() noexcept { assert(m_object != nullptr); @@ -6699,7 +6728,10 @@ class basic_json } } - /// set the iterator past the last value + /*! + @brief set the iterator past the last value + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ void set_end() noexcept { assert(m_object != nullptr); @@ -6729,7 +6761,10 @@ class basic_json } public: - /// return a reference to the value pointed to by the iterator + /*! + @brief return a reference to the value pointed to by the iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ reference operator*() const { assert(m_object != nullptr); @@ -6769,7 +6804,10 @@ class basic_json } } - /// dereference the iterator + /*! + @brief dereference the iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ pointer operator->() const { assert(m_object != nullptr); @@ -6804,7 +6842,10 @@ class basic_json } } - /// post-increment (it++) + /*! + @brief post-increment (it++) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ const_iterator operator++(int) { auto result = *this; @@ -6812,7 +6853,10 @@ class basic_json return result; } - /// pre-increment (++it) + /*! + @brief pre-increment (++it) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ const_iterator& operator++() { assert(m_object != nullptr); @@ -6841,7 +6885,10 @@ class basic_json return *this; } - /// post-decrement (it--) + /*! + @brief post-decrement (it--) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ const_iterator operator--(int) { auto result = *this; @@ -6849,7 +6896,10 @@ class basic_json return result; } - /// pre-decrement (--it) + /*! + @brief pre-decrement (--it) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ const_iterator& operator--() { assert(m_object != nullptr); @@ -6878,7 +6928,10 @@ class basic_json return *this; } - /// comparison: equal + /*! + @brief comparison: equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ bool operator==(const const_iterator& other) const { // if objects are not the same, the comparison is undefined @@ -6908,13 +6961,19 @@ class basic_json } } - /// comparison: not equal + /*! + @brief comparison: not equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ bool operator!=(const const_iterator& other) const { return not operator==(other); } - /// comparison: smaller + /*! + @brief comparison: smaller + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ bool operator<(const const_iterator& other) const { // if objects are not the same, the comparison is undefined @@ -6944,25 +7003,37 @@ class basic_json } } - /// comparison: less than or equal + /*! + @brief comparison: less than or equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ bool operator<=(const const_iterator& other) const { return not other.operator < (*this); } - /// comparison: greater than + /*! + @brief comparison: greater than + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ bool operator>(const const_iterator& other) const { return not operator<=(other); } - /// comparison: greater than or equal + /*! + @brief comparison: greater than or equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ bool operator>=(const const_iterator& other) const { return not operator<(other); } - /// add to iterator + /*! + @brief add to iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ const_iterator& operator+=(difference_type i) { assert(m_object != nullptr); @@ -6990,13 +7061,19 @@ class basic_json return *this; } - /// subtract from iterator + /*! + @brief subtract from iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ const_iterator& operator-=(difference_type i) { return operator+=(-i); } - /// add to iterator + /*! + @brief add to iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ const_iterator operator+(difference_type i) { auto result = *this; @@ -7004,7 +7081,10 @@ class basic_json return result; } - /// subtract from iterator + /*! + @brief subtract from iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ const_iterator operator-(difference_type i) { auto result = *this; @@ -7012,7 +7092,10 @@ class basic_json return result; } - /// return difference + /*! + @brief return difference + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ difference_type operator-(const const_iterator& other) const { assert(m_object != nullptr); @@ -7036,7 +7119,10 @@ class basic_json } } - /// access to successor + /*! + @brief access to successor + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ reference operator[](difference_type n) const { assert(m_object != nullptr); @@ -7072,7 +7158,10 @@ class basic_json } } - /// return the key of an object iterator + /*! + @brief return the key of an object iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ typename object_t::key_type key() const { assert(m_object != nullptr); @@ -7087,7 +7176,10 @@ class basic_json } } - /// return the value of an iterator + /*! + @brief return the value of an iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ reference value() const { return operator*(); diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index 537d4f4d..7bc0f360 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -1785,6 +1785,8 @@ class basic_json @param[in] first begin of the range to copy from (included) @param[in] last end of the range to copy from (excluded) + @pre Iterators @a first and @a last must be initialized. + @throw std::domain_error if iterators are not compatible; that is, do not belong to the same JSON value; example: `"iterators are not compatible"` @throw std::out_of_range if iterators are for a primitive type (number, @@ -1807,14 +1809,20 @@ class basic_json std::is_same<InputIT, typename basic_json_t::const_iterator>::value , int>::type = 0> - basic_json(InputIT first, InputIT last) : m_type(first.m_object->m_type) + basic_json(InputIT first, InputIT last) { + assert(first.m_object != nullptr); + assert(last.m_object != nullptr); + // make sure iterator fits the current value if (first.m_object != last.m_object) { throw std::domain_error("iterators are not compatible"); } + // copy type from first iterator + m_type = first.m_object->m_type; + // check if iterator range is complete for primitive values switch (m_type) { @@ -1841,35 +1849,30 @@ class basic_json { case value_t::number_integer: { - assert(first.m_object != nullptr); m_value.number_integer = first.m_object->m_value.number_integer; break; } case value_t::number_unsigned: { - assert(first.m_object != nullptr); m_value.number_unsigned = first.m_object->m_value.number_unsigned; break; } case value_t::number_float: { - assert(first.m_object != nullptr); m_value.number_float = first.m_object->m_value.number_float; break; } case value_t::boolean: { - assert(first.m_object != nullptr); m_value.boolean = first.m_object->m_value.boolean; break; } case value_t::string: { - assert(first.m_object != nullptr); m_value = *first.m_object->m_value.string; break; } @@ -1888,7 +1891,6 @@ class basic_json default: { - assert(first.m_object != nullptr); throw std::domain_error("cannot use construct with iterators from " + first.m_object->type_name()); } } @@ -6561,6 +6563,12 @@ class basic_json This class implements a const iterator for the @ref basic_json class. From this class, the @ref iterator class is derived. + @note An iterator is called *initialized* when a pointer to a JSON value + has been set (e.g., by a constructor or a copy assignment). If the + iterator is default-constructed, it is *uninitialized* and most + methods are undefined. The library uses assertions to detect calls + on uninitialized iterators. + @requirement The class satisfies the following concept requirements: - [RandomAccessIterator](http://en.cppreference.com/w/cpp/concept/RandomAccessIterator): The iterator that can be moved to point (forward and backward) to any @@ -6588,7 +6596,12 @@ class basic_json /// default constructor const_iterator() = default; - /// constructor for a given JSON instance + /*! + @brief constructor for a given JSON instance + @param[in] object pointer to a JSON object for this iterator + @pre object != nullptr + @post The iterator is initialized; i.e. `m_object != nullptr`. + */ explicit const_iterator(pointer object) noexcept : m_object(object) { @@ -6616,40 +6629,53 @@ class basic_json } } - /// copy constructor given a nonconst iterator + /*! + @brief copy constructor given a non-const iterator + @param[in] other iterator to copy from + @note It is not checked whether @a other is initialized. + */ explicit const_iterator(const iterator& other) noexcept : m_object(other.m_object) { - assert(m_object != nullptr); - - switch (m_object->m_type) + if (m_object != nullptr) { - case basic_json::value_t::object: + switch (m_object->m_type) { - m_it.object_iterator = other.m_it.object_iterator; - break; - } + case basic_json::value_t::object: + { + m_it.object_iterator = other.m_it.object_iterator; + break; + } - case basic_json::value_t::array: - { - m_it.array_iterator = other.m_it.array_iterator; - break; - } + case basic_json::value_t::array: + { + m_it.array_iterator = other.m_it.array_iterator; + break; + } - default: - { - m_it.primitive_iterator = other.m_it.primitive_iterator; - break; + default: + { + m_it.primitive_iterator = other.m_it.primitive_iterator; + break; + } } } } - /// copy constructor + /*! + @brief copy constructor + @param[in] other iterator to copy from + @note It is not checked whether @a other is initialized. + */ const_iterator(const const_iterator& other) noexcept : m_object(other.m_object), m_it(other.m_it) {} - /// copy assignment + /*! + @brief copy assignment + @param[in,out] other iterator to copy from + @note It is not checked whether @a other is initialized. + */ const_iterator& operator=(const_iterator other) noexcept( std::is_nothrow_move_constructible<pointer>::value and std::is_nothrow_move_assignable<pointer>::value and @@ -6663,7 +6689,10 @@ class basic_json } private: - /// set the iterator to the first value + /*! + @brief set the iterator to the first value + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ void set_begin() noexcept { assert(m_object != nullptr); @@ -6699,7 +6728,10 @@ class basic_json } } - /// set the iterator past the last value + /*! + @brief set the iterator past the last value + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ void set_end() noexcept { assert(m_object != nullptr); @@ -6729,7 +6761,10 @@ class basic_json } public: - /// return a reference to the value pointed to by the iterator + /*! + @brief return a reference to the value pointed to by the iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ reference operator*() const { assert(m_object != nullptr); @@ -6769,7 +6804,10 @@ class basic_json } } - /// dereference the iterator + /*! + @brief dereference the iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ pointer operator->() const { assert(m_object != nullptr); @@ -6804,7 +6842,10 @@ class basic_json } } - /// post-increment (it++) + /*! + @brief post-increment (it++) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ const_iterator operator++(int) { auto result = *this; @@ -6812,7 +6853,10 @@ class basic_json return result; } - /// pre-increment (++it) + /*! + @brief pre-increment (++it) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ const_iterator& operator++() { assert(m_object != nullptr); @@ -6841,7 +6885,10 @@ class basic_json return *this; } - /// post-decrement (it--) + /*! + @brief post-decrement (it--) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ const_iterator operator--(int) { auto result = *this; @@ -6849,7 +6896,10 @@ class basic_json return result; } - /// pre-decrement (--it) + /*! + @brief pre-decrement (--it) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ const_iterator& operator--() { assert(m_object != nullptr); @@ -6878,7 +6928,10 @@ class basic_json return *this; } - /// comparison: equal + /*! + @brief comparison: equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ bool operator==(const const_iterator& other) const { // if objects are not the same, the comparison is undefined @@ -6908,13 +6961,19 @@ class basic_json } } - /// comparison: not equal + /*! + @brief comparison: not equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ bool operator!=(const const_iterator& other) const { return not operator==(other); } - /// comparison: smaller + /*! + @brief comparison: smaller + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ bool operator<(const const_iterator& other) const { // if objects are not the same, the comparison is undefined @@ -6944,25 +7003,37 @@ class basic_json } } - /// comparison: less than or equal + /*! + @brief comparison: less than or equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ bool operator<=(const const_iterator& other) const { return not other.operator < (*this); } - /// comparison: greater than + /*! + @brief comparison: greater than + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ bool operator>(const const_iterator& other) const { return not operator<=(other); } - /// comparison: greater than or equal + /*! + @brief comparison: greater than or equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ bool operator>=(const const_iterator& other) const { return not operator<(other); } - /// add to iterator + /*! + @brief add to iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ const_iterator& operator+=(difference_type i) { assert(m_object != nullptr); @@ -6990,13 +7061,19 @@ class basic_json return *this; } - /// subtract from iterator + /*! + @brief subtract from iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ const_iterator& operator-=(difference_type i) { return operator+=(-i); } - /// add to iterator + /*! + @brief add to iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ const_iterator operator+(difference_type i) { auto result = *this; @@ -7004,7 +7081,10 @@ class basic_json return result; } - /// subtract from iterator + /*! + @brief subtract from iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ const_iterator operator-(difference_type i) { auto result = *this; @@ -7012,7 +7092,10 @@ class basic_json return result; } - /// return difference + /*! + @brief return difference + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ difference_type operator-(const const_iterator& other) const { assert(m_object != nullptr); @@ -7036,7 +7119,10 @@ class basic_json } } - /// access to successor + /*! + @brief access to successor + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ reference operator[](difference_type n) const { assert(m_object != nullptr); @@ -7072,7 +7158,10 @@ class basic_json } } - /// return the key of an object iterator + /*! + @brief return the key of an object iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ typename object_t::key_type key() const { assert(m_object != nullptr); @@ -7087,7 +7176,10 @@ class basic_json } } - /// return the value of an iterator + /*! + @brief return the value of an iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ reference value() const { return operator*(); From 9e51c9041eb4f1adde343e2998a3d77c807d67ed Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Sat, 30 Jul 2016 18:02:41 +0200 Subject: [PATCH 24/25] replaced individual assertions by a class invariant function --- src/json.hpp | 206 +++++++++++++++++++++++++--------------------- src/json.hpp.re2c | 206 +++++++++++++++++++++++++--------------------- 2 files changed, 224 insertions(+), 188 deletions(-) diff --git a/src/json.hpp b/src/json.hpp index 46edec62..7120ad80 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -190,6 +190,13 @@ default) JSON values can be used like STL containers and provide reverse iterator access. +@invariant The member variables @a m_value and @a m_type have the following +relationship: +- If `m_type == value_t::object`, then `m_value.object != nullptr`. +- If `m_type == value_t::array`, then `m_value.array != nullptr`. +- If `m_type == value_t::string`, then `m_value.string != nullptr`. +The invariants are checked by member function assert_invariant(). + @internal @note ObjectType trick from http://stackoverflow.com/a/9860911 @endinternal @@ -891,6 +898,21 @@ class basic_json } }; + /*! + @brief checks the class invariants + + This function asserts the class invariants. It needs to be called at the + end of every constructor to make sure that created objects respect the + invariant. Furthermore, it has to be called each time the type of a JSON + value is changed, because the invariant expresses a relationship between + @a m_type and @a m_value. + */ + void assert_invariant() const + { + assert(m_type != value_t::object or m_value.object != nullptr); + assert(m_type != value_t::array or m_value.array != nullptr); + assert(m_type != value_t::string or m_value.string != nullptr); + } public: ////////////////////////// @@ -1030,7 +1052,9 @@ class basic_json */ basic_json(const value_t value_type) : m_type(value_type), m_value(value_type) - {} + { + assert_invariant(); + } /*! @brief create a null object (implicitly) @@ -1038,6 +1062,9 @@ class basic_json Create a `null` JSON value. This is the implicit version of the `null` value constructor as it takes no parameters. + @note The class invariant is satisfied, because it poses no requirements + for null values. + @complexity Constant. @exceptionsafety No-throw guarantee: this constructor never throws @@ -1082,7 +1109,9 @@ class basic_json */ basic_json(std::nullptr_t) noexcept : basic_json(value_t::null) - {} + { + assert_invariant(); + } /*! @brief create an object (explicit) @@ -1105,7 +1134,9 @@ class basic_json */ basic_json(const object_t& val) : m_type(value_t::object), m_value(val) - {} + { + assert_invariant(); + } /*! @brief create an object (implicit) @@ -1144,6 +1175,7 @@ class basic_json using std::begin; using std::end; m_value.object = create<object_t>(begin(val), end(val)); + assert_invariant(); } /*! @@ -1167,7 +1199,9 @@ class basic_json */ basic_json(const array_t& val) : m_type(value_t::array), m_value(val) - {} + { + assert_invariant(); + } /*! @brief create an array (implicit) @@ -1211,6 +1245,7 @@ class basic_json using std::begin; using std::end; m_value.array = create<array_t>(begin(val), end(val)); + assert_invariant(); } /*! @@ -1236,7 +1271,9 @@ class basic_json */ basic_json(const string_t& val) : m_type(value_t::string), m_value(val) - {} + { + assert_invariant(); + } /*! @brief create a string (explicit) @@ -1260,7 +1297,9 @@ class basic_json */ basic_json(const typename string_t::value_type* val) : basic_json(string_t(val)) - {} + { + assert_invariant(); + } /*! @brief create a string (implicit) @@ -1291,7 +1330,9 @@ class basic_json = 0> basic_json(const CompatibleStringType& val) : basic_json(string_t(val)) - {} + { + assert_invariant(); + } /*! @brief create a boolean (explicit) @@ -1309,7 +1350,9 @@ class basic_json */ basic_json(boolean_t val) noexcept : m_type(value_t::boolean), m_value(val) - {} + { + assert_invariant(); + } /*! @brief create an integer number (explicit) @@ -1342,7 +1385,9 @@ class basic_json = 0> basic_json(const number_integer_t val) noexcept : m_type(value_t::number_integer), m_value(val) - {} + { + assert_invariant(); + } /*! @brief create an integer number from an enum type (explicit) @@ -1372,7 +1417,9 @@ class basic_json basic_json(const int val) noexcept : m_type(value_t::number_integer), m_value(static_cast<number_integer_t>(val)) - {} + { + assert_invariant(); + } /*! @brief create an integer number (implicit) @@ -1409,7 +1456,9 @@ class basic_json basic_json(const CompatibleNumberIntegerType val) noexcept : m_type(value_t::number_integer), m_value(static_cast<number_integer_t>(val)) - {} + { + assert_invariant(); + } /*! @brief create an unsigned integer number (explicit) @@ -1436,7 +1485,9 @@ class basic_json = 0> basic_json(const number_unsigned_t val) noexcept : m_type(value_t::number_unsigned), m_value(val) - {} + { + assert_invariant(); + } /*! @brief create an unsigned number (implicit) @@ -1468,7 +1519,9 @@ class basic_json basic_json(const CompatibleNumberUnsignedType val) noexcept : m_type(value_t::number_unsigned), m_value(static_cast<number_unsigned_t>(val)) - {} + { + assert_invariant(); + } /*! @brief create a floating-point number (explicit) @@ -1503,6 +1556,8 @@ class basic_json m_type = value_t::null; m_value = json_value(); } + + assert_invariant(); } /*! @@ -1543,7 +1598,9 @@ class basic_json > basic_json(const CompatibleNumberFloatType val) noexcept : basic_json(number_float_t(val)) - {} + { + assert_invariant(); + } /*! @brief create a container (array or object) from an initializer list @@ -1648,8 +1705,6 @@ class basic_json m_type = value_t::object; m_value = value_t::object; - assert(m_value.object != nullptr); - std::for_each(init.begin(), init.end(), [this](const basic_json & element) { m_value.object->emplace(*(element[0].m_value.string), element[1]); @@ -1661,6 +1716,8 @@ class basic_json m_type = value_t::array; m_value.array = create<array_t>(init); } + + assert_invariant(); } /*! @@ -1765,6 +1822,7 @@ class basic_json : m_type(value_t::array) { m_value.array = create<array_t>(cnt, val); + assert_invariant(); } /*! @@ -1894,6 +1952,8 @@ class basic_json throw std::domain_error("cannot use construct with iterators from " + first.m_object->type_name()); } } + + assert_invariant(); } /*! @@ -1919,6 +1979,7 @@ class basic_json explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr) { *this = parser(i, cb).parse(); + assert_invariant(); } /////////////////////////////////////// @@ -1950,25 +2011,25 @@ class basic_json basic_json(const basic_json& other) : m_type(other.m_type) { + // check of passed value is valid + other.assert_invariant(); + switch (m_type) { case value_t::object: { - assert(other.m_value.object != nullptr); m_value = *other.m_value.object; break; } case value_t::array: { - assert(other.m_value.array != nullptr); m_value = *other.m_value.array; break; } case value_t::string: { - assert(other.m_value.string != nullptr); m_value = *other.m_value.string; break; } @@ -2002,6 +2063,8 @@ class basic_json break; } } + + assert_invariant(); } /*! @@ -2026,9 +2089,14 @@ class basic_json : m_type(std::move(other.m_type)), m_value(std::move(other.m_value)) { + // check that passed value is valid + other.assert_invariant(); + // invalidate payload other.m_type = value_t::null; other.m_value = {}; + + assert_invariant(); } /*! @@ -2061,9 +2129,14 @@ class basic_json std::is_nothrow_move_assignable<json_value>::value ) { + // check that passed value is valid + other.assert_invariant(); + using std::swap; swap(m_type, other.m_type); swap(m_value, other.m_value); + + assert_invariant(); return *this; } @@ -2084,6 +2157,8 @@ class basic_json */ ~basic_json() { + assert_invariant(); + switch (m_type) { case value_t::object: @@ -2548,7 +2623,6 @@ class basic_json { if (is_object()) { - assert(m_value.object != nullptr); return T(m_value.object->begin(), m_value.object->end()); } else @@ -2562,7 +2636,6 @@ class basic_json { if (is_object()) { - assert(m_value.object != nullptr); return *(m_value.object); } else @@ -2585,7 +2658,6 @@ class basic_json if (is_array()) { T to_vector; - assert(m_value.array != nullptr); std::transform(m_value.array->begin(), m_value.array->end(), std::inserter(to_vector, to_vector.end()), [](basic_json i) { @@ -2610,7 +2682,6 @@ class basic_json if (is_array()) { std::vector<T> to_vector; - assert(m_value.array != nullptr); to_vector.reserve(m_value.array->size()); std::transform(m_value.array->begin(), m_value.array->end(), std::inserter(to_vector, to_vector.end()), [](basic_json i) @@ -2635,7 +2706,6 @@ class basic_json { if (is_array()) { - assert(m_value.array != nullptr); return T(m_value.array->begin(), m_value.array->end()); } else @@ -2649,7 +2719,6 @@ class basic_json { if (is_array()) { - assert(m_value.array != nullptr); return *(m_value.array); } else @@ -2667,7 +2736,6 @@ class basic_json { if (is_string()) { - assert(m_value.string != nullptr); return *m_value.string; } else @@ -3143,7 +3211,6 @@ class basic_json { try { - assert(m_value.array != nullptr); return m_value.array->at(idx); } catch (std::out_of_range&) @@ -3187,7 +3254,6 @@ class basic_json { try { - assert(m_value.array != nullptr); return m_value.array->at(idx); } catch (std::out_of_range&) @@ -3235,7 +3301,6 @@ class basic_json { try { - assert(m_value.object != nullptr); return m_value.object->at(key); } catch (std::out_of_range&) @@ -3283,7 +3348,6 @@ class basic_json { try { - assert(m_value.object != nullptr); return m_value.object->at(key); } catch (std::out_of_range&) @@ -3330,13 +3394,13 @@ class basic_json { m_type = value_t::array; m_value.array = create<array_t>(); + assert_invariant(); } // operator[] only works for arrays if (is_array()) { // fill up array with null values if given idx is outside range - assert(m_value.array != nullptr); if (idx >= m_value.array->size()) { m_value.array->insert(m_value.array->end(), @@ -3376,7 +3440,6 @@ class basic_json // const operator[] only works for arrays if (is_array()) { - assert(m_value.array != nullptr); return m_value.array->operator[](idx); } else @@ -3419,12 +3482,12 @@ class basic_json { m_type = value_t::object; m_value.object = create<object_t>(); + assert_invariant(); } // operator[] only works for objects if (is_object()) { - assert(m_value.object != nullptr); return m_value.object->operator[](key); } else @@ -3465,7 +3528,6 @@ class basic_json // const operator[] only works for objects if (is_object()) { - assert(m_value.object != nullptr); assert(m_value.object->find(key) != m_value.object->end()); return m_value.object->find(key)->second; } @@ -3578,12 +3640,12 @@ class basic_json { m_type = value_t::object; m_value = value_t::object; + assert_invariant(); } // at only works for objects if (is_object()) { - assert(m_value.object != nullptr); return m_value.object->operator[](key); } else @@ -3625,7 +3687,6 @@ class basic_json // at only works for objects if (is_object()) { - assert(m_value.object != nullptr); assert(m_value.object->find(key) != m_value.object->end()); return m_value.object->find(key)->second; } @@ -3952,24 +4013,25 @@ class basic_json if (is_string()) { - delete m_value.string; + AllocatorType<string_t> alloc; + alloc.destroy(m_value.string); + alloc.deallocate(m_value.string, 1); m_value.string = nullptr; } m_type = value_t::null; + assert_invariant(); break; } case value_t::object: { - assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->erase(pos.m_it.object_iterator); break; } case value_t::array: { - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->erase(pos.m_it.array_iterator); break; } @@ -4060,17 +4122,19 @@ class basic_json if (is_string()) { - delete m_value.string; + AllocatorType<string_t> alloc; + alloc.destroy(m_value.string); + alloc.deallocate(m_value.string, 1); m_value.string = nullptr; } m_type = value_t::null; + assert_invariant(); break; } case value_t::object: { - assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->erase(first.m_it.object_iterator, last.m_it.object_iterator); break; @@ -4078,7 +4142,6 @@ class basic_json case value_t::array: { - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->erase(first.m_it.array_iterator, last.m_it.array_iterator); break; @@ -4127,7 +4190,6 @@ class basic_json // this erase only works for objects if (is_object()) { - assert(m_value.object != nullptr); return m_value.object->erase(key); } else @@ -4170,7 +4232,6 @@ class basic_json throw std::out_of_range("array index " + std::to_string(idx) + " is out of range"); } - assert(m_value.array != nullptr); m_value.array->erase(m_value.array->begin() + static_cast<difference_type>(idx)); } else @@ -4213,7 +4274,6 @@ class basic_json if (is_object()) { - assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->find(key); } @@ -4230,7 +4290,6 @@ class basic_json if (is_object()) { - assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->find(key); } @@ -4258,7 +4317,6 @@ class basic_json size_type count(typename object_t::key_type key) const { // return 0 for all nonobject types - assert(not is_object() or m_value.object != nullptr); return is_object() ? m_value.object->count(key) : 0; } @@ -4634,14 +4692,12 @@ class basic_json case value_t::array: { // delegate call to array_t::empty() - assert(m_value.array != nullptr); return m_value.array->empty(); } case value_t::object: { // delegate call to object_t::empty() - assert(m_value.object != nullptr); return m_value.object->empty(); } @@ -4704,14 +4760,12 @@ class basic_json case value_t::array: { // delegate call to array_t::size() - assert(m_value.array != nullptr); return m_value.array->size(); } case value_t::object: { // delegate call to object_t::size() - assert(m_value.object != nullptr); return m_value.object->size(); } @@ -4766,14 +4820,12 @@ class basic_json case value_t::array: { // delegate call to array_t::max_size() - assert(m_value.array != nullptr); return m_value.array->max_size(); } case value_t::object: { // delegate call to object_t::max_size() - assert(m_value.object != nullptr); return m_value.object->max_size(); } @@ -4850,21 +4902,18 @@ class basic_json case value_t::string: { - assert(m_value.string != nullptr); m_value.string->clear(); break; } case value_t::array: { - assert(m_value.array != nullptr); m_value.array->clear(); break; } case value_t::object: { - assert(m_value.object != nullptr); m_value.object->clear(); break; } @@ -4909,10 +4958,10 @@ class basic_json { m_type = value_t::array; m_value = value_t::array; + assert_invariant(); } // add element to array (move semantics) - assert(m_value.array != nullptr); m_value.array->push_back(std::move(val)); // invalidate object val.m_type = value_t::null; @@ -4945,10 +4994,10 @@ class basic_json { m_type = value_t::array; m_value = value_t::array; + assert_invariant(); } // add element to array - assert(m_value.array != nullptr); m_value.array->push_back(val); } @@ -4995,10 +5044,10 @@ class basic_json { m_type = value_t::object; m_value = value_t::object; + assert_invariant(); } // add element to array - assert(m_value.object != nullptr); m_value.object->insert(val); } @@ -5095,7 +5144,6 @@ class basic_json // insert to array and return iterator iterator result(this); - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, val); return result; } @@ -5151,7 +5199,6 @@ class basic_json // insert to array and return iterator iterator result(this); - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, cnt, val); return result; } @@ -5218,7 +5265,6 @@ class basic_json // insert to array and return iterator iterator result(this); - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert( pos.m_it.array_iterator, first.m_it.array_iterator, @@ -5266,7 +5312,6 @@ class basic_json // insert to array and return iterator iterator result(this); - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, ilist); return result; } @@ -5297,6 +5342,7 @@ class basic_json { std::swap(m_type, other.m_type); std::swap(m_value, other.m_value); + assert_invariant(); } /*! @@ -5324,7 +5370,6 @@ class basic_json // swap only works for arrays if (is_array()) { - assert(m_value.array != nullptr); std::swap(*(m_value.array), other); } else @@ -5358,7 +5403,6 @@ class basic_json // swap only works for objects if (is_object()) { - assert(m_value.object != nullptr); std::swap(*(m_value.object), other); } else @@ -5392,7 +5436,6 @@ class basic_json // swap only works for strings if (is_string()) { - assert(m_value.string != nullptr); std::swap(*(m_value.string), other); } else @@ -5479,14 +5522,10 @@ class basic_json { case value_t::array: { - assert(lhs.m_value.array != nullptr); - assert(rhs.m_value.array != nullptr); return *lhs.m_value.array == *rhs.m_value.array; } case value_t::object: { - assert(lhs.m_value.object != nullptr); - assert(rhs.m_value.object != nullptr); return *lhs.m_value.object == *rhs.m_value.object; } case value_t::null: @@ -5495,8 +5534,6 @@ class basic_json } case value_t::string: { - assert(lhs.m_value.string != nullptr); - assert(rhs.m_value.string != nullptr); return *lhs.m_value.string == *rhs.m_value.string; } case value_t::boolean: @@ -5669,14 +5706,10 @@ class basic_json { case value_t::array: { - assert(lhs.m_value.array != nullptr); - assert(rhs.m_value.array != nullptr); return *lhs.m_value.array < *rhs.m_value.array; } case value_t::object: { - assert(lhs.m_value.object != nullptr); - assert(rhs.m_value.object != nullptr); return *lhs.m_value.object < *rhs.m_value.object; } case value_t::null: @@ -5685,8 +5718,6 @@ class basic_json } case value_t::string: { - assert(lhs.m_value.string != nullptr); - assert(rhs.m_value.string != nullptr); return *lhs.m_value.string < *rhs.m_value.string; } case value_t::boolean: @@ -6232,8 +6263,6 @@ class basic_json { case value_t::object: { - assert(m_value.object != nullptr); - if (m_value.object->empty()) { o << "{}"; @@ -6274,8 +6303,6 @@ class basic_json case value_t::array: { - assert(m_value.array != nullptr); - if (m_value.array->empty()) { o << "[]"; @@ -6314,7 +6341,6 @@ class basic_json case value_t::string: { - assert(m_value.string != nullptr); o << string_t("\"") << escape_string(*m_value.string) << "\""; return; } @@ -6701,14 +6727,12 @@ class basic_json { case basic_json::value_t::object: { - assert(m_object->m_value.object != nullptr); m_it.object_iterator = m_object->m_value.object->begin(); break; } case basic_json::value_t::array: { - assert(m_object->m_value.array != nullptr); m_it.array_iterator = m_object->m_value.array->begin(); break; } @@ -6740,14 +6764,12 @@ class basic_json { case basic_json::value_t::object: { - assert(m_object->m_value.object != nullptr); m_it.object_iterator = m_object->m_value.object->end(); break; } case basic_json::value_t::array: { - assert(m_object->m_value.array != nullptr); m_it.array_iterator = m_object->m_value.array->end(); break; } @@ -6773,14 +6795,12 @@ class basic_json { case basic_json::value_t::object: { - assert(m_object->m_value.object); assert(m_it.object_iterator != m_object->m_value.object->end()); return m_it.object_iterator->second; } case basic_json::value_t::array: { - assert(m_object->m_value.array); assert(m_it.array_iterator != m_object->m_value.array->end()); return *m_it.array_iterator; } @@ -6816,14 +6836,12 @@ class basic_json { case basic_json::value_t::object: { - assert(m_object->m_value.object); assert(m_it.object_iterator != m_object->m_value.object->end()); return &(m_it.object_iterator->second); } case basic_json::value_t::array: { - assert(m_object->m_value.array); assert(m_it.array_iterator != m_object->m_value.array->end()); return &*m_it.array_iterator; } @@ -8846,6 +8864,7 @@ basic_json_parser_63: basic_json parse() { basic_json result = parse_internal(true); + result.assert_invariant(); expect(lexer::token_type::end_of_input); @@ -8868,7 +8887,7 @@ basic_json_parser_63: { // explicitly set result to object to cope with {} result.m_type = value_t::object; - result.m_value = json_value(value_t::object); + result.m_value = value_t::object; } // read next token @@ -8946,7 +8965,7 @@ basic_json_parser_63: { // explicitly set result to object to cope with [] result.m_type = value_t::array; - result.m_value = json_value(value_t::array); + result.m_value = value_t::array; } // read next token @@ -9638,7 +9657,6 @@ basic_json_parser_63: basic_json result; // iterate the JSON object values - assert(value.m_value.object != nullptr); for (const auto& element : *value.m_value.object) { if (not element.second.is_primitive()) diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index 7bc0f360..09866a81 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -190,6 +190,13 @@ default) JSON values can be used like STL containers and provide reverse iterator access. +@invariant The member variables @a m_value and @a m_type have the following +relationship: +- If `m_type == value_t::object`, then `m_value.object != nullptr`. +- If `m_type == value_t::array`, then `m_value.array != nullptr`. +- If `m_type == value_t::string`, then `m_value.string != nullptr`. +The invariants are checked by member function assert_invariant(). + @internal @note ObjectType trick from http://stackoverflow.com/a/9860911 @endinternal @@ -891,6 +898,21 @@ class basic_json } }; + /*! + @brief checks the class invariants + + This function asserts the class invariants. It needs to be called at the + end of every constructor to make sure that created objects respect the + invariant. Furthermore, it has to be called each time the type of a JSON + value is changed, because the invariant expresses a relationship between + @a m_type and @a m_value. + */ + void assert_invariant() const + { + assert(m_type != value_t::object or m_value.object != nullptr); + assert(m_type != value_t::array or m_value.array != nullptr); + assert(m_type != value_t::string or m_value.string != nullptr); + } public: ////////////////////////// @@ -1030,7 +1052,9 @@ class basic_json */ basic_json(const value_t value_type) : m_type(value_type), m_value(value_type) - {} + { + assert_invariant(); + } /*! @brief create a null object (implicitly) @@ -1038,6 +1062,9 @@ class basic_json Create a `null` JSON value. This is the implicit version of the `null` value constructor as it takes no parameters. + @note The class invariant is satisfied, because it poses no requirements + for null values. + @complexity Constant. @exceptionsafety No-throw guarantee: this constructor never throws @@ -1082,7 +1109,9 @@ class basic_json */ basic_json(std::nullptr_t) noexcept : basic_json(value_t::null) - {} + { + assert_invariant(); + } /*! @brief create an object (explicit) @@ -1105,7 +1134,9 @@ class basic_json */ basic_json(const object_t& val) : m_type(value_t::object), m_value(val) - {} + { + assert_invariant(); + } /*! @brief create an object (implicit) @@ -1144,6 +1175,7 @@ class basic_json using std::begin; using std::end; m_value.object = create<object_t>(begin(val), end(val)); + assert_invariant(); } /*! @@ -1167,7 +1199,9 @@ class basic_json */ basic_json(const array_t& val) : m_type(value_t::array), m_value(val) - {} + { + assert_invariant(); + } /*! @brief create an array (implicit) @@ -1211,6 +1245,7 @@ class basic_json using std::begin; using std::end; m_value.array = create<array_t>(begin(val), end(val)); + assert_invariant(); } /*! @@ -1236,7 +1271,9 @@ class basic_json */ basic_json(const string_t& val) : m_type(value_t::string), m_value(val) - {} + { + assert_invariant(); + } /*! @brief create a string (explicit) @@ -1260,7 +1297,9 @@ class basic_json */ basic_json(const typename string_t::value_type* val) : basic_json(string_t(val)) - {} + { + assert_invariant(); + } /*! @brief create a string (implicit) @@ -1291,7 +1330,9 @@ class basic_json = 0> basic_json(const CompatibleStringType& val) : basic_json(string_t(val)) - {} + { + assert_invariant(); + } /*! @brief create a boolean (explicit) @@ -1309,7 +1350,9 @@ class basic_json */ basic_json(boolean_t val) noexcept : m_type(value_t::boolean), m_value(val) - {} + { + assert_invariant(); + } /*! @brief create an integer number (explicit) @@ -1342,7 +1385,9 @@ class basic_json = 0> basic_json(const number_integer_t val) noexcept : m_type(value_t::number_integer), m_value(val) - {} + { + assert_invariant(); + } /*! @brief create an integer number from an enum type (explicit) @@ -1372,7 +1417,9 @@ class basic_json basic_json(const int val) noexcept : m_type(value_t::number_integer), m_value(static_cast<number_integer_t>(val)) - {} + { + assert_invariant(); + } /*! @brief create an integer number (implicit) @@ -1409,7 +1456,9 @@ class basic_json basic_json(const CompatibleNumberIntegerType val) noexcept : m_type(value_t::number_integer), m_value(static_cast<number_integer_t>(val)) - {} + { + assert_invariant(); + } /*! @brief create an unsigned integer number (explicit) @@ -1436,7 +1485,9 @@ class basic_json = 0> basic_json(const number_unsigned_t val) noexcept : m_type(value_t::number_unsigned), m_value(val) - {} + { + assert_invariant(); + } /*! @brief create an unsigned number (implicit) @@ -1468,7 +1519,9 @@ class basic_json basic_json(const CompatibleNumberUnsignedType val) noexcept : m_type(value_t::number_unsigned), m_value(static_cast<number_unsigned_t>(val)) - {} + { + assert_invariant(); + } /*! @brief create a floating-point number (explicit) @@ -1503,6 +1556,8 @@ class basic_json m_type = value_t::null; m_value = json_value(); } + + assert_invariant(); } /*! @@ -1543,7 +1598,9 @@ class basic_json > basic_json(const CompatibleNumberFloatType val) noexcept : basic_json(number_float_t(val)) - {} + { + assert_invariant(); + } /*! @brief create a container (array or object) from an initializer list @@ -1648,8 +1705,6 @@ class basic_json m_type = value_t::object; m_value = value_t::object; - assert(m_value.object != nullptr); - std::for_each(init.begin(), init.end(), [this](const basic_json & element) { m_value.object->emplace(*(element[0].m_value.string), element[1]); @@ -1661,6 +1716,8 @@ class basic_json m_type = value_t::array; m_value.array = create<array_t>(init); } + + assert_invariant(); } /*! @@ -1765,6 +1822,7 @@ class basic_json : m_type(value_t::array) { m_value.array = create<array_t>(cnt, val); + assert_invariant(); } /*! @@ -1894,6 +1952,8 @@ class basic_json throw std::domain_error("cannot use construct with iterators from " + first.m_object->type_name()); } } + + assert_invariant(); } /*! @@ -1919,6 +1979,7 @@ class basic_json explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr) { *this = parser(i, cb).parse(); + assert_invariant(); } /////////////////////////////////////// @@ -1950,25 +2011,25 @@ class basic_json basic_json(const basic_json& other) : m_type(other.m_type) { + // check of passed value is valid + other.assert_invariant(); + switch (m_type) { case value_t::object: { - assert(other.m_value.object != nullptr); m_value = *other.m_value.object; break; } case value_t::array: { - assert(other.m_value.array != nullptr); m_value = *other.m_value.array; break; } case value_t::string: { - assert(other.m_value.string != nullptr); m_value = *other.m_value.string; break; } @@ -2002,6 +2063,8 @@ class basic_json break; } } + + assert_invariant(); } /*! @@ -2026,9 +2089,14 @@ class basic_json : m_type(std::move(other.m_type)), m_value(std::move(other.m_value)) { + // check that passed value is valid + other.assert_invariant(); + // invalidate payload other.m_type = value_t::null; other.m_value = {}; + + assert_invariant(); } /*! @@ -2061,9 +2129,14 @@ class basic_json std::is_nothrow_move_assignable<json_value>::value ) { + // check that passed value is valid + other.assert_invariant(); + using std::swap; swap(m_type, other.m_type); swap(m_value, other.m_value); + + assert_invariant(); return *this; } @@ -2084,6 +2157,8 @@ class basic_json */ ~basic_json() { + assert_invariant(); + switch (m_type) { case value_t::object: @@ -2548,7 +2623,6 @@ class basic_json { if (is_object()) { - assert(m_value.object != nullptr); return T(m_value.object->begin(), m_value.object->end()); } else @@ -2562,7 +2636,6 @@ class basic_json { if (is_object()) { - assert(m_value.object != nullptr); return *(m_value.object); } else @@ -2585,7 +2658,6 @@ class basic_json if (is_array()) { T to_vector; - assert(m_value.array != nullptr); std::transform(m_value.array->begin(), m_value.array->end(), std::inserter(to_vector, to_vector.end()), [](basic_json i) { @@ -2610,7 +2682,6 @@ class basic_json if (is_array()) { std::vector<T> to_vector; - assert(m_value.array != nullptr); to_vector.reserve(m_value.array->size()); std::transform(m_value.array->begin(), m_value.array->end(), std::inserter(to_vector, to_vector.end()), [](basic_json i) @@ -2635,7 +2706,6 @@ class basic_json { if (is_array()) { - assert(m_value.array != nullptr); return T(m_value.array->begin(), m_value.array->end()); } else @@ -2649,7 +2719,6 @@ class basic_json { if (is_array()) { - assert(m_value.array != nullptr); return *(m_value.array); } else @@ -2667,7 +2736,6 @@ class basic_json { if (is_string()) { - assert(m_value.string != nullptr); return *m_value.string; } else @@ -3143,7 +3211,6 @@ class basic_json { try { - assert(m_value.array != nullptr); return m_value.array->at(idx); } catch (std::out_of_range&) @@ -3187,7 +3254,6 @@ class basic_json { try { - assert(m_value.array != nullptr); return m_value.array->at(idx); } catch (std::out_of_range&) @@ -3235,7 +3301,6 @@ class basic_json { try { - assert(m_value.object != nullptr); return m_value.object->at(key); } catch (std::out_of_range&) @@ -3283,7 +3348,6 @@ class basic_json { try { - assert(m_value.object != nullptr); return m_value.object->at(key); } catch (std::out_of_range&) @@ -3330,13 +3394,13 @@ class basic_json { m_type = value_t::array; m_value.array = create<array_t>(); + assert_invariant(); } // operator[] only works for arrays if (is_array()) { // fill up array with null values if given idx is outside range - assert(m_value.array != nullptr); if (idx >= m_value.array->size()) { m_value.array->insert(m_value.array->end(), @@ -3376,7 +3440,6 @@ class basic_json // const operator[] only works for arrays if (is_array()) { - assert(m_value.array != nullptr); return m_value.array->operator[](idx); } else @@ -3419,12 +3482,12 @@ class basic_json { m_type = value_t::object; m_value.object = create<object_t>(); + assert_invariant(); } // operator[] only works for objects if (is_object()) { - assert(m_value.object != nullptr); return m_value.object->operator[](key); } else @@ -3465,7 +3528,6 @@ class basic_json // const operator[] only works for objects if (is_object()) { - assert(m_value.object != nullptr); assert(m_value.object->find(key) != m_value.object->end()); return m_value.object->find(key)->second; } @@ -3578,12 +3640,12 @@ class basic_json { m_type = value_t::object; m_value = value_t::object; + assert_invariant(); } // at only works for objects if (is_object()) { - assert(m_value.object != nullptr); return m_value.object->operator[](key); } else @@ -3625,7 +3687,6 @@ class basic_json // at only works for objects if (is_object()) { - assert(m_value.object != nullptr); assert(m_value.object->find(key) != m_value.object->end()); return m_value.object->find(key)->second; } @@ -3952,24 +4013,25 @@ class basic_json if (is_string()) { - delete m_value.string; + AllocatorType<string_t> alloc; + alloc.destroy(m_value.string); + alloc.deallocate(m_value.string, 1); m_value.string = nullptr; } m_type = value_t::null; + assert_invariant(); break; } case value_t::object: { - assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->erase(pos.m_it.object_iterator); break; } case value_t::array: { - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->erase(pos.m_it.array_iterator); break; } @@ -4060,17 +4122,19 @@ class basic_json if (is_string()) { - delete m_value.string; + AllocatorType<string_t> alloc; + alloc.destroy(m_value.string); + alloc.deallocate(m_value.string, 1); m_value.string = nullptr; } m_type = value_t::null; + assert_invariant(); break; } case value_t::object: { - assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->erase(first.m_it.object_iterator, last.m_it.object_iterator); break; @@ -4078,7 +4142,6 @@ class basic_json case value_t::array: { - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->erase(first.m_it.array_iterator, last.m_it.array_iterator); break; @@ -4127,7 +4190,6 @@ class basic_json // this erase only works for objects if (is_object()) { - assert(m_value.object != nullptr); return m_value.object->erase(key); } else @@ -4170,7 +4232,6 @@ class basic_json throw std::out_of_range("array index " + std::to_string(idx) + " is out of range"); } - assert(m_value.array != nullptr); m_value.array->erase(m_value.array->begin() + static_cast<difference_type>(idx)); } else @@ -4213,7 +4274,6 @@ class basic_json if (is_object()) { - assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->find(key); } @@ -4230,7 +4290,6 @@ class basic_json if (is_object()) { - assert(m_value.object != nullptr); result.m_it.object_iterator = m_value.object->find(key); } @@ -4258,7 +4317,6 @@ class basic_json size_type count(typename object_t::key_type key) const { // return 0 for all nonobject types - assert(not is_object() or m_value.object != nullptr); return is_object() ? m_value.object->count(key) : 0; } @@ -4634,14 +4692,12 @@ class basic_json case value_t::array: { // delegate call to array_t::empty() - assert(m_value.array != nullptr); return m_value.array->empty(); } case value_t::object: { // delegate call to object_t::empty() - assert(m_value.object != nullptr); return m_value.object->empty(); } @@ -4704,14 +4760,12 @@ class basic_json case value_t::array: { // delegate call to array_t::size() - assert(m_value.array != nullptr); return m_value.array->size(); } case value_t::object: { // delegate call to object_t::size() - assert(m_value.object != nullptr); return m_value.object->size(); } @@ -4766,14 +4820,12 @@ class basic_json case value_t::array: { // delegate call to array_t::max_size() - assert(m_value.array != nullptr); return m_value.array->max_size(); } case value_t::object: { // delegate call to object_t::max_size() - assert(m_value.object != nullptr); return m_value.object->max_size(); } @@ -4850,21 +4902,18 @@ class basic_json case value_t::string: { - assert(m_value.string != nullptr); m_value.string->clear(); break; } case value_t::array: { - assert(m_value.array != nullptr); m_value.array->clear(); break; } case value_t::object: { - assert(m_value.object != nullptr); m_value.object->clear(); break; } @@ -4909,10 +4958,10 @@ class basic_json { m_type = value_t::array; m_value = value_t::array; + assert_invariant(); } // add element to array (move semantics) - assert(m_value.array != nullptr); m_value.array->push_back(std::move(val)); // invalidate object val.m_type = value_t::null; @@ -4945,10 +4994,10 @@ class basic_json { m_type = value_t::array; m_value = value_t::array; + assert_invariant(); } // add element to array - assert(m_value.array != nullptr); m_value.array->push_back(val); } @@ -4995,10 +5044,10 @@ class basic_json { m_type = value_t::object; m_value = value_t::object; + assert_invariant(); } // add element to array - assert(m_value.object != nullptr); m_value.object->insert(val); } @@ -5095,7 +5144,6 @@ class basic_json // insert to array and return iterator iterator result(this); - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, val); return result; } @@ -5151,7 +5199,6 @@ class basic_json // insert to array and return iterator iterator result(this); - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, cnt, val); return result; } @@ -5218,7 +5265,6 @@ class basic_json // insert to array and return iterator iterator result(this); - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert( pos.m_it.array_iterator, first.m_it.array_iterator, @@ -5266,7 +5312,6 @@ class basic_json // insert to array and return iterator iterator result(this); - assert(m_value.array != nullptr); result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, ilist); return result; } @@ -5297,6 +5342,7 @@ class basic_json { std::swap(m_type, other.m_type); std::swap(m_value, other.m_value); + assert_invariant(); } /*! @@ -5324,7 +5370,6 @@ class basic_json // swap only works for arrays if (is_array()) { - assert(m_value.array != nullptr); std::swap(*(m_value.array), other); } else @@ -5358,7 +5403,6 @@ class basic_json // swap only works for objects if (is_object()) { - assert(m_value.object != nullptr); std::swap(*(m_value.object), other); } else @@ -5392,7 +5436,6 @@ class basic_json // swap only works for strings if (is_string()) { - assert(m_value.string != nullptr); std::swap(*(m_value.string), other); } else @@ -5479,14 +5522,10 @@ class basic_json { case value_t::array: { - assert(lhs.m_value.array != nullptr); - assert(rhs.m_value.array != nullptr); return *lhs.m_value.array == *rhs.m_value.array; } case value_t::object: { - assert(lhs.m_value.object != nullptr); - assert(rhs.m_value.object != nullptr); return *lhs.m_value.object == *rhs.m_value.object; } case value_t::null: @@ -5495,8 +5534,6 @@ class basic_json } case value_t::string: { - assert(lhs.m_value.string != nullptr); - assert(rhs.m_value.string != nullptr); return *lhs.m_value.string == *rhs.m_value.string; } case value_t::boolean: @@ -5669,14 +5706,10 @@ class basic_json { case value_t::array: { - assert(lhs.m_value.array != nullptr); - assert(rhs.m_value.array != nullptr); return *lhs.m_value.array < *rhs.m_value.array; } case value_t::object: { - assert(lhs.m_value.object != nullptr); - assert(rhs.m_value.object != nullptr); return *lhs.m_value.object < *rhs.m_value.object; } case value_t::null: @@ -5685,8 +5718,6 @@ class basic_json } case value_t::string: { - assert(lhs.m_value.string != nullptr); - assert(rhs.m_value.string != nullptr); return *lhs.m_value.string < *rhs.m_value.string; } case value_t::boolean: @@ -6232,8 +6263,6 @@ class basic_json { case value_t::object: { - assert(m_value.object != nullptr); - if (m_value.object->empty()) { o << "{}"; @@ -6274,8 +6303,6 @@ class basic_json case value_t::array: { - assert(m_value.array != nullptr); - if (m_value.array->empty()) { o << "[]"; @@ -6314,7 +6341,6 @@ class basic_json case value_t::string: { - assert(m_value.string != nullptr); o << string_t("\"") << escape_string(*m_value.string) << "\""; return; } @@ -6701,14 +6727,12 @@ class basic_json { case basic_json::value_t::object: { - assert(m_object->m_value.object != nullptr); m_it.object_iterator = m_object->m_value.object->begin(); break; } case basic_json::value_t::array: { - assert(m_object->m_value.array != nullptr); m_it.array_iterator = m_object->m_value.array->begin(); break; } @@ -6740,14 +6764,12 @@ class basic_json { case basic_json::value_t::object: { - assert(m_object->m_value.object != nullptr); m_it.object_iterator = m_object->m_value.object->end(); break; } case basic_json::value_t::array: { - assert(m_object->m_value.array != nullptr); m_it.array_iterator = m_object->m_value.array->end(); break; } @@ -6773,14 +6795,12 @@ class basic_json { case basic_json::value_t::object: { - assert(m_object->m_value.object); assert(m_it.object_iterator != m_object->m_value.object->end()); return m_it.object_iterator->second; } case basic_json::value_t::array: { - assert(m_object->m_value.array); assert(m_it.array_iterator != m_object->m_value.array->end()); return *m_it.array_iterator; } @@ -6816,14 +6836,12 @@ class basic_json { case basic_json::value_t::object: { - assert(m_object->m_value.object); assert(m_it.object_iterator != m_object->m_value.object->end()); return &(m_it.object_iterator->second); } case basic_json::value_t::array: { - assert(m_object->m_value.array); assert(m_it.array_iterator != m_object->m_value.array->end()); return &*m_it.array_iterator; } @@ -8143,6 +8161,7 @@ class basic_json basic_json parse() { basic_json result = parse_internal(true); + result.assert_invariant(); expect(lexer::token_type::end_of_input); @@ -8165,7 +8184,7 @@ class basic_json { // explicitly set result to object to cope with {} result.m_type = value_t::object; - result.m_value = json_value(value_t::object); + result.m_value = value_t::object; } // read next token @@ -8243,7 +8262,7 @@ class basic_json { // explicitly set result to object to cope with [] result.m_type = value_t::array; - result.m_value = json_value(value_t::array); + result.m_value = value_t::array; } // read next token @@ -8935,7 +8954,6 @@ class basic_json basic_json result; // iterate the JSON object values - assert(value.m_value.object != nullptr); for (const auto& element : *value.m_value.object) { if (not element.second.is_primitive()) From a05df038cd952b6e586e40526df061d73059fb07 Mon Sep 17 00:00:00 2001 From: Niels <niels.lohmann@gmail.com> Date: Sun, 31 Jul 2016 13:37:04 +0200 Subject: [PATCH 25/25] prepared release --- CMakeLists.txt | 2 +- ChangeLog.md | 5 ++--- Makefile | 4 +++- README.md | 2 +- doc/Doxyfile | 2 +- doc/examples/README.link | 2 +- doc/index.md | 2 +- src/json.hpp | 2 +- src/json.hpp.re2c | 2 +- test/src/fuzz.cpp | 2 +- test/src/unit.cpp | 2 +- 11 files changed, 14 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c0488b3b..72802b29 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.0) # define the project -project(nlohmann_json VERSION 2.0.0 LANGUAGES CXX) +project(nlohmann_json VERSION 2.0.2 LANGUAGES CXX) enable_testing() diff --git a/ChangeLog.md b/ChangeLog.md index 901e37c1..8062f3b3 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,9 +1,8 @@ # Change Log All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). -## [Unreleased](https://github.com/nlohmann/json/tree/HEAD) - -[Full Changelog](https://github.com/nlohmann/json/compare/v2.0.1...HEAD) +## [v2.0.2](https://github.com/nlohmann/json/releases/tag/v2.0.2) (2016-07-30) +[Full Changelog](https://github.com/nlohmann/json/compare/v2.0.1...v2.0.2) - value\(\) does not work with \_json\_pointer types [\#283](https://github.com/nlohmann/json/issues/283) - Easy serialization of classes [\#280](https://github.com/nlohmann/json/issues/280) diff --git a/Makefile b/Makefile index 98f07687..15d00f6e 100644 --- a/Makefile +++ b/Makefile @@ -95,7 +95,9 @@ json_benchmarks: benchmarks/benchmarks.cpp benchmarks/benchpress.hpp benchmarks/ # changelog ########################################################################## +NEXT_VERSION ?= "unreleased" + ChangeLog.md: - github_changelog_generator -o ChangeLog.md --simple-list --release-url https://github.com/nlohmann/json/releases/tag/%s + github_changelog_generator -o ChangeLog.md --simple-list --release-url https://github.com/nlohmann/json/releases/tag/%s --future-release $(NEXT_VERSION) gsed -i 's|https://github.com/nlohmann/json/releases/tag/HEAD|https://github.com/nlohmann/json/tree/HEAD|' ChangeLog.md gsed -i '2i All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/).' ChangeLog.md diff --git a/README.md b/README.md index 58490679..c0bb61b1 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [](https://ci.appveyor.com/project/nlohmann/json) [](https://coveralls.io/r/nlohmann/json) [](https://scan.coverity.com/projects/nlohmann-json) -[](http://melpon.org/wandbox/permlink/wuiuqYiYqRTdI3rG) +[](http://melpon.org/wandbox/permlink/p5o4znPnGHJpDVqN) [](http://nlohmann.github.io/json) [](https://raw.githubusercontent.com/nlohmann/json/master/LICENSE.MIT) [](https://github.com/nlohmann/json/releases) diff --git a/doc/Doxyfile b/doc/Doxyfile index e74a8a85..e0055d65 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -5,7 +5,7 @@ #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = "JSON for Modern C++" -PROJECT_NUMBER = 2.0.0 +PROJECT_NUMBER = 2.0.2 PROJECT_BRIEF = PROJECT_LOGO = OUTPUT_DIRECTORY = . diff --git a/doc/examples/README.link b/doc/examples/README.link index ed559e19..0e87a79e 100644 --- a/doc/examples/README.link +++ b/doc/examples/README.link @@ -1 +1 @@ -<a target="_blank" href="http://melpon.org/wandbox/permlink/k5KRwVJ42VggxxzX"><b>online</b></a> \ No newline at end of file +<a target="_blank" href="http://melpon.org/wandbox/permlink/p5o4znPnGHJpDVqN"><b>online</b></a> \ No newline at end of file diff --git a/doc/index.md b/doc/index.md index 5373d4f3..cf32a7a5 100644 --- a/doc/index.md +++ b/doc/index.md @@ -268,4 +268,4 @@ The container functions known from STL have been extended to support the differe @author [Niels Lohmann](http://nlohmann.me) @see https://github.com/nlohmann/json to download the source code -@version 2.0.0 +@version 2.0.2 diff --git a/src/json.hpp b/src/json.hpp index 7120ad80..878fb899 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -1,7 +1,7 @@ /* __ _____ _____ _____ __| | __| | | | JSON for Modern C++ -| | |__ | | | | | | version 2.0.1 +| | |__ | | | | | | version 2.0.2 |_____|_____|_____|_|___| https://github.com/nlohmann/json Licensed under the MIT License <http://opensource.org/licenses/MIT>. diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index 09866a81..32482ea8 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -1,7 +1,7 @@ /* __ _____ _____ _____ __| | __| | | | JSON for Modern C++ -| | |__ | | | | | | version 2.0.1 +| | |__ | | | | | | version 2.0.2 |_____|_____|_____|_|___| https://github.com/nlohmann/json Licensed under the MIT License <http://opensource.org/licenses/MIT>. diff --git a/test/src/fuzz.cpp b/test/src/fuzz.cpp index d8b7ef7c..de8ad42c 100644 --- a/test/src/fuzz.cpp +++ b/test/src/fuzz.cpp @@ -1,7 +1,7 @@ /* __ _____ _____ _____ __| | __| | | | JSON for Modern C++ (fuzz test support) -| | |__ | | | | | | version 2.0.0 +| | |__ | | | | | | version 2.0.2 |_____|_____|_____|_|___| https://github.com/nlohmann/json Run "make fuzz_testing" and follow the instructions. diff --git a/test/src/unit.cpp b/test/src/unit.cpp index edbafacf..79a4bb09 100644 --- a/test/src/unit.cpp +++ b/test/src/unit.cpp @@ -1,7 +1,7 @@ /* __ _____ _____ _____ __| | __| | | | JSON for Modern C++ (test suite) -| | |__ | | | | | | version 2.0.1 +| | |__ | | | | | | version 2.0.2 |_____|_____|_____|_|___| https://github.com/nlohmann/json Licensed under the MIT License <http://opensource.org/licenses/MIT>.