62 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			62 lines
		
	
	
		
			1.7 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 <iterator> // random_access_iterator_tag
 | ||
|  | 
 | ||
|  | #include <nlohmann/detail/abi_macros.hpp>
 | ||
|  | #include <nlohmann/detail/meta/void_t.hpp>
 | ||
|  | #include <nlohmann/detail/meta/cpp_future.hpp>
 | ||
|  | 
 | ||
|  | NLOHMANN_JSON_NAMESPACE_BEGIN | ||
|  | namespace detail | ||
|  | { | ||
|  | 
 | ||
|  | template<typename It, typename = void> | ||
|  | struct iterator_types {}; | ||
|  | 
 | ||
|  | template<typename It> | ||
|  | struct iterator_types < | ||
|  |     It, | ||
|  |     void_t<typename It::difference_type, typename It::value_type, typename It::pointer, | ||
|  |     typename It::reference, typename It::iterator_category >> | ||
|  | { | ||
|  |     using difference_type = typename It::difference_type; | ||
|  |     using value_type = typename It::value_type; | ||
|  |     using pointer = typename It::pointer; | ||
|  |     using reference = typename It::reference; | ||
|  |     using iterator_category = typename It::iterator_category; | ||
|  | }; | ||
|  | 
 | ||
|  | // This is required as some compilers implement std::iterator_traits in a way that
 | ||
|  | // doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341.
 | ||
|  | template<typename T, typename = void> | ||
|  | struct iterator_traits | ||
|  | { | ||
|  | }; | ||
|  | 
 | ||
|  | template<typename T> | ||
|  | struct iterator_traits < T, enable_if_t < !std::is_pointer<T>::value >> | ||
|  |             : iterator_types<T> | ||
|  | { | ||
|  | }; | ||
|  | 
 | ||
|  | template<typename T> | ||
|  | struct iterator_traits<T*, enable_if_t<std::is_object<T>::value>> | ||
|  | { | ||
|  |     using iterator_category = std::random_access_iterator_tag; | ||
|  |     using value_type = T; | ||
|  |     using difference_type = ptrdiff_t; | ||
|  |     using pointer = T*; | ||
|  |     using reference = T&; | ||
|  | }; | ||
|  | 
 | ||
|  | }  // namespace detail
 | ||
|  | NLOHMANN_JSON_NAMESPACE_END |