Function sample_user_container_types
Synopsis
#include <samples/quickstart.cpp>
void sample_user_container_types()
Description
serialize/deserialize container (map or seq) types
Mentioned in
- Getting Started / Quick start
Source
Lines 2684-2736 in samples/quickstart.cpp. Line 63 in samples/quickstart.cpp.
void sample_user_container_types()
{
my_type mt_in{
{20, 21},
{30, 31, 32},
{40, 41, 42, 43},
{{101, 102, 103, 104, 105, 106, 107}},
{{{1001, 2001}, {1002, 2002}, {1003, 2003}}},
};
my_type mt_out;
ryml::Tree t;
t.rootref() << mt_in; // read from this
t.rootref() >> mt_out; // assign here
CHECK(mt_out.v2.x == mt_in.v2.x);
CHECK(mt_out.v2.y == mt_in.v2.y);
CHECK(mt_out.v3.x == mt_in.v3.x);
CHECK(mt_out.v3.y == mt_in.v3.y);
CHECK(mt_out.v3.z == mt_in.v3.z);
CHECK(mt_out.v4.x == mt_in.v4.x);
CHECK(mt_out.v4.y == mt_in.v4.y);
CHECK(mt_out.v4.z == mt_in.v4.z);
CHECK(mt_out.v4.w == mt_in.v4.w);
CHECK(mt_in.seq.seq_member.size() > 0);
CHECK(mt_out.seq.seq_member.size() == mt_in.seq.seq_member.size());
for(size_t i = 0; i < mt_in.seq.seq_member.size(); ++i)
{
CHECK(mt_out.seq.seq_member[i] == mt_in.seq.seq_member[i]);
}
CHECK(mt_in.map.map_member.size() > 0);
CHECK(mt_out.map.map_member.size() == mt_in.map.map_member.size());
for(auto const& kv : mt_in.map.map_member)
{
CHECK(mt_out.map.map_member.find(kv.first) != mt_out.map.map_member.end());
CHECK(mt_out.map.map_member[kv.first] == kv.second);
}
CHECK(ryml::emitrs<std::string>(t) == R"(v2: '(20,21)'
v3: '(30,31,32)'
v4: '(40,41,42,43)'
seq:
- 101
- 102
- 103
- 104
- 105
- 106
- 107
map:
1001: 2001
1002: 2002
1003: 2003
)");
}