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

            Line data    Source code
       1              : //
       2              : // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
       3              : //
       4              : // Distributed under the Boost Software License, Version 1.0. (See accompanying
       5              : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       6              : //
       7              : // Official repository: https://github.com/boostorg/json
       8              : //
       9              : 
      10              : #ifndef BOOST_JSON_IMPL_PARSER_IPP
      11              : #define BOOST_JSON_IMPL_PARSER_IPP
      12              : 
      13              : #include <boost/json/parser.hpp>
      14              : #include <boost/json/basic_parser_impl.hpp>
      15              : #include <boost/json/error.hpp>
      16              : #include <cstring>
      17              : #include <stdexcept>
      18              : #include <utility>
      19              : 
      20              : namespace boost {
      21              : namespace json {
      22              : 
      23      2001508 : parser::
      24              : parser(
      25              :     storage_ptr sp,
      26              :     parse_options const& opt,
      27              :     unsigned char* buffer,
      28      2001508 :     std::size_t size) noexcept
      29      2001508 :     : p_(
      30              :         opt,
      31      2001508 :         std::move(sp),
      32              :         buffer,
      33              :         size)
      34              : {
      35      2001508 :     reset();
      36      2001508 : }
      37              : 
      38           55 : parser::
      39              : parser(
      40              :     storage_ptr sp,
      41           55 :     parse_options const& opt) noexcept
      42           55 :     : p_(
      43              :         opt,
      44           55 :         std::move(sp),
      45          110 :         nullptr,
      46           55 :         0)
      47              : {
      48           55 :     reset();
      49           55 : }
      50              : 
      51              : void
      52      4003070 : parser::
      53              : reset(storage_ptr sp) noexcept
      54              : {
      55      4003070 :     p_.reset();
      56      4003070 :     p_.handler().st.reset(sp);
      57      4003070 : }
      58              : 
      59              : std::size_t
      60      2001553 : parser::
      61              : write_some(
      62              :     char const* data,
      63              :     std::size_t size,
      64              :     system::error_code& ec)
      65              : {
      66      2001553 :     auto const n = p_.write_some(
      67              :         false, data, size, ec);
      68      2001552 :     BOOST_ASSERT(ec || p_.done());
      69      2001552 :     return n;
      70              : }
      71              : 
      72              : std::size_t
      73            6 : parser::
      74              : write_some(
      75              :     char const* data,
      76              :     std::size_t size,
      77              :     std::error_code& ec)
      78              : {
      79            6 :     system::error_code jec;
      80            6 :     std::size_t const result = write_some(data, size, jec);
      81            6 :     ec = jec;
      82            6 :     return result;
      83              : }
      84              : 
      85              : std::size_t
      86            8 : parser::
      87              : write_some(
      88              :     char const* data,
      89              :     std::size_t size)
      90              : {
      91            8 :     system::error_code ec;
      92            8 :     auto const n = write_some(
      93              :         data, size, ec);
      94            8 :     if(ec)
      95            4 :         detail::throw_system_error( ec );
      96            4 :     return n;
      97              : }
      98              : 
      99              : std::size_t
     100      2001533 : parser::
     101              : write(
     102              :     char const* data,
     103              :     std::size_t size,
     104              :     system::error_code& ec)
     105              : {
     106      2001533 :     auto const n = write_some(
     107              :         data, size, ec);
     108      2001532 :     if(! ec && n < size)
     109              :     {
     110            8 :         BOOST_JSON_FAIL(ec, error::extra_data);
     111            8 :         p_.fail(ec);
     112              :     }
     113      2001532 :     return n;
     114              : }
     115              : 
     116              : std::size_t
     117            7 : parser::
     118              : write(
     119              :     char const* data,
     120              :     std::size_t size,
     121              :     std::error_code& ec)
     122              : {
     123            7 :     system::error_code jec;
     124            7 :     std::size_t const result = write(data, size, jec);
     125            7 :     ec = jec;
     126            7 :     return result;
     127              : }
     128              : 
     129              : std::size_t
     130           14 : parser::
     131              : write(
     132              :     char const* data,
     133              :     std::size_t size)
     134              : {
     135           14 :     system::error_code ec;
     136           14 :     auto const n = write(
     137              :         data, size, ec);
     138           14 :     if(ec)
     139            8 :         detail::throw_system_error( ec );
     140            6 :     return n;
     141              : }
     142              : 
     143              : value
     144      2001495 : parser::
     145              : release()
     146              : {
     147      2001495 :     if( ! p_.done())
     148              :     {
     149              :         // prevent undefined behavior
     150            4 :         if(! p_.last_error())
     151              :         {
     152            2 :             system::error_code ec;
     153            2 :             BOOST_JSON_FAIL(ec, error::incomplete);
     154            2 :             p_.fail(ec);
     155              :         }
     156            8 :         detail::throw_system_error(
     157            8 :             p_.last_error());
     158              :     }
     159      2001491 :     return p_.handler().st.release();
     160              : }
     161              : 
     162              : } // namespace json
     163              : } // namespace boost
     164              : 
     165              : #endif
        

Generated by: LCOV version 2.1