mirror of
				https://github.com/RetroDECK/Duckstation.git
				synced 2025-04-10 19:15:14 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			54 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef _C4_YML_STD_VECTOR_HPP_
 | |
| #define _C4_YML_STD_VECTOR_HPP_
 | |
| 
 | |
| #include "c4/yml/node.hpp"
 | |
| #include <c4/std/vector.hpp>
 | |
| #include <vector>
 | |
| 
 | |
| namespace c4 {
 | |
| namespace yml {
 | |
| 
 | |
| // vector is a sequence-like type, and it requires child nodes
 | |
| // in the data tree hierarchy (a SEQ node in ryml parlance).
 | |
| // So it should be serialized via write()/read().
 | |
| 
 | |
| 
 | |
| template<class V, class Alloc>
 | |
| void write(c4::yml::NodeRef *n, std::vector<V, Alloc> const& vec)
 | |
| {
 | |
|     *n |= c4::yml::SEQ;
 | |
|     for(auto const& v : vec)
 | |
|         n->append_child() << v;
 | |
| }
 | |
| 
 | |
| template<class V, class Alloc>
 | |
| bool read(c4::yml::ConstNodeRef const& n, std::vector<V, Alloc> *vec)
 | |
| {
 | |
|     vec->resize(n.num_children());
 | |
|     size_t pos = 0;
 | |
|     for(auto const ch : n)
 | |
|         ch >> (*vec)[pos++];
 | |
|     return true;
 | |
| }
 | |
| 
 | |
| /** specialization: std::vector<bool> uses std::vector<bool>::reference as
 | |
|  * the return value of its operator[]. */
 | |
| template<class Alloc>
 | |
| bool read(c4::yml::ConstNodeRef const& n, std::vector<bool, Alloc> *vec)
 | |
| {
 | |
|     vec->resize(n.num_children());
 | |
|     size_t pos = 0;
 | |
|     bool tmp;
 | |
|     for(auto const ch : n)
 | |
|     {
 | |
|         ch >> tmp;
 | |
|         (*vec)[pos++] = tmp;
 | |
|     }
 | |
|     return true;
 | |
| }
 | |
| 
 | |
| } // namespace yml
 | |
| } // namespace c4
 | |
| 
 | |
| #endif // _C4_YML_STD_VECTOR_HPP_
 | 
