Rapid YAML, or ryml for short. ryml is a C++ library to parse and emit
YAML, and do it fast, on everything from x64 to bare-metal chips
without operating system. (If you are looking to use your programs
with a YAML tree as a configuration tree with override facilities,
take a look at c4conf).

ryml parses both read-only and in-situ source buffers; the resulting
data nodes hold only views to sub-ranges of the source buffer. No
string copies or duplications are done, and no virtual functions are
used. The data tree is a flat index-based structure stored in a single
array. Serialization happens only at your direct request, after
parsing / before emitting. Internally, the data tree representation
stores only string views and has no knowledge of types, but of course,
every node can have a YAML type tag. ryml makes it easy and fast to
read and modify the data tree.

ryml is available as a single header file, or it can be used as a
simple library with cmake -- both separately (ie build->install->
find_package()) or together with your project (ie with
add_subdirectory()).

ryml can use custom global and per-tree memory allocators and error
handler callbacks, and is exception-agnostic. ryml provides a default
implementation for the allocator (using std::malloc()) and error
handlers (using using std::abort() is provided, but you can opt out
and provide your own memory allocation and eg, exception-throwing
callbacks.

ryml does not depend on the STL, ie, it does not use any std
container as part of its data structures), but it can serialize and
deserialize these containers into the data tree, with the use of
optional headers. ryml ships with c4core a small C++ utilities
multiplatform library.
