LCOV - code coverage report
Current view: top level - json/impl - visit.hpp (source / functions) Coverage Total Hit
Test: coverage_remapped.info Lines: 100.0 % 36 36
Test Date: 2026-02-12 12:13:04 Functions: 100.0 % 33 33

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

Generated by: LCOV version 2.3