Path: blob/master/dep/rapidyaml/include/c4/yml/std/vector.hpp
4270 views
#ifndef _C4_YML_STD_VECTOR_HPP_1#define _C4_YML_STD_VECTOR_HPP_23#include "c4/yml/node.hpp"4#include <c4/std/vector.hpp>5#include <vector>67namespace c4 {8namespace yml {910// vector is a sequence-like type, and it requires child nodes11// in the data tree hierarchy (a SEQ node in ryml parlance).12// So it should be serialized via write()/read().131415template<class V, class Alloc>16void write(c4::yml::NodeRef *n, std::vector<V, Alloc> const& vec)17{18*n |= c4::yml::SEQ;19for(auto const& v : vec)20n->append_child() << v;21}2223template<class V, class Alloc>24bool read(c4::yml::ConstNodeRef const& n, std::vector<V, Alloc> *vec)25{26vec->resize(n.num_children());27size_t pos = 0;28for(auto const ch : n)29ch >> (*vec)[pos++];30return true;31}3233/** specialization: std::vector<bool> uses std::vector<bool>::reference as34* the return value of its operator[]. */35template<class Alloc>36bool read(c4::yml::ConstNodeRef const& n, std::vector<bool, Alloc> *vec)37{38vec->resize(n.num_children());39size_t pos = 0;40bool tmp;41for(auto const ch : n)42{43ch >> tmp;44(*vec)[pos++] = tmp;45}46return true;47}4849} // namespace yml50} // namespace c45152#endif // _C4_YML_STD_VECTOR_HPP_535455