diff --git a/Makefile b/Makefile index 004dc337..66023444 100644 --- a/Makefile +++ b/Makefile @@ -2,28 +2,28 @@ SRCS = develop/json.hpp \ develop/json_fwd.hpp \ - develop/detail/macro_scope.hpp \ - develop/detail/macro_unscope.hpp \ - develop/detail/meta.hpp \ - develop/detail/exceptions.hpp \ - develop/detail/value_t.hpp \ + develop/adl_serializer.hpp \ develop/detail/conversions/from_json.hpp \ develop/detail/conversions/to_chars.hpp \ develop/detail/conversions/to_json.hpp \ - develop/detail/parsing/input_adapters.hpp \ - develop/detail/parsing/lexer.hpp \ - develop/detail/parsing/parser.hpp \ - develop/detail/iterators/primitive_iterator.hpp \ + develop/detail/exceptions.hpp \ + develop/detail/input/binary_reader.hpp \ + develop/detail/input/input_adapters.hpp \ + develop/detail/input/lexer.hpp \ + develop/detail/input/parser.hpp \ develop/detail/iterators/internal_iterator.hpp \ develop/detail/iterators/iter_impl.hpp \ develop/detail/iterators/iteration_proxy.hpp \ develop/detail/iterators/json_reverse_iterator.hpp \ - develop/detail/parsing/output_adapters.hpp \ - develop/detail/parsing/binary_reader.hpp \ - develop/detail/parsing/binary_writer.hpp \ - develop/detail/serializer.hpp \ + develop/detail/iterators/primitive_iterator.hpp \ develop/detail/json_ref.hpp \ - develop/adl_serializer.hpp + develop/detail/macro_scope.hpp \ + develop/detail/macro_unscope.hpp \ + develop/detail/meta.hpp \ + develop/detail/output/binary_writer.hpp \ + develop/detail/output/output_adapters.hpp \ + develop/detail/output/serializer.hpp \ + develop/detail/value_t.hpp UNAME = $(shell uname) CXX=clang++ diff --git a/develop/detail/parsing/binary_reader.hpp b/develop/detail/input/binary_reader.hpp similarity index 97% rename from develop/detail/parsing/binary_reader.hpp rename to develop/detail/input/binary_reader.hpp index 174528c5..dbd0b305 100644 --- a/develop/detail/parsing/binary_reader.hpp +++ b/develop/detail/input/binary_reader.hpp @@ -17,7 +17,6 @@ #include "detail/exceptions.hpp" #include "detail/macro_scope.hpp" -#include "detail/parsing/input_adapters.hpp" #include "detail/value_t.hpp" namespace nlohmann @@ -64,7 +63,7 @@ class binary_reader if (strict) { get(); - check_eof(true); + expect_eof(); } return res; } @@ -85,7 +84,7 @@ class binary_reader if (strict) { get(); - check_eof(true); + expect_eof(); } return res; } @@ -106,7 +105,7 @@ class binary_reader if (strict) { get_ignore_noop(); - check_eof(true); + expect_eof(); } return res; } @@ -205,7 +204,6 @@ class binary_reader case 0x38: // Negative integer (one-byte uint8_t follows) { - // must be uint8_t ! return static_cast(-1) - get_number(); } @@ -396,9 +394,9 @@ class binary_reader case 0xF9: // Half-Precision Float (two-byte IEEE 754) { const int byte1 = get(); - check_eof(); + unexpect_eof(); const int byte2 = get(); - check_eof(); + unexpect_eof(); // code from RFC 7049, Appendix D, Figure 3: // As half-precision floating-point numbers were only added @@ -831,7 +829,7 @@ class binary_reader for (std::size_t i = 0; i < sizeof(NumberType); ++i) { get(); - check_eof(); + unexpect_eof(); // reverse byte order prior to conversion if necessary if (is_little_endian) @@ -856,7 +854,7 @@ class binary_reader @param[in] len number of bytes to read @note We can not reserve @a len bytes for the result, because @a len - may be too large. Usually, @ref check_eof() detects the end of + may be too large. Usually, @ref unexpect_eof() detects the end of the input before we run out of string memory. @return string created by reading @a len bytes @@ -870,7 +868,7 @@ class binary_reader std::generate_n(std::back_inserter(result), len, [this]() { get(); - check_eof(); + unexpect_eof(); return static_cast(current); }); return result; @@ -890,7 +888,7 @@ class binary_reader */ std::string get_cbor_string() { - check_eof(); + unexpect_eof(); switch (current) { @@ -948,7 +946,7 @@ class binary_reader std::string result; while (get() != 0xFF) { - check_eof(); + unexpect_eof(); result.push_back(static_cast(current)); } return result; @@ -1003,7 +1001,7 @@ class binary_reader */ std::string get_msgpack_string() { - check_eof(); + unexpect_eof(); switch (current) { @@ -1119,7 +1117,7 @@ class binary_reader get(); // TODO: may we ignore N here? } - check_eof(); + unexpect_eof(); switch (current) { @@ -1159,7 +1157,7 @@ class binary_reader if (current == '$') { tc = get(); // must not ignore 'N', because 'N' maybe the type - check_eof(); + unexpect_eof(); get_ignore_noop(); if (current != '#') @@ -1212,7 +1210,7 @@ class binary_reader case 'C': // char { get(); - check_eof(); + unexpect_eof(); if (JSON_UNLIKELY(current > 127)) { std::stringstream ss; @@ -1321,24 +1319,26 @@ class binary_reader } /*! - @brief check if input ended + @brief throw if end of input is not reached + @throw parse_error.110 if input not ended + */ + void expect_eof() const + { + if (JSON_UNLIKELY(current != std::char_traits::eof())) + { + JSON_THROW(parse_error::create(110, chars_read, "expected end of input")); + } + } + + /*! + @briefthrow if end of input is reached @throw parse_error.110 if input ended */ - void check_eof(const bool expect_eof = false) const + void unexpect_eof() const { - if (expect_eof) + if (JSON_UNLIKELY(current == std::char_traits::eof())) { - if (JSON_UNLIKELY(current != std::char_traits::eof())) - { - JSON_THROW(parse_error::create(110, chars_read, "expected end of input")); - } - } - else - { - if (JSON_UNLIKELY(current == std::char_traits::eof())) - { - JSON_THROW(parse_error::create(110, chars_read, "unexpected end of input")); - } + JSON_THROW(parse_error::create(110, chars_read, "unexpected end of input")); } } diff --git a/develop/detail/parsing/input_adapters.hpp b/develop/detail/input/input_adapters.hpp similarity index 100% rename from develop/detail/parsing/input_adapters.hpp rename to develop/detail/input/input_adapters.hpp diff --git a/develop/detail/parsing/lexer.hpp b/develop/detail/input/lexer.hpp similarity index 99% rename from develop/detail/parsing/lexer.hpp rename to develop/detail/input/lexer.hpp index de222a6c..58e40001 100644 --- a/develop/detail/parsing/lexer.hpp +++ b/develop/detail/input/lexer.hpp @@ -11,7 +11,7 @@ #include // vector #include "detail/macro_scope.hpp" -#include "detail/parsing/input_adapters.hpp" +#include "detail/input/input_adapters.hpp" namespace nlohmann { diff --git a/develop/detail/parsing/parser.hpp b/develop/detail/input/parser.hpp similarity index 99% rename from develop/detail/parsing/parser.hpp rename to develop/detail/input/parser.hpp index b0322204..799ea920 100644 --- a/develop/detail/parsing/parser.hpp +++ b/develop/detail/input/parser.hpp @@ -9,8 +9,8 @@ #include "detail/exceptions.hpp" #include "detail/macro_scope.hpp" -#include "detail/parsing/input_adapters.hpp" -#include "detail/parsing/lexer.hpp" +#include "detail/input/input_adapters.hpp" +#include "detail/input/lexer.hpp" #include "detail/value_t.hpp" namespace nlohmann diff --git a/develop/detail/parsing/binary_writer.hpp b/develop/detail/output/binary_writer.hpp similarity index 99% rename from develop/detail/parsing/binary_writer.hpp rename to develop/detail/output/binary_writer.hpp index 87aaffa8..63b16f3e 100644 --- a/develop/detail/parsing/binary_writer.hpp +++ b/develop/detail/output/binary_writer.hpp @@ -6,8 +6,8 @@ #include // memcpy #include // numeric_limits -#include "detail/parsing/binary_reader.hpp" -#include "detail/parsing/output_adapters.hpp" +#include "detail/input/binary_reader.hpp" +#include "detail/output/output_adapters.hpp" namespace nlohmann { diff --git a/develop/detail/parsing/output_adapters.hpp b/develop/detail/output/output_adapters.hpp similarity index 100% rename from develop/detail/parsing/output_adapters.hpp rename to develop/detail/output/output_adapters.hpp diff --git a/develop/detail/serializer.hpp b/develop/detail/output/serializer.hpp similarity index 99% rename from develop/detail/serializer.hpp rename to develop/detail/output/serializer.hpp index 717399f9..84aa83af 100644 --- a/develop/detail/serializer.hpp +++ b/develop/detail/output/serializer.hpp @@ -17,7 +17,7 @@ #include "detail/conversions/to_chars.hpp" #include "detail/macro_scope.hpp" #include "detail/meta.hpp" -#include "detail/parsing/output_adapters.hpp" +#include "detail/output/output_adapters.hpp" #include "detail/value_t.hpp" namespace nlohmann diff --git a/develop/json.hpp b/develop/json.hpp index 467cea97..2544d84d 100644 --- a/develop/json.hpp +++ b/develop/json.hpp @@ -48,18 +48,18 @@ SOFTWARE. #include "detail/value_t.hpp" #include "detail/conversions/from_json.hpp" #include "detail/conversions/to_json.hpp" -#include "detail/parsing/input_adapters.hpp" -#include "detail/parsing/lexer.hpp" -#include "detail/parsing/parser.hpp" +#include "detail/input/input_adapters.hpp" +#include "detail/input/lexer.hpp" +#include "detail/input/parser.hpp" #include "detail/iterators/primitive_iterator.hpp" #include "detail/iterators/internal_iterator.hpp" #include "detail/iterators/iter_impl.hpp" #include "detail/iterators/iteration_proxy.hpp" #include "detail/iterators/json_reverse_iterator.hpp" -#include "detail/parsing/output_adapters.hpp" -#include "detail/parsing/binary_reader.hpp" -#include "detail/parsing/binary_writer.hpp" -#include "detail/serializer.hpp" +#include "detail/output/output_adapters.hpp" +#include "detail/input/binary_reader.hpp" +#include "detail/output/binary_writer.hpp" +#include "detail/output/serializer.hpp" #include "detail/json_ref.hpp" #include "adl_serializer.hpp" @@ -140,7 +140,7 @@ class json_pointer */ static int array_index(const std::string& s) { - size_t processed_chars = 0; + std::size_t processed_chars = 0; const int res = std::stoi(s, &processed_chars); // check if the string was completely read diff --git a/src/json.hpp b/src/json.hpp index f7e3ab17..deee4504 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -1543,7 +1543,7 @@ constexpr const auto& to_json = detail::static_const::value; } } -// #include "detail/parsing/input_adapters.hpp" +// #include "detail/input/input_adapters.hpp" #include // min @@ -1808,7 +1808,7 @@ class input_adapter } } -// #include "detail/parsing/lexer.hpp" +// #include "detail/input/lexer.hpp" #include // localeconv @@ -1823,7 +1823,7 @@ class input_adapter // #include "detail/macro_scope.hpp" -// #include "detail/parsing/input_adapters.hpp" +// #include "detail/input/input_adapters.hpp" namespace nlohmann @@ -3088,7 +3088,7 @@ scan_number_done: } } -// #include "detail/parsing/parser.hpp" +// #include "detail/input/parser.hpp" #include // assert @@ -3102,9 +3102,9 @@ scan_number_done: // #include "detail/macro_scope.hpp" -// #include "detail/parsing/input_adapters.hpp" +// #include "detail/input/input_adapters.hpp" -// #include "detail/parsing/lexer.hpp" +// #include "detail/input/lexer.hpp" // #include "detail/value_t.hpp" @@ -4678,7 +4678,7 @@ class json_reverse_iterator : public std::reverse_iterator } } -// #include "detail/parsing/output_adapters.hpp" +// #include "detail/output/output_adapters.hpp" #include // copy @@ -4793,7 +4793,7 @@ class output_adapter } } -// #include "detail/parsing/binary_reader.hpp" +// #include "detail/input/binary_reader.hpp" #include // generate_n @@ -4815,8 +4815,6 @@ class output_adapter // #include "detail/macro_scope.hpp" -// #include "detail/parsing/input_adapters.hpp" - // #include "detail/value_t.hpp" @@ -4864,7 +4862,7 @@ class binary_reader if (strict) { get(); - check_eof(true); + expect_eof(); } return res; } @@ -4885,7 +4883,7 @@ class binary_reader if (strict) { get(); - check_eof(true); + expect_eof(); } return res; } @@ -4906,7 +4904,7 @@ class binary_reader if (strict) { get_ignore_noop(); - check_eof(true); + expect_eof(); } return res; } @@ -5005,7 +5003,6 @@ class binary_reader case 0x38: // Negative integer (one-byte uint8_t follows) { - // must be uint8_t ! return static_cast(-1) - get_number(); } @@ -5196,9 +5193,9 @@ class binary_reader case 0xF9: // Half-Precision Float (two-byte IEEE 754) { const int byte1 = get(); - check_eof(); + unexpect_eof(); const int byte2 = get(); - check_eof(); + unexpect_eof(); // code from RFC 7049, Appendix D, Figure 3: // As half-precision floating-point numbers were only added @@ -5631,7 +5628,7 @@ class binary_reader for (std::size_t i = 0; i < sizeof(NumberType); ++i) { get(); - check_eof(); + unexpect_eof(); // reverse byte order prior to conversion if necessary if (is_little_endian) @@ -5656,7 +5653,7 @@ class binary_reader @param[in] len number of bytes to read @note We can not reserve @a len bytes for the result, because @a len - may be too large. Usually, @ref check_eof() detects the end of + may be too large. Usually, @ref unexpect_eof() detects the end of the input before we run out of string memory. @return string created by reading @a len bytes @@ -5670,7 +5667,7 @@ class binary_reader std::generate_n(std::back_inserter(result), len, [this]() { get(); - check_eof(); + unexpect_eof(); return static_cast(current); }); return result; @@ -5690,7 +5687,7 @@ class binary_reader */ std::string get_cbor_string() { - check_eof(); + unexpect_eof(); switch (current) { @@ -5748,7 +5745,7 @@ class binary_reader std::string result; while (get() != 0xFF) { - check_eof(); + unexpect_eof(); result.push_back(static_cast(current)); } return result; @@ -5803,7 +5800,7 @@ class binary_reader */ std::string get_msgpack_string() { - check_eof(); + unexpect_eof(); switch (current) { @@ -5919,7 +5916,7 @@ class binary_reader get(); // TODO: may we ignore N here? } - check_eof(); + unexpect_eof(); switch (current) { @@ -5959,7 +5956,7 @@ class binary_reader if (current == '$') { tc = get(); // must not ignore 'N', because 'N' maybe the type - check_eof(); + unexpect_eof(); get_ignore_noop(); if (current != '#') @@ -6012,7 +6009,7 @@ class binary_reader case 'C': // char { get(); - check_eof(); + unexpect_eof(); if (JSON_UNLIKELY(current > 127)) { std::stringstream ss; @@ -6121,24 +6118,26 @@ class binary_reader } /*! - @brief check if input ended + @brief throw if end of input is not reached + @throw parse_error.110 if input not ended + */ + void expect_eof() const + { + if (JSON_UNLIKELY(current != std::char_traits::eof())) + { + JSON_THROW(parse_error::create(110, chars_read, "expected end of input")); + } + } + + /*! + @briefthrow if end of input is reached @throw parse_error.110 if input ended */ - void check_eof(const bool expect_eof = false) const + void unexpect_eof() const { - if (expect_eof) + if (JSON_UNLIKELY(current == std::char_traits::eof())) { - if (JSON_UNLIKELY(current != std::char_traits::eof())) - { - JSON_THROW(parse_error::create(110, chars_read, "expected end of input")); - } - } - else - { - if (JSON_UNLIKELY(current == std::char_traits::eof())) - { - JSON_THROW(parse_error::create(110, chars_read, "unexpected end of input")); - } + JSON_THROW(parse_error::create(110, chars_read, "unexpected end of input")); } } @@ -6158,7 +6157,7 @@ class binary_reader } } -// #include "detail/parsing/binary_writer.hpp" +// #include "detail/output/binary_writer.hpp" #include // reverse @@ -6167,9 +6166,9 @@ class binary_reader #include // memcpy #include // numeric_limits -// #include "detail/parsing/binary_reader.hpp" +// #include "detail/input/binary_reader.hpp" -// #include "detail/parsing/output_adapters.hpp" +// #include "detail/output/output_adapters.hpp" namespace nlohmann @@ -7070,7 +7069,7 @@ class binary_writer } } -// #include "detail/serializer.hpp" +// #include "detail/output/serializer.hpp" #include // reverse, remove, fill, find, none_of @@ -8186,7 +8185,7 @@ char* to_chars(char* first, char* last, FloatType value) // #include "detail/meta.hpp" -// #include "detail/parsing/output_adapters.hpp" +// #include "detail/output/output_adapters.hpp" // #include "detail/value_t.hpp" @@ -8993,7 +8992,7 @@ class json_pointer */ static int array_index(const std::string& s) { - size_t processed_chars = 0; + std::size_t processed_chars = 0; const int res = std::stoi(s, &processed_chars); // check if the string was completely read