LCOV - code coverage report
Current view: top level - json/impl - visit.hpp (source / functions) Coverage Total Hit
Test: coverage_remapped.info Lines: 100.0 % 37 37
Test Date: 2026-03-05 09:04:27 Functions: 100.0 % 33 33

           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_VISIT_HPP
      11                 : #define BOOST_JSON_IMPL_VISIT_HPP
      12                 : 
      13                 : namespace boost {
      14                 : namespace json {
      15                 : 
      16                 : 
      17                 : template<class Visitor>
      18                 : auto
      19 HIT           8 : visit(
      20                 :     Visitor&& v,
      21                 :     value& jv) -> decltype(
      22                 :         static_cast<Visitor&&>(v)( std::declval<std::nullptr_t&>() ) )
      23                 : {
      24               8 :     switch(jv.kind())
      25                 :     {
      26               1 :     default: // unreachable()?
      27               1 :     case kind::string:  return static_cast<Visitor&&>(v)( jv.get_string() );
      28               1 :     case kind::array:   return static_cast<Visitor&&>(v)( jv.get_array() );
      29               1 :     case kind::object:  return static_cast<Visitor&&>(v)( jv.get_object() );
      30               1 :     case kind::bool_:   return static_cast<Visitor&&>(v)( jv.get_bool() );
      31               1 :     case kind::int64:   return static_cast<Visitor&&>(v)( jv.get_int64() );
      32               1 :     case kind::uint64:  return static_cast<Visitor&&>(v)( jv.get_uint64() );
      33               1 :     case kind::double_: return static_cast<Visitor&&>(v)( jv.get_double() );
      34               1 :     case kind::null: {
      35               1 :         auto np = nullptr;
      36               1 :         return static_cast<Visitor&&>(v)(np) ;
      37                 :     }
      38                 :     }
      39                 : }
      40                 : 
      41                 : template<class Visitor>
      42                 : auto
      43             256 : visit(
      44                 :     Visitor&& v,
      45                 :     value const& jv) -> decltype(
      46                 :         static_cast<Visitor&&>(v)( std::declval<std::nullptr_t const&>() ) )
      47                 : {
      48             256 :     switch(jv.kind())
      49                 :     {
      50              45 :     default: // unreachable()?
      51              45 :     case kind::string:  return static_cast<Visitor&&>(v)( jv.get_string() );
      52              11 :     case kind::array:   return static_cast<Visitor&&>(v)( jv.get_array() );
      53              21 :     case kind::object:  return static_cast<Visitor&&>(v)( jv.get_object() );
      54              29 :     case kind::bool_:   return static_cast<Visitor&&>(v)( jv.get_bool() );
      55              91 :     case kind::int64:   return static_cast<Visitor&&>(v)( jv.get_int64() );
      56              17 :     case kind::uint64:  return static_cast<Visitor&&>(v)( jv.get_uint64() );
      57               9 :     case kind::double_: return static_cast<Visitor&&>(v)( jv.get_double() );
      58              33 :     case kind::null: {
      59              33 :         auto const np = nullptr;
      60              33 :         return static_cast<Visitor&&>(v)(np) ;
      61                 :     }
      62                 :     }
      63                 : }
      64                 : 
      65                 : 
      66                 : template<class Visitor>
      67                 : auto
      68              16 : visit(
      69                 :     Visitor&& v,
      70                 :     value&& jv) -> decltype(
      71                 :         static_cast<Visitor&&>(v)( std::declval<std::nullptr_t&&>() ) )
      72                 : {
      73              16 :     switch(jv.kind())
      74                 :     {
      75               2 :     default: // unreachable()?
      76               2 :     case kind::string:  return static_cast<Visitor&&>(v)( std::move( jv.get_string() ) );
      77               2 :     case kind::array:   return static_cast<Visitor&&>(v)( std::move( jv.get_array() ) );
      78               2 :     case kind::object:  return static_cast<Visitor&&>(v)( std::move( jv.get_object() ) );
      79               2 :     case kind::bool_:   return static_cast<Visitor&&>(v)( std::move( jv.get_bool() ) );
      80               2 :     case kind::int64:   return static_cast<Visitor&&>(v)( std::move( jv.get_int64() ) );
      81               2 :     case kind::uint64:  return static_cast<Visitor&&>(v)( std::move( jv.get_uint64() ) );
      82               2 :     case kind::double_: return static_cast<Visitor&&>(v)( std::move( jv.get_double() ) );
      83               2 :     case kind::null:    return static_cast<Visitor&&>(v)( std::nullptr_t() ) ;
      84                 :     }
      85                 : }
      86                 : 
      87                 : } // namespace json
      88                 : } // namespace boost
      89                 : 
      90                 : #endif
        

Generated by: LCOV version 2.3