LCOV - code coverage report
Current view: top level - json/impl - visit.hpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 100.0 % 37 37
Test Date: 2025-12-23 17:20:51 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 :     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.1