133 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
| //     __ _____ _____ _____
 | |
| //  __|  |   __|     |   | |  JSON for Modern C++
 | |
| // |  |  |__   |  |  | | | |  version 3.11.3
 | |
| // |_____|_____|_____|_|___|  https://github.com/nlohmann/json
 | |
| //
 | |
| // SPDX-FileCopyrightText: 2013-2023 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_BEGIN
 | |
| namespace detail
 | |
| {
 | |
| 
 | |
| /*
 | |
| @brief an iterator for primitive JSON types
 | |
| 
 | |
| This class models an iterator for primitive JSON types (boolean, number,
 | |
| string). It's only purpose is to allow the iterator/const_iterator classes
 | |
| to "iterate" over primitive values. Internally, the iterator is modeled by
 | |
| a `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 detail
 | |
| NLOHMANN_JSON_NAMESPACE_END
 |