100.00% Lines (43/43)
100.00% Functions (6/6)
| TLA | Baseline | Branch | ||||||
|---|---|---|---|---|---|---|---|---|
| Line | Hits | Code | Line | Hits | Code | |||
| 1 | // | 1 | // | |||||
| 2 | // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com) | 2 | // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com) | |||||
| 3 | // Copyright (c) 2020 Krystian Stasiowski (sdkrystian@gmail.com) | 3 | // Copyright (c) 2020 Krystian Stasiowski (sdkrystian@gmail.com) | |||||
| 4 | // | 4 | // | |||||
| 5 | // Distributed under the Boost Software License, Version 1.0. (See accompanying | 5 | // Distributed under the Boost Software License, Version 1.0. (See accompanying | |||||
| 6 | // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | 6 | // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |||||
| 7 | // | 7 | // | |||||
| 8 | // Official repository: https://github.com/boostorg/json | 8 | // Official repository: https://github.com/boostorg/json | |||||
| 9 | // | 9 | // | |||||
| 10 | 10 | |||||||
| 11 | #ifndef BOOST_JSON_IMPL_PARSE_INTO_HPP | 11 | #ifndef BOOST_JSON_IMPL_PARSE_INTO_HPP | |||||
| 12 | #define BOOST_JSON_IMPL_PARSE_INTO_HPP | 12 | #define BOOST_JSON_IMPL_PARSE_INTO_HPP | |||||
| 13 | 13 | |||||||
| 14 | #include <boost/json/basic_parser_impl.hpp> | 14 | #include <boost/json/basic_parser_impl.hpp> | |||||
| 15 | #include <boost/json/error.hpp> | 15 | #include <boost/json/error.hpp> | |||||
| 16 | #include <istream> | 16 | #include <istream> | |||||
| 17 | 17 | |||||||
| 18 | namespace boost { | 18 | namespace boost { | |||||
| 19 | namespace json { | 19 | namespace json { | |||||
| 20 | 20 | |||||||
| 21 | template<class V> | 21 | template<class V> | |||||
| 22 | void | 22 | void | |||||
| HITCBC | 23 | 232 | parse_into( | 23 | 232 | parse_into( | ||
| 24 | V& v, | 24 | V& v, | |||||
| 25 | string_view sv, | 25 | string_view sv, | |||||
| 26 | system::error_code& ec, | 26 | system::error_code& ec, | |||||
| 27 | parse_options const& opt ) | 27 | parse_options const& opt ) | |||||
| 28 | { | 28 | { | |||||
| HITCBC | 29 | 232 | parser_for<V> p( opt, &v ); | 29 | 232 | parser_for<V> p( opt, &v ); | ||
| 30 | 30 | |||||||
| HITCBC | 31 | 232 | std::size_t n = p.write_some( false, sv.data(), sv.size(), ec ); | 31 | 232 | std::size_t n = p.write_some( false, sv.data(), sv.size(), ec ); | ||
| 32 | 32 | |||||||
| HITCBC | 33 | 232 | if( !ec && n < sv.size() ) | 33 | 232 | if( !ec && n < sv.size() ) | ||
| 34 | { | 34 | { | |||||
| HITCBC | 35 | 1 | BOOST_JSON_FAIL( ec, error::extra_data ); | 35 | 1 | BOOST_JSON_FAIL( ec, error::extra_data ); | ||
| 36 | } | 36 | } | |||||
| HITCBC | 37 | 232 | } | 37 | 232 | } | ||
| 38 | 38 | |||||||
| 39 | template<class V> | 39 | template<class V> | |||||
| 40 | void | 40 | void | |||||
| HITCBC | 41 | 66 | parse_into( | 41 | 66 | parse_into( | ||
| 42 | V& v, | 42 | V& v, | |||||
| 43 | string_view sv, | 43 | string_view sv, | |||||
| 44 | std::error_code& ec, | 44 | std::error_code& ec, | |||||
| 45 | parse_options const& opt ) | 45 | parse_options const& opt ) | |||||
| 46 | { | 46 | { | |||||
| HITCBC | 47 | 66 | system::error_code jec; | 47 | 66 | system::error_code jec; | ||
| HITCBC | 48 | 66 | parse_into(v, sv, jec, opt); | 48 | 66 | parse_into(v, sv, jec, opt); | ||
| HITCBC | 49 | 66 | ec = jec; | 49 | 66 | ec = jec; | ||
| HITCBC | 50 | 66 | } | 50 | 66 | } | ||
| 51 | 51 | |||||||
| 52 | template<class V> | 52 | template<class V> | |||||
| 53 | void | 53 | void | |||||
| HITCBC | 54 | 74 | parse_into( | 54 | 74 | parse_into( | ||
| 55 | V& v, | 55 | V& v, | |||||
| 56 | string_view sv, | 56 | string_view sv, | |||||
| 57 | parse_options const& opt ) | 57 | parse_options const& opt ) | |||||
| 58 | { | 58 | { | |||||
| HITCBC | 59 | 74 | system::error_code ec; | 59 | 74 | system::error_code ec; | ||
| HITCBC | 60 | 74 | parse_into(v, sv, ec, opt); | 60 | 74 | parse_into(v, sv, ec, opt); | ||
| HITCBC | 61 | 74 | if( ec.failed() ) | 61 | 74 | if( ec.failed() ) | ||
| HITCBC | 62 | 1 | detail::throw_system_error( ec ); | 62 | 1 | detail::throw_system_error( ec ); | ||
| HITCBC | 63 | 73 | } | 63 | 73 | } | ||
| 64 | 64 | |||||||
| 65 | template<class V> | 65 | template<class V> | |||||
| 66 | void | 66 | void | |||||
| HITCBC | 67 | 201 | parse_into( | 67 | 201 | parse_into( | ||
| 68 | V& v, | 68 | V& v, | |||||
| 69 | std::istream& is, | 69 | std::istream& is, | |||||
| 70 | system::error_code& ec, | 70 | system::error_code& ec, | |||||
| 71 | parse_options const& opt ) | 71 | parse_options const& opt ) | |||||
| 72 | { | 72 | { | |||||
| HITCBC | 73 | 201 | parser_for<V> p( opt, &v ); | 73 | 201 | parser_for<V> p( opt, &v ); | ||
| 74 | 74 | |||||||
| 75 | char read_buffer[BOOST_JSON_STACK_BUFFER_SIZE]; | 75 | char read_buffer[BOOST_JSON_STACK_BUFFER_SIZE]; | |||||
| 76 | do | 76 | do | |||||
| 77 | { | 77 | { | |||||
| HITCBC | 78 | 399 | if( is.eof() ) | 78 | 399 | if( is.eof() ) | ||
| 79 | { | 79 | { | |||||
| HITCBC | 80 | 198 | p.write_some(false, nullptr, 0, ec); | 80 | 198 | p.write_some(false, nullptr, 0, ec); | ||
| HITCBC | 81 | 198 | break; | 81 | 198 | break; | ||
| 82 | } | 82 | } | |||||
| 83 | 83 | |||||||
| HITCBC | 84 | 201 | if( !is ) | 84 | 201 | if( !is ) | ||
| 85 | { | 85 | { | |||||
| HITCBC | 86 | 1 | BOOST_JSON_FAIL( ec, error::input_error ); | 86 | 1 | BOOST_JSON_FAIL( ec, error::input_error ); | ||
| HITCBC | 87 | 1 | break; | 87 | 1 | break; | ||
| 88 | } | 88 | } | |||||
| 89 | 89 | |||||||
| HITCBC | 90 | 200 | is.read(read_buffer, sizeof(read_buffer)); | 90 | 200 | is.read(read_buffer, sizeof(read_buffer)); | ||
| HITCBC | 91 | 200 | std::size_t const consumed = static_cast<std::size_t>( is.gcount() ); | 91 | 200 | std::size_t const consumed = static_cast<std::size_t>( is.gcount() ); | ||
| 92 | 92 | |||||||
| HITCBC | 93 | 200 | std::size_t const n = p.write_some( true, read_buffer, consumed, ec ); | 93 | 200 | std::size_t const n = p.write_some( true, read_buffer, consumed, ec ); | ||
| HITCBC | 94 | 200 | if( !ec.failed() && n < consumed ) | 94 | 200 | if( !ec.failed() && n < consumed ) | ||
| 95 | { | 95 | { | |||||
| HITCBC | 96 | 1 | BOOST_JSON_FAIL( ec, error::extra_data ); | 96 | 1 | BOOST_JSON_FAIL( ec, error::extra_data ); | ||
| 97 | } | 97 | } | |||||
| 98 | } | 98 | } | |||||
| HITCBC | 99 | 200 | while( !ec.failed() ); | 99 | 200 | while( !ec.failed() ); | ||
| HITCBC | 100 | 201 | } | 100 | 201 | } | ||
| 101 | 101 | |||||||
| 102 | template<class V> | 102 | template<class V> | |||||
| 103 | void | 103 | void | |||||
| HITCBC | 104 | 66 | parse_into( | 104 | 66 | parse_into( | ||
| 105 | V& v, | 105 | V& v, | |||||
| 106 | std::istream& is, | 106 | std::istream& is, | |||||
| 107 | std::error_code& ec, | 107 | std::error_code& ec, | |||||
| 108 | parse_options const& opt ) | 108 | parse_options const& opt ) | |||||
| 109 | { | 109 | { | |||||
| HITCBC | 110 | 66 | system::error_code jec; | 110 | 66 | system::error_code jec; | ||
| HITCBC | 111 | 66 | parse_into(v, is, jec, opt); | 111 | 66 | parse_into(v, is, jec, opt); | ||
| HITCBC | 112 | 66 | ec = jec; | 112 | 66 | ec = jec; | ||
| HITCBC | 113 | 66 | } | 113 | 66 | } | ||
| 114 | 114 | |||||||
| 115 | template<class V> | 115 | template<class V> | |||||
| 116 | void | 116 | void | |||||
| HITCBC | 117 | 67 | parse_into( | 117 | 67 | parse_into( | ||
| 118 | V& v, | 118 | V& v, | |||||
| 119 | std::istream& is, | 119 | std::istream& is, | |||||
| 120 | parse_options const& opt ) | 120 | parse_options const& opt ) | |||||
| 121 | { | 121 | { | |||||
| HITCBC | 122 | 67 | system::error_code ec; | 122 | 67 | system::error_code ec; | ||
| HITCBC | 123 | 67 | parse_into(v, is, ec, opt); | 123 | 67 | parse_into(v, is, ec, opt); | ||
| HITCBC | 124 | 67 | if( ec.failed() ) | 124 | 67 | if( ec.failed() ) | ||
| HITCBC | 125 | 1 | detail::throw_system_error( ec ); | 125 | 1 | detail::throw_system_error( ec ); | ||
| HITCBC | 126 | 66 | } | 126 | 66 | } | ||
| 127 | 127 | |||||||
| 128 | } // namespace boost | 128 | } // namespace boost | |||||
| 129 | } // namespace json | 129 | } // namespace json | |||||
| 130 | 130 | |||||||
| 131 | #endif | 131 | #endif | |||||