LCOV - code coverage report
Current view: top level - json/impl - parser.ipp (source / functions) Coverage Total Hit
Test: coverage_remapped.info Lines: 100.0 % 59 59
Test Date: 2026-02-25 20:43:10 Functions: 100.0 % 10 10

           TLA  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 HIT     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.3