| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | //     __ _____ _____ _____//  __|  |   __|     |   | |  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 <cstddef> // ptrdiff_t#include <limits>  // numeric_limits#include <nlohmann/detail/macro_scope.hpp>NLOHMANN_JSON_NAMESPACE_BEGINnamespace detail{/*@brief an iterator for primitive JSON typesThis class models an iterator for primitive JSON types (boolean, number,string). It's only purpose is to allow the iterator/const_iterator classesto "iterate" over primitive values. Internally, the iterator is modeled bya `difference_type` variable. Value begin_value (`0`) models the begin,end_value (`1`) models past the end.*/class primitive_iterator_t{  private:    using difference_type = std::ptrdiff_t;    static constexpr difference_type begin_value = 0;    static constexpr difference_type end_value = begin_value + 1;  JSON_PRIVATE_UNLESS_TESTED:    /// iterator as signed integer type    difference_type m_it = (std::numeric_limits<std::ptrdiff_t>::min)();  public:    constexpr difference_type get_value() const noexcept    {        return m_it;    }    /// set iterator to a defined beginning    void set_begin() noexcept    {        m_it = begin_value;    }    /// set iterator to a defined past the end    void set_end() noexcept    {        m_it = end_value;    }    /// return whether the iterator can be dereferenced    constexpr bool is_begin() const noexcept    {        return m_it == begin_value;    }    /// return whether the iterator is at end    constexpr bool is_end() const noexcept    {        return m_it == end_value;    }    friend constexpr bool operator==(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept    {        return lhs.m_it == rhs.m_it;    }    friend constexpr bool operator<(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept    {        return lhs.m_it < rhs.m_it;    }    primitive_iterator_t operator+(difference_type n) noexcept    {        auto result = *this;        result += n;        return result;    }    friend constexpr difference_type operator-(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept    {        return lhs.m_it - rhs.m_it;    }    primitive_iterator_t& operator++() noexcept    {        ++m_it;        return *this;    }    primitive_iterator_t operator++(int)& noexcept // NOLINT(cert-dcl21-cpp)    {        auto result = *this;        ++m_it;        return result;    }    primitive_iterator_t& operator--() noexcept    {        --m_it;        return *this;    }    primitive_iterator_t operator--(int)& noexcept // NOLINT(cert-dcl21-cpp)    {        auto result = *this;        --m_it;        return result;    }    primitive_iterator_t& operator+=(difference_type n) noexcept    {        m_it += n;        return *this;    }    primitive_iterator_t& operator-=(difference_type n) noexcept    {        m_it -= n;        return *this;    }};}  // namespace detailNLOHMANN_JSON_NAMESPACE_END
 |