Back to home page

EIC code displayed by LXR

 
 

    


Warning, file /include/nlohmann/detail/iterators/primitive_iterator.hpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 //     __ _____ _____ _____
0002 //  __|  |   __|     |   | |  JSON for Modern C++
0003 // |  |  |__   |  |  | | | |  version 3.11.3
0004 // |_____|_____|_____|_|___|  https://github.com/nlohmann/json
0005 //
0006 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
0007 // SPDX-License-Identifier: MIT
0008 
0009 #pragma once
0010 
0011 #include <cstddef> // ptrdiff_t
0012 #include <limits>  // numeric_limits
0013 
0014 #include <nlohmann/detail/macro_scope.hpp>
0015 
0016 NLOHMANN_JSON_NAMESPACE_BEGIN
0017 namespace detail
0018 {
0019 
0020 /*
0021 @brief an iterator for primitive JSON types
0022 
0023 This class models an iterator for primitive JSON types (boolean, number,
0024 string). It's only purpose is to allow the iterator/const_iterator classes
0025 to "iterate" over primitive values. Internally, the iterator is modeled by
0026 a `difference_type` variable. Value begin_value (`0`) models the begin,
0027 end_value (`1`) models past the end.
0028 */
0029 class primitive_iterator_t
0030 {
0031   private:
0032     using difference_type = std::ptrdiff_t;
0033     static constexpr difference_type begin_value = 0;
0034     static constexpr difference_type end_value = begin_value + 1;
0035 
0036   JSON_PRIVATE_UNLESS_TESTED:
0037     /// iterator as signed integer type
0038     difference_type m_it = (std::numeric_limits<std::ptrdiff_t>::min)();
0039 
0040   public:
0041     constexpr difference_type get_value() const noexcept
0042     {
0043         return m_it;
0044     }
0045 
0046     /// set iterator to a defined beginning
0047     void set_begin() noexcept
0048     {
0049         m_it = begin_value;
0050     }
0051 
0052     /// set iterator to a defined past the end
0053     void set_end() noexcept
0054     {
0055         m_it = end_value;
0056     }
0057 
0058     /// return whether the iterator can be dereferenced
0059     constexpr bool is_begin() const noexcept
0060     {
0061         return m_it == begin_value;
0062     }
0063 
0064     /// return whether the iterator is at end
0065     constexpr bool is_end() const noexcept
0066     {
0067         return m_it == end_value;
0068     }
0069 
0070     friend constexpr bool operator==(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept
0071     {
0072         return lhs.m_it == rhs.m_it;
0073     }
0074 
0075     friend constexpr bool operator<(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept
0076     {
0077         return lhs.m_it < rhs.m_it;
0078     }
0079 
0080     primitive_iterator_t operator+(difference_type n) noexcept
0081     {
0082         auto result = *this;
0083         result += n;
0084         return result;
0085     }
0086 
0087     friend constexpr difference_type operator-(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept
0088     {
0089         return lhs.m_it - rhs.m_it;
0090     }
0091 
0092     primitive_iterator_t& operator++() noexcept
0093     {
0094         ++m_it;
0095         return *this;
0096     }
0097 
0098     primitive_iterator_t operator++(int)& noexcept // NOLINT(cert-dcl21-cpp)
0099     {
0100         auto result = *this;
0101         ++m_it;
0102         return result;
0103     }
0104 
0105     primitive_iterator_t& operator--() noexcept
0106     {
0107         --m_it;
0108         return *this;
0109     }
0110 
0111     primitive_iterator_t operator--(int)& noexcept // NOLINT(cert-dcl21-cpp)
0112     {
0113         auto result = *this;
0114         --m_it;
0115         return result;
0116     }
0117 
0118     primitive_iterator_t& operator+=(difference_type n) noexcept
0119     {
0120         m_it += n;
0121         return *this;
0122     }
0123 
0124     primitive_iterator_t& operator-=(difference_type n) noexcept
0125     {
0126         m_it -= n;
0127         return *this;
0128     }
0129 };
0130 
0131 }  // namespace detail
0132 NLOHMANN_JSON_NAMESPACE_END