LCOV - code coverage report
Current view: top level - json/impl - parse.ipp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 96.1 % 51 49
Test Date: 2025-12-23 17:20:51 Functions: 100.0 % 6 6

            Line data    Source code
       1              : //
       2              : // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
       3              : // Copyright (c) 2020 Krystian Stasiowski (sdkrystian@gmail.com)
       4              : //
       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)
       7              : //
       8              : // Official repository: https://github.com/boostorg/json
       9              : //
      10              : 
      11              : #ifndef BOOST_JSON_IMPL_PARSE_IPP
      12              : #define BOOST_JSON_IMPL_PARSE_IPP
      13              : 
      14              : #include <boost/json/parse.hpp>
      15              : #include <boost/json/parser.hpp>
      16              : #include <boost/json/detail/except.hpp>
      17              : 
      18              : #include <istream>
      19              : 
      20              : namespace boost {
      21              : namespace json {
      22              : 
      23              : value
      24      2001505 : parse(
      25              :     string_view s,
      26              :     system::error_code& ec,
      27              :     storage_ptr sp,
      28              :     const parse_options& opt)
      29              : {
      30              :     unsigned char temp[
      31              :         BOOST_JSON_STACK_BUFFER_SIZE];
      32      2001505 :     parser p(storage_ptr(), opt, temp);
      33      2001505 :     p.reset(std::move(sp));
      34      2001505 :     p.write(s, ec);
      35      2001504 :     if(ec)
      36           15 :         return nullptr;
      37      2001489 :     return p.release();
      38      2001505 : }
      39              : 
      40              : value
      41            4 : parse(
      42              :     string_view s,
      43              :     std::error_code& ec,
      44              :     storage_ptr sp,
      45              :     parse_options const& opt)
      46              : {
      47            4 :     system::error_code jec;
      48            4 :     value result = parse(s, jec, std::move(sp), opt);
      49            4 :     ec = jec;
      50            8 :     return result;
      51            0 : }
      52              : 
      53              : value
      54      2001038 : parse(
      55              :     string_view s,
      56              :     storage_ptr sp,
      57              :     const parse_options& opt)
      58              : {
      59      2001038 :     system::error_code ec;
      60              :     auto jv = parse(
      61      2001039 :         s, ec, std::move(sp), opt);
      62      2001037 :     if(ec)
      63            2 :         detail::throw_system_error( ec );
      64      4002070 :     return jv;
      65            2 : }
      66              : 
      67              : value
      68           10 : parse(
      69              :     std::istream& is,
      70              :     system::error_code& ec,
      71              :     storage_ptr sp,
      72              :     parse_options const& opt)
      73              : {
      74              :     unsigned char parser_buffer[BOOST_JSON_STACK_BUFFER_SIZE / 2];
      75           10 :     stream_parser p(storage_ptr(), opt, parser_buffer);
      76           10 :     p.reset(std::move(sp));
      77              : 
      78              :     char read_buffer[BOOST_JSON_STACK_BUFFER_SIZE / 2];
      79              :     do
      80              :     {
      81           17 :         if( is.eof() )
      82              :         {
      83            7 :             p.finish(ec);
      84            7 :             break;
      85              :         }
      86              : 
      87           10 :         if( !is )
      88              :         {
      89            1 :             BOOST_JSON_FAIL( ec, error::input_error );
      90            1 :             break;
      91              :         }
      92              : 
      93            9 :         is.read(read_buffer, sizeof(read_buffer));
      94            9 :         auto const consumed = is.gcount();
      95              : 
      96            9 :         p.write( read_buffer, static_cast<std::size_t>(consumed), ec );
      97              :     }
      98            9 :     while( !ec.failed() );
      99              : 
     100           10 :     if( ec.failed() )
     101            3 :         return nullptr;
     102              : 
     103            7 :     return p.release();
     104           10 : }
     105              : 
     106              : value
     107            4 : parse(
     108              :     std::istream& is,
     109              :     std::error_code& ec,
     110              :     storage_ptr sp,
     111              :     parse_options const& opt)
     112              : {
     113            4 :     system::error_code jec;
     114            4 :     value result = parse(is, jec, std::move(sp), opt);
     115            4 :     ec = jec;
     116            8 :     return result;
     117            0 : }
     118              : 
     119              : value
     120            2 : parse(
     121              :     std::istream& is,
     122              :     storage_ptr sp,
     123              :     parse_options const& opt)
     124              : {
     125            2 :     system::error_code ec;
     126              :     auto jv = parse(
     127            2 :         is, ec, std::move(sp), opt);
     128            2 :     if(ec)
     129            1 :         detail::throw_system_error( ec );
     130            2 :     return jv;
     131            1 : }
     132              : 
     133              : } // namespace json
     134              : } // namespace boost
     135              : 
     136              : #endif
        

Generated by: LCOV version 2.1