⚡ keys are now returned as const reference #1098
This commit is contained in:
		
							parent
							
								
									4639bb2c8f
								
							
						
					
					
						commit
						90eb0a91e0
					
				
					 3 changed files with 30 additions and 10 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,10 @@ template<typename IteratorType> class iteration_proxy | |||
|         IteratorType anchor; | ||||
|         /// an index for arrays (used to create key names)
 | ||||
|         std::size_t array_index = 0; | ||||
|         /// a string representation of the array index
 | ||||
|         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) {} | ||||
|  | @ -35,7 +39,13 @@ template<typename IteratorType> class iteration_proxy | |||
|         iteration_proxy_internal& operator++() | ||||
|         { | ||||
|             ++anchor; | ||||
|             ++array_index; | ||||
| 
 | ||||
|             assert(anchor.m_object != nullptr); | ||||
|             if (anchor.m_object->is_array()) | ||||
|             { | ||||
|                 // update array index and string representation
 | ||||
|                 array_index_str = std::to_string(++array_index); | ||||
|             } | ||||
| 
 | ||||
|             return *this; | ||||
|         } | ||||
|  | @ -47,7 +57,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 +65,7 @@ template<typename IteratorType> class iteration_proxy | |||
|             { | ||||
|                 // use integer array index as key
 | ||||
|                 case value_t::array: | ||||
|                     return std::to_string(array_index); | ||||
|                     return array_index_str; | ||||
| 
 | ||||
|                 // use key from the object
 | ||||
|                 case value_t::object: | ||||
|  | @ -63,7 +73,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