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

            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_STREAM_PARSER_IPP
      11              : #define BOOST_JSON_IMPL_STREAM_PARSER_IPP
      12              : 
      13              : #include <boost/json/stream_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           22 : stream_parser::
      24              : stream_parser(
      25              :     storage_ptr sp,
      26              :     parse_options const& opt,
      27              :     unsigned char* buffer,
      28           22 :     std::size_t size) noexcept
      29           22 :     : p_(
      30              :         opt,
      31           22 :         std::move(sp),
      32              :         buffer,
      33              :         size)
      34              : {
      35           22 :     reset();
      36           22 : }
      37              : 
      38        75304 : stream_parser::
      39              : stream_parser(
      40              :     storage_ptr sp,
      41        75304 :     parse_options const& opt) noexcept
      42        75304 :     : p_(
      43              :         opt,
      44        75304 :         std::move(sp),
      45       150608 :         nullptr,
      46        75304 :         0)
      47              : {
      48        75304 :     reset();
      49        75304 : }
      50              : 
      51              : void
      52       150055 : stream_parser::
      53              : reset(storage_ptr sp) noexcept
      54              : {
      55       150055 :     p_.reset();
      56       150055 :     p_.handler().st.reset(sp);
      57       150055 : }
      58              : 
      59              : std::size_t
      60       130421 : stream_parser::
      61              : write_some(
      62              :     char const* data,
      63              :     std::size_t size,
      64              :     system::error_code& ec)
      65              : {
      66       130421 :     return p_.write_some(
      67       130280 :         true, data, size, ec);
      68              : }
      69              : 
      70              : std::size_t
      71            2 : stream_parser::
      72              : write_some(
      73              :     char const* data,
      74              :     std::size_t size,
      75              :     std::error_code& ec)
      76              : {
      77            2 :     system::error_code jec;
      78            2 :     std::size_t const result = write_some(data, size, jec);
      79            2 :     ec = jec;
      80            2 :     return result;
      81              : }
      82              : 
      83              : std::size_t
      84            6 : stream_parser::
      85              : write_some(
      86              :     char const* data,
      87              :     std::size_t size)
      88              : {
      89            6 :     system::error_code ec;
      90            6 :     auto const n = write_some(
      91              :         data, size, ec);
      92            6 :     if(ec)
      93            1 :         detail::throw_system_error( ec );
      94            5 :     return n;
      95              : }
      96              : 
      97              : std::size_t
      98       130392 : stream_parser::
      99              : write(
     100              :     char const* data,
     101              :     std::size_t size,
     102              :     system::error_code& ec)
     103              : {
     104       130392 :     auto const n = write_some(
     105              :         data, size, ec);
     106       130251 :     if(! ec && n < size)
     107              :     {
     108            6 :         BOOST_JSON_FAIL(ec, error::extra_data);
     109            6 :         p_.fail(ec);
     110              :     }
     111       130251 :     return n;
     112              : }
     113              : 
     114              : std::size_t
     115            2 : stream_parser::
     116              : write(
     117              :     char const* data,
     118              :     std::size_t size,
     119              :     std::error_code& ec)
     120              : {
     121            2 :     system::error_code jec;
     122            2 :     std::size_t const result = write(data, size, jec);
     123            2 :     ec = jec;
     124            2 :     return result;
     125              : }
     126              : 
     127              : std::size_t
     128           11 : stream_parser::
     129              : write(
     130              :     char const* data,
     131              :     std::size_t size)
     132              : {
     133           11 :     system::error_code ec;
     134           11 :     auto const n = write(
     135              :         data, size, ec);
     136           11 :     if(ec)
     137            1 :         detail::throw_system_error( ec );
     138           10 :     return n;
     139              : }
     140              : 
     141              : void
     142        75152 : stream_parser::
     143              : finish(system::error_code& ec)
     144              : {
     145        75152 :     p_.write_some(false, nullptr, 0, ec);
     146        75152 : }
     147              : 
     148              : void
     149            8 : stream_parser::
     150              : finish()
     151              : {
     152            8 :     system::error_code ec;
     153            8 :     finish(ec);
     154            8 :     if(ec)
     155            6 :         detail::throw_system_error( ec );
     156            2 : }
     157              : 
     158              : void
     159            2 : stream_parser::
     160              : finish(std::error_code& ec)
     161              : {
     162            2 :     system::error_code jec;
     163            2 :     finish(jec);
     164            2 :     ec = jec;
     165            2 : }
     166              : 
     167              : value
     168        75151 : stream_parser::
     169              : release()
     170              : {
     171        75151 :     if(! p_.done())
     172              :     {
     173              :         // prevent undefined behavior
     174            4 :         finish();
     175              :     }
     176        75148 :     return p_.handler().st.release();
     177              : }
     178              : 
     179              : } // namespace json
     180              : } // namespace boost
     181              : 
     182              : #endif
        

Generated by: LCOV version 2.1