Merge pull request #1134 from Daniel599/feature/items_iterator
fixed compile error for #1045
This commit is contained in:
		
						commit
						86a96b059d
					
				
					 4 changed files with 82 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -294,6 +294,16 @@ void to_json(BasicJsonType& j, const std::pair<Args...>& p)
 | 
			
		|||
    j = {p.first, p.second};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<typename IteratorType> class iteration_proxy; // TODO: Forward decl needed, maybe move somewhere else
 | 
			
		||||
template<typename BasicJsonType, typename T,
 | 
			
		||||
         enable_if_t<std::is_same<T, typename iteration_proxy<typename BasicJsonType::iterator>::iteration_proxy_internal>::value, int> = 0>
 | 
			
		||||
void to_json(BasicJsonType& j, T b) noexcept
 | 
			
		||||
{
 | 
			
		||||
    typename BasicJsonType::object_t tmp_obj;
 | 
			
		||||
    tmp_obj[b.key()] = b.value(); // TODO: maybe there is a better way?
 | 
			
		||||
    external_constructor<value_t::object>::construct(j, std::move(tmp_obj));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<typename BasicJsonType, typename Tuple, std::size_t... Idx>
 | 
			
		||||
void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequence<Idx...>)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,6 +2,7 @@
 | 
			
		|||
 | 
			
		||||
#include <cstddef> // size_t
 | 
			
		||||
#include <string> // string, to_string
 | 
			
		||||
#include <iterator> // input_iterator_tag
 | 
			
		||||
 | 
			
		||||
#include <nlohmann/detail/value_t.hpp>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -16,6 +17,13 @@ template<typename IteratorType> class iteration_proxy
 | 
			
		|||
    /// helper class for iteration
 | 
			
		||||
    class iteration_proxy_internal
 | 
			
		||||
    {
 | 
			
		||||
      public:
 | 
			
		||||
        using difference_type = std::ptrdiff_t;
 | 
			
		||||
        using value_type = iteration_proxy_internal;
 | 
			
		||||
        using pointer = iteration_proxy_internal*;
 | 
			
		||||
        using reference = iteration_proxy_internal&;
 | 
			
		||||
        using iterator_category = std::input_iterator_tag;
 | 
			
		||||
 | 
			
		||||
      private:
 | 
			
		||||
        /// the iterator
 | 
			
		||||
        IteratorType anchor;
 | 
			
		||||
| 
						 | 
				
			
			@ -31,6 +39,9 @@ template<typename IteratorType> class iteration_proxy
 | 
			
		|||
      public:
 | 
			
		||||
        explicit iteration_proxy_internal(IteratorType it) noexcept : anchor(it) {}
 | 
			
		||||
 | 
			
		||||
        iteration_proxy_internal(const iteration_proxy_internal&) = default;
 | 
			
		||||
        iteration_proxy_internal& operator=(const iteration_proxy_internal&) = default;
 | 
			
		||||
 | 
			
		||||
        /// dereference operator (needed for range-based for)
 | 
			
		||||
        iteration_proxy_internal& operator*()
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -46,6 +57,12 @@ template<typename IteratorType> class iteration_proxy
 | 
			
		|||
            return *this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// equality operator (needed for InputIterator)
 | 
			
		||||
        bool operator==(const iteration_proxy_internal& o) const noexcept
 | 
			
		||||
        {
 | 
			
		||||
            return anchor == o.anchor;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// inequality operator (needed for range-based for)
 | 
			
		||||
        bool operator!=(const iteration_proxy_internal& o) const noexcept
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue