Merge branch 'feature/key_ref' into develop (fixes #1098)
This commit is contained in:
		
						commit
						db03d09312
					
				
					 3 changed files with 34 additions and 8 deletions
				
			
		| 
						 | 
				
			
			@ -583,7 +583,7 @@ class iter_impl
 | 
			
		|||
    @brief  return the key of an object iterator
 | 
			
		||||
    @pre The iterator is initialized; i.e. `m_object != nullptr`.
 | 
			
		||||
    */
 | 
			
		||||
    typename object_t::key_type key() const
 | 
			
		||||
    const typename object_t::key_type& key() const
 | 
			
		||||
    {
 | 
			
		||||
        assert(m_object != nullptr);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,6 +21,12 @@ template<typename IteratorType> class iteration_proxy
 | 
			
		|||
        IteratorType anchor;
 | 
			
		||||
        /// an index for arrays (used to create key names)
 | 
			
		||||
        std::size_t array_index = 0;
 | 
			
		||||
        /// last stringified array index
 | 
			
		||||
        mutable std::size_t array_index_last = 0;
 | 
			
		||||
        /// a string representation of the array index
 | 
			
		||||
        mutable std::string array_index_str = "0";
 | 
			
		||||
        /// an empty string (to return a reference for primitive values)
 | 
			
		||||
        const std::string empty_str = "";
 | 
			
		||||
 | 
			
		||||
      public:
 | 
			
		||||
        explicit iteration_proxy_internal(IteratorType it) noexcept : anchor(it) {}
 | 
			
		||||
| 
						 | 
				
			
			@ -47,7 +53,7 @@ template<typename IteratorType> class iteration_proxy
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// return key of the iterator
 | 
			
		||||
        std::string key() const
 | 
			
		||||
        const std::string& key() const
 | 
			
		||||
        {
 | 
			
		||||
            assert(anchor.m_object != nullptr);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -55,7 +61,14 @@ template<typename IteratorType> class iteration_proxy
 | 
			
		|||
            {
 | 
			
		||||
                // use integer array index as key
 | 
			
		||||
                case value_t::array:
 | 
			
		||||
                    return std::to_string(array_index);
 | 
			
		||||
                {
 | 
			
		||||
                    if (array_index != array_index_last)
 | 
			
		||||
                    {
 | 
			
		||||
                        array_index_str = std::to_string(array_index);
 | 
			
		||||
                        array_index_last = array_index;
 | 
			
		||||
                    }
 | 
			
		||||
                    return array_index_str;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // use key from the object
 | 
			
		||||
                case value_t::object:
 | 
			
		||||
| 
						 | 
				
			
			@ -63,7 +76,7 @@ template<typename IteratorType> class iteration_proxy
 | 
			
		|||
 | 
			
		||||
                // use an empty key for all primitive types
 | 
			
		||||
                default:
 | 
			
		||||
                    return "";
 | 
			
		||||
                    return empty_str;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5210,7 +5210,7 @@ class iter_impl
 | 
			
		|||
    @brief  return the key of an object iterator
 | 
			
		||||
    @pre The iterator is initialized; i.e. `m_object != nullptr`.
 | 
			
		||||
    */
 | 
			
		||||
    typename object_t::key_type key() const
 | 
			
		||||
    const typename object_t::key_type& key() const
 | 
			
		||||
    {
 | 
			
		||||
        assert(m_object != nullptr);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -5265,6 +5265,12 @@ template<typename IteratorType> class iteration_proxy
 | 
			
		|||
        IteratorType anchor;
 | 
			
		||||
        /// an index for arrays (used to create key names)
 | 
			
		||||
        std::size_t array_index = 0;
 | 
			
		||||
        /// last stringified array index
 | 
			
		||||
        mutable std::size_t array_index_last = 0;
 | 
			
		||||
        /// a string representation of the array index
 | 
			
		||||
        mutable std::string array_index_str = "0";
 | 
			
		||||
        /// an empty string (to return a reference for primitive values)
 | 
			
		||||
        const std::string empty_str = "";
 | 
			
		||||
 | 
			
		||||
      public:
 | 
			
		||||
        explicit iteration_proxy_internal(IteratorType it) noexcept : anchor(it) {}
 | 
			
		||||
| 
						 | 
				
			
			@ -5291,7 +5297,7 @@ template<typename IteratorType> class iteration_proxy
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// return key of the iterator
 | 
			
		||||
        std::string key() const
 | 
			
		||||
        const std::string& key() const
 | 
			
		||||
        {
 | 
			
		||||
            assert(anchor.m_object != nullptr);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -5299,7 +5305,14 @@ template<typename IteratorType> class iteration_proxy
 | 
			
		|||
            {
 | 
			
		||||
                // use integer array index as key
 | 
			
		||||
                case value_t::array:
 | 
			
		||||
                    return std::to_string(array_index);
 | 
			
		||||
                {
 | 
			
		||||
                    if (array_index != array_index_last)
 | 
			
		||||
                    {
 | 
			
		||||
                        array_index_str = std::to_string(array_index);
 | 
			
		||||
                        array_index_last = array_index;
 | 
			
		||||
                    }
 | 
			
		||||
                    return array_index_str;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // use key from the object
 | 
			
		||||
                case value_t::object:
 | 
			
		||||
| 
						 | 
				
			
			@ -5307,7 +5320,7 @@ template<typename IteratorType> class iteration_proxy
 | 
			
		|||
 | 
			
		||||
                // use an empty key for all primitive types
 | 
			
		||||
                default:
 | 
			
		||||
                    return "";
 | 
			
		||||
                    return empty_str;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue