Function sample_parse_in_situ
Synopsis
#include <samples/quickstart.cpp>
void sample_parse_in_situ()
Description
parse an immutable YAML source buffer
demonstrate in-place parsing of a mutable YAML source buffer
Mentioned in
- Getting Started / Quick start
Source
Lines 1295-1334 in samples/quickstart.cpp. Line 52 in samples/quickstart.cpp.
void sample_parse_in_situ()
{
char src[] = "{foo: 1, bar: [2, 3]}"; // ryml can parse in situ
ryml::substr srcview = src; // a mutable view to the source buffer
ryml::Tree tree = ryml::parse(srcview); // you can also reuse the tree and/or parser
ryml::NodeRef root = tree.rootref(); // get a reference to the root
CHECK(root.is_map());
CHECK(root["foo"].is_keyval());
CHECK(root["foo"].key() == "foo");
CHECK(root["foo"].val() == "1");
CHECK(root["bar"].is_seq());
CHECK(root["bar"].has_key());
CHECK(root["bar"].key() == "bar");
CHECK(root["bar"][0].val() == "2");
CHECK(root["bar"][1].val() == "3");
// deserializing:
int foo = 0, bar0 = 0, bar1 = 0;
root["foo"] >> foo;
root["bar"][0] >> bar0;
root["bar"][1] >> bar1;
CHECK(foo == 1);
CHECK(bar0 == 2);
CHECK(bar1 == 3);
// after parsing, the tree holds views to the source buffer:
CHECK(root["foo"].val().data() == src + strlen("{foo: "));
CHECK(root["foo"].val().begin() == src + strlen("{foo: "));
CHECK(root["foo"].val().end() == src + strlen("{foo: 1"));
CHECK(root["foo"].val().is_sub(srcview)); // equivalent to the previous three assertions
CHECK(root["bar"][0].val().data() == src + strlen("{foo: 1, bar: ["));
CHECK(root["bar"][0].val().begin() == src + strlen("{foo: 1, bar: ["));
CHECK(root["bar"][0].val().end() == src + strlen("{foo: 1, bar: [2"));
CHECK(root["bar"][0].val().is_sub(srcview)); // equivalent to the previous three assertions
CHECK(root["bar"][1].val().data() == src + strlen("{foo: 1, bar: [2, "));
CHECK(root["bar"][1].val().begin() == src + strlen("{foo: 1, bar: [2, "));
CHECK(root["bar"][1].val().end() == src + strlen("{foo: 1, bar: [2, 3"));
CHECK(root["bar"][1].val().is_sub(srcview)); // equivalent to the previous three assertions
}