mirror of
				https://github.com/RetroDECK/Duckstation.git
				synced 2025-04-10 19:15:14 +00:00 
			
		
		
		
	
		
			
	
	
		
			46 lines
		
	
	
		
			1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			46 lines
		
	
	
		
			1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|   | #ifndef _C4_YML_STD_MAP_HPP_
 | ||
|  | #define _C4_YML_STD_MAP_HPP_
 | ||
|  | 
 | ||
|  | /** @file map.hpp write/read std::map to/from a YAML tree. */ | ||
|  | 
 | ||
|  | #include "c4/yml/node.hpp"
 | ||
|  | #include <map>
 | ||
|  | 
 | ||
|  | namespace c4 { | ||
|  | namespace yml { | ||
|  | 
 | ||
|  | // std::map requires child nodes in the data
 | ||
|  | // tree hierarchy (a MAP node in ryml parlance).
 | ||
|  | // So it should be serialized via write()/read().
 | ||
|  | 
 | ||
|  | template<class K, class V, class Less, class Alloc> | ||
|  | void write(c4::yml::NodeRef *n, std::map<K, V, Less, Alloc> const& m) | ||
|  | { | ||
|  |     *n |= c4::yml::MAP; | ||
|  |     for(auto const& C4_RESTRICT p : m) | ||
|  |     { | ||
|  |         auto ch = n->append_child(); | ||
|  |         ch << c4::yml::key(p.first); | ||
|  |         ch << p.second; | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | template<class K, class V, class Less, class Alloc> | ||
|  | bool read(c4::yml::ConstNodeRef const& n, std::map<K, V, Less, Alloc> * m) | ||
|  | { | ||
|  |     K k{}; | ||
|  |     V v{}; | ||
|  |     for(auto const& C4_RESTRICT ch : n) | ||
|  |     { | ||
|  |         ch >> c4::yml::key(k); | ||
|  |         ch >> v; | ||
|  |         m->emplace(std::make_pair(std::move(k), std::move(v))); | ||
|  |     } | ||
|  |     return true; | ||
|  | } | ||
|  | 
 | ||
|  | } // namespace yml
 | ||
|  | } // namespace c4
 | ||
|  | 
 | ||
|  | #endif // _C4_YML_STD_MAP_HPP_
 |