#ifndef _C4_YML_STD_VECTOR_HPP_ #define _C4_YML_STD_VECTOR_HPP_ #include "c4/yml/node.hpp" #include #include 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 void write(c4::yml::NodeRef *n, std::vector const& vec) { *n |= c4::yml::SEQ; for(auto const& v : vec) n->append_child() << v; } template bool read(c4::yml::ConstNodeRef const& n, std::vector *vec) { vec->resize(n.num_children()); size_t pos = 0; for(auto const ch : n) ch >> (*vec)[pos++]; return true; } /** specialization: std::vector uses std::vector::reference as * the return value of its operator[]. */ template bool read(c4::yml::ConstNodeRef const& n, std::vector *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_