LCOV - code coverage report
Current view: top level - json/detail - config.hpp (source / functions) Coverage Total Hit
Test: coverage_remapped.info Lines: 100.0 % 4 4
Test Date: 2026-10-28 12:09:59 Functions: 100.0 % 5 5

           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_DETAIL_CONFIG_HPP
      11                 : #define BOOST_JSON_DETAIL_CONFIG_HPP
      12                 : 
      13                 : #include <boost/config.hpp>
      14                 : #include <boost/config/pragma_message.hpp>
      15                 : #include <boost/assert.hpp>
      16                 : #include <boost/throw_exception.hpp>
      17                 : #include <cstdint>
      18                 : #include <type_traits>
      19                 : #include <utility>
      20                 : 
      21                 : // detect 32/64 bit
      22                 : #if UINTPTR_MAX == UINT64_MAX
      23                 : # define BOOST_JSON_ARCH 64
      24                 : #elif UINTPTR_MAX == UINT32_MAX
      25                 : # define BOOST_JSON_ARCH 32
      26                 : #else
      27                 : # error Unknown or unsupported architecture, please open an issue
      28                 : #endif
      29                 : 
      30                 : #ifndef BOOST_JSON_REQUIRE_CONST_INIT
      31                 : # define BOOST_JSON_REQUIRE_CONST_INIT
      32                 : # if __cpp_constinit >= 201907L
      33                 : #  undef BOOST_JSON_REQUIRE_CONST_INIT
      34                 : #  define BOOST_JSON_REQUIRE_CONST_INIT constinit
      35                 : # elif defined(__clang__) && defined(__has_cpp_attribute)
      36                 : #  if __has_cpp_attribute(clang::require_constant_initialization)
      37                 : #   undef BOOST_JSON_REQUIRE_CONST_INIT
      38                 : #   define BOOST_JSON_REQUIRE_CONST_INIT [[clang::require_constant_initialization]]
      39                 : #  endif
      40                 : # endif
      41                 : #endif
      42                 : 
      43                 : #ifndef BOOST_JSON_NO_ATTRIBUTE_NO_DESTROY
      44                 :   // clang, but not clang-cl
      45                 : # if defined(__clang__) && !defined(_MSC_VER) && defined(__has_cpp_attribute)
      46                 : #  if __has_cpp_attribute(clang::no_destroy)
      47                 : #     define BOOST_JSON_ATTRIBUTE_NO_DESTROY [[clang::no_destroy]]
      48                 : #  else
      49                 : #    define BOOST_JSON_NO_ATTRIBUTE_NO_DESTROY
      50                 : #  endif
      51                 : # else
      52                 : #   define BOOST_JSON_NO_ATTRIBUTE_NO_DESTROY
      53                 : # endif
      54                 : #endif
      55                 : 
      56                 : #if ! defined(BOOST_JSON_NO_SSE2) && \
      57                 :     ! defined(BOOST_JSON_USE_SSE2)
      58                 : # if (defined(_M_IX86) && _M_IX86_FP == 2) || \
      59                 :       defined(_M_X64) || defined(__SSE2__)
      60                 : #  define BOOST_JSON_USE_SSE2
      61                 : # endif
      62                 : #endif
      63                 : 
      64                 : #if defined(BOOST_JSON_DOCS)
      65                 : # define BOOST_JSON_DECL
      66                 : #else
      67                 : # if (defined(BOOST_JSON_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)) && !defined(BOOST_JSON_STATIC_LINK)
      68                 : #  if defined(BOOST_JSON_SOURCE)
      69                 : #   define BOOST_JSON_DECL        BOOST_SYMBOL_EXPORT
      70                 : #  else
      71                 : #   define BOOST_JSON_DECL        BOOST_SYMBOL_IMPORT
      72                 : #  endif
      73                 : # endif // shared lib
      74                 : # ifndef  BOOST_JSON_DECL
      75                 : #  define BOOST_JSON_DECL
      76                 : # endif
      77                 : # if !defined(BOOST_JSON_SOURCE) && !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_JSON_NO_LIB)
      78                 : #  define BOOST_LIB_NAME boost_json
      79                 : #  if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_JSON_DYN_LINK)
      80                 : #   define BOOST_DYN_LINK
      81                 : #  endif
      82                 : #  include <boost/config/auto_link.hpp>
      83                 : # endif
      84                 : #endif
      85                 : 
      86                 : #ifndef BOOST_JSON_LIKELY
      87                 : # define BOOST_JSON_LIKELY(x) BOOST_LIKELY( !!(x) )
      88                 : #endif
      89                 : 
      90                 : #ifndef BOOST_JSON_UNLIKELY
      91                 : # define BOOST_JSON_UNLIKELY(x) BOOST_UNLIKELY( !!(x) )
      92                 : #endif
      93                 : 
      94                 : #ifndef BOOST_JSON_UNREACHABLE
      95                 : # ifdef _MSC_VER
      96                 : #  define BOOST_JSON_UNREACHABLE() __assume(0)
      97                 : # elif defined(__GNUC__) || defined(__clang__)
      98                 : #  define BOOST_JSON_UNREACHABLE() __builtin_unreachable()
      99                 : # elif defined(__has_builtin)
     100                 : #  if __has_builtin(__builtin_unreachable)
     101                 : #   define BOOST_JSON_UNREACHABLE() __builtin_unreachable()
     102                 : #  endif
     103                 : # else
     104                 : #  define BOOST_JSON_UNREACHABLE() static_cast<void>(0)
     105                 : # endif
     106                 : #endif
     107                 : 
     108                 : #ifndef BOOST_JSON_ASSUME
     109                 : # define BOOST_JSON_ASSUME(x) (!!(x) ? void() : BOOST_JSON_UNREACHABLE())
     110                 : # ifdef _MSC_VER
     111                 : #  undef BOOST_JSON_ASSUME
     112                 : #  define BOOST_JSON_ASSUME(x) __assume(!!(x))
     113                 : # elif defined(__has_builtin)
     114                 : #  if __has_builtin(__builtin_assume)
     115                 : #   undef BOOST_JSON_ASSUME
     116                 : #   define BOOST_JSON_ASSUME(x) __builtin_assume(!!(x))
     117                 : #  endif
     118                 : # endif
     119                 : #endif
     120                 : 
     121                 : // older versions of msvc and clang don't always
     122                 : // constant initialize when they are supposed to
     123                 : #ifndef BOOST_JSON_WEAK_CONSTINIT
     124                 : # if defined(_MSC_VER) && ! defined(__clang__) && _MSC_VER < 1920
     125                 : #  define BOOST_JSON_WEAK_CONSTINIT
     126                 : # elif defined(__clang__) && __clang_major__ < 4
     127                 : #  define BOOST_JSON_WEAK_CONSTINIT
     128                 : # endif
     129                 : #endif
     130                 : 
     131                 : // These macros are private, for tests, do not change
     132                 : // them or else previously built libraries won't match.
     133                 : #ifndef  BOOST_JSON_MAX_STRING_SIZE
     134                 : # define BOOST_JSON_NO_MAX_STRING_SIZE
     135                 : # define BOOST_JSON_MAX_STRING_SIZE  0x7ffffffe
     136                 : #endif
     137                 : #ifndef  BOOST_JSON_MAX_STRUCTURED_SIZE
     138                 : # define BOOST_JSON_NO_MAX_STRUCTURED_SIZE
     139                 : # define BOOST_JSON_MAX_STRUCTURED_SIZE  0x7ffffffe
     140                 : #endif
     141                 : #ifndef  BOOST_JSON_STACK_BUFFER_SIZE
     142                 : # define BOOST_JSON_NO_STACK_BUFFER_SIZE
     143                 : # if defined(__i386__) || defined(__x86_64__) || \
     144                 :      defined(_M_IX86)  || defined(_M_X64)
     145                 : #  define BOOST_JSON_STACK_BUFFER_SIZE 4096
     146                 : # else
     147                 : // If we are not on Intel, then assume we are on
     148                 : // embedded and use a smaller stack size. If this
     149                 : // is not suitable, the user can define the macro
     150                 : // themselves when building the library or including
     151                 : // src.hpp.
     152                 : #  define BOOST_JSON_STACK_BUFFER_SIZE 256
     153                 : # endif
     154                 : #endif
     155                 : 
     156                 : #if defined(__cpp_constinit) && __cpp_constinit >= 201907L
     157                 : # define BOOST_JSON_CONSTINIT constinit
     158                 : #elif defined(__has_cpp_attribute) && defined(__clang__)
     159                 : # if __has_cpp_attribute(clang::require_constant_initialization)
     160                 : #  define BOOST_JSON_CONSTINIT [[clang::require_constant_initialization]]
     161                 : # endif
     162                 : #elif defined(__GNUC__) && (__GNUC__ >= 10)
     163                 : # define BOOST_JSON_CONSTINIT __constinit
     164                 : #endif
     165                 : #ifndef BOOST_JSON_CONSTINIT
     166                 : # define BOOST_JSON_CONSTINIT
     167                 : #endif
     168                 : 
     169                 : namespace boost {
     170                 : namespace json {
     171                 : namespace detail {
     172                 : 
     173                 : template<class...>
     174                 : struct make_void
     175                 : {
     176                 :     using type =void;
     177                 : };
     178                 : 
     179                 : template<class... Ts>
     180                 : using void_t = typename
     181                 :     make_void<Ts...>::type;
     182                 : 
     183                 : template<class T>
     184                 : using remove_cvref = typename
     185                 :     std::remove_cv<typename
     186                 :         std::remove_reference<T>::type>::type;
     187                 : 
     188                 : template<class T, class U>
     189 HIT    25058792 : T exchange(T& t, U u) noexcept
     190                 : {
     191        25058792 :     T v = std::move(t);
     192        25058792 :     t = std::move(u);
     193        25058792 :     return v;
     194                 : }
     195                 : 
     196                 : /*  This is a derivative work, original copyright:
     197                 : 
     198                 :     Copyright Eric Niebler 2013-present
     199                 : 
     200                 :     Use, modification and distribution is subject to the
     201                 :     Boost Software License, Version 1.0. (See accompanying
     202                 :     file LICENSE_1_0.txt or copy at
     203                 :     http://www.boost.org/LICENSE_1_0.txt)
     204                 : 
     205                 :     Project home: https://github.com/ericniebler/range-v3
     206                 : */
     207                 : template<typename T>
     208                 : struct static_const
     209                 : {
     210                 :     static constexpr T value {};
     211                 : };
     212                 : template<typename T>
     213                 : constexpr T static_const<T>::value;
     214                 : 
     215                 : #define BOOST_JSON_INLINE_VARIABLE(name, type) \
     216                 :     namespace { constexpr auto& name = \
     217                 :         ::boost::json::detail::static_const<type>::value; \
     218                 :     } struct _unused_ ## name ## _semicolon_bait_
     219                 : 
     220                 : } // detail
     221                 : } // namespace json
     222                 : } // namespace boost
     223                 : 
     224                 : #ifndef BOOST_JSON_ALLOW_DEPRECATED
     225                 : # ifdef BOOST_ALLOW_DEPRECATED
     226                 : #  define BOOST_JSON_ALLOW_DEPRECATED
     227                 : # endif
     228                 : #endif
     229                 : 
     230                 : #if defined(BOOST_GCC) && BOOST_GCC < 50000 && !defined(BOOST_JSON_ALLOW_DEPRECATED)
     231                 : # pragma GCC warning "Support for GCC versions below 5.0 is deprecated and will stop in Boost 1.88.0. To suppress this message define macro BOOST_JSON_ALLOW_DEPRECATED."
     232                 : #endif
     233                 : 
     234                 : #ifndef BOOST_JSON_ALLOW_DEPRECATED
     235                 : # define BOOST_JSON_DEPRECATED(x) BOOST_DEPRECATED(x)
     236                 : #else
     237                 : # define BOOST_JSON_DEPRECATED(x)
     238                 : #endif
     239                 : 
     240                 : #ifndef BOOST_ALL_NO_EMBEDDED_GDB_SCRIPTS
     241                 : #include <boost/json/detail/gdb_printers.hpp>
     242                 : #endif
     243                 : 
     244                 : #endif
        

Generated by: LCOV version 2.3