| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 | //     __ _____ _____ _____//  __|  |   __|     |   | |  JSON for Modern C++// |  |  |__   |  |  | | | |  version 3.12.0// |_____|_____|_____|_|___|  https://github.com/nlohmann/json//// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>// SPDX-License-Identifier: MIT#pragma once#include <cstring> // strlen#include <string> // string#include <utility> // forward#include <nlohmann/detail/meta/cpp_future.hpp>#include <nlohmann/detail/meta/detected.hpp>NLOHMANN_JSON_NAMESPACE_BEGINnamespace detail{inline std::size_t concat_length(){    return 0;}template<typename... Args>inline std::size_t concat_length(const char* cstr, const Args& ... rest);template<typename StringType, typename... Args>inline std::size_t concat_length(const StringType& str, const Args& ... rest);template<typename... Args>inline std::size_t concat_length(const char /*c*/, const Args& ... rest){    return 1 + concat_length(rest...);}template<typename... Args>inline std::size_t concat_length(const char* cstr, const Args& ... rest){    // cppcheck-suppress ignoredReturnValue    return ::strlen(cstr) + concat_length(rest...);}template<typename StringType, typename... Args>inline std::size_t concat_length(const StringType& str, const Args& ... rest){    return str.size() + concat_length(rest...);}template<typename OutStringType>inline void concat_into(OutStringType& /*out*/){}template<typename StringType, typename Arg>using string_can_append = decltype(std::declval<StringType&>().append(std::declval < Arg && > ()));template<typename StringType, typename Arg>using detect_string_can_append = is_detected<string_can_append, StringType, Arg>;template<typename StringType, typename Arg>using string_can_append_op = decltype(std::declval<StringType&>() += std::declval < Arg && > ());template<typename StringType, typename Arg>using detect_string_can_append_op = is_detected<string_can_append_op, StringType, Arg>;template<typename StringType, typename Arg>using string_can_append_iter = decltype(std::declval<StringType&>().append(std::declval<const Arg&>().begin(), std::declval<const Arg&>().end()));template<typename StringType, typename Arg>using detect_string_can_append_iter = is_detected<string_can_append_iter, StringType, Arg>;template<typename StringType, typename Arg>using string_can_append_data = decltype(std::declval<StringType&>().append(std::declval<const Arg&>().data(), std::declval<const Arg&>().size()));template<typename StringType, typename Arg>using detect_string_can_append_data = is_detected<string_can_append_data, StringType, Arg>;template < typename OutStringType, typename Arg, typename... Args,           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value                         && detect_string_can_append_op<OutStringType, Arg>::value, int > = 0 >inline void concat_into(OutStringType& out, Arg && arg, Args && ... rest);template < typename OutStringType, typename Arg, typename... Args,           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value                         && !detect_string_can_append_op<OutStringType, Arg>::value                         && detect_string_can_append_iter<OutStringType, Arg>::value, int > = 0 >inline void concat_into(OutStringType& out, const Arg& arg, Args && ... rest);template < typename OutStringType, typename Arg, typename... Args,           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value                         && !detect_string_can_append_op<OutStringType, Arg>::value                         && !detect_string_can_append_iter<OutStringType, Arg>::value                         && detect_string_can_append_data<OutStringType, Arg>::value, int > = 0 >inline void concat_into(OutStringType& out, const Arg& arg, Args && ... rest);template<typename OutStringType, typename Arg, typename... Args,         enable_if_t<detect_string_can_append<OutStringType, Arg>::value, int> = 0>inline void concat_into(OutStringType& out, Arg && arg, Args && ... rest){    out.append(std::forward<Arg>(arg));    concat_into(out, std::forward<Args>(rest)...);}template < typename OutStringType, typename Arg, typename... Args,           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value                         && detect_string_can_append_op<OutStringType, Arg>::value, int > >inline void concat_into(OutStringType& out, Arg&& arg, Args&& ... rest){    out += std::forward<Arg>(arg);    concat_into(out, std::forward<Args>(rest)...);}template < typename OutStringType, typename Arg, typename... Args,           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value                         && !detect_string_can_append_op<OutStringType, Arg>::value                         && detect_string_can_append_iter<OutStringType, Arg>::value, int > >inline void concat_into(OutStringType& out, const Arg& arg, Args&& ... rest){    out.append(arg.begin(), arg.end());    concat_into(out, std::forward<Args>(rest)...);}template < typename OutStringType, typename Arg, typename... Args,           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value                         && !detect_string_can_append_op<OutStringType, Arg>::value                         && !detect_string_can_append_iter<OutStringType, Arg>::value                         && detect_string_can_append_data<OutStringType, Arg>::value, int > >inline void concat_into(OutStringType& out, const Arg& arg, Args&& ... rest){    out.append(arg.data(), arg.size());    concat_into(out, std::forward<Args>(rest)...);}template<typename OutStringType = std::string, typename... Args>inline OutStringType concat(Args && ... args){    OutStringType str;    str.reserve(concat_length(args...));    concat_into(str, std::forward<Args>(args)...);    return str;}}  // namespace detailNLOHMANN_JSON_NAMESPACE_END
 |