rapidyaml  0.12.1
parse and emit YAML, and do it fast
Serialization helpers

Classes

struct  c4::yml::Key< K >
 
struct  c4::yml::Key< fmt::const_base64_wrapper >
 
struct  c4::yml::Key< fmt::base64_wrapper >
 

Functions

template<class K >
Key< K > c4::yml::key (K &k)
 
Key< fmt::const_base64_wrapperc4::yml::key (fmt::const_base64_wrapper w)
 
Key< fmt::base64_wrapperc4::yml::key (fmt::base64_wrapper w)
 
template<class T >
void c4::yml::write (NodeRef *n, T const &v)
 
template<class T >
bool c4::yml::read (ConstNodeRef const &n, T *v)
 
template<class T >
bool c4::yml::read (NodeRef const &n, T *v)
 
template<class T >
bool c4::yml::readkey (ConstNodeRef const &n, T *v)
 
template<class T >
bool c4::yml::readkey (NodeRef const &n, T *v)
 
template<class T >
auto c4::yml::read (Tree const *tree, id_type id, T *v) -> typename std::enable_if<!std::is_arithmetic< T >::value, bool >::type
 convert the val of a scalar node to a particular non-arithmetic non-float type, by forwarding its val to from_chars<T>(). More...
 
template<class T >
auto c4::yml::readkey (Tree const *tree, id_type id, T *v) -> typename std::enable_if<!std::is_arithmetic< T >::value, bool >::type
 convert the key of a node to a particular non-arithmetic non-float type, by forwarding its key to from_chars<T>(). More...
 
template<class T >
size_t c4::yml::to_chars_float (substr buf, T val)
 encode a floating point value to a string. More...
 
template<class T >
bool c4::yml::from_chars_float (csubstr buf, T *val)
 decode a floating point from string. More...
 
template<class T >
csubstr c4::yml::serialize_to_arena (Tree *tree, T const &a)
 

Detailed Description

Function Documentation

◆ key() [1/3]

template<class K >
Key<K> c4::yml::key ( K &  k)
inline

Definition at line 45 of file node.hpp.

45 { return Key<K>{k}; }

◆ key() [2/3]

Definition at line 46 of file node.hpp.

46 { return {w}; }

◆ key() [3/3]

Key<fmt::base64_wrapper> c4::yml::key ( fmt::base64_wrapper  w)
inline

Definition at line 47 of file node.hpp.

47 { return {w}; }

◆ write()

template<class T >
void c4::yml::write ( NodeRef n,
T const &  v 
)
inline

Definition at line 1632 of file node.hpp.

1633 {
1634  n->set_val_serialized(v);
1635 }

References c4::yml::NodeRef::set_val_serialized().

◆ read() [1/3]

template<class T >
bool c4::yml::read ( ConstNodeRef const &  n,
T *  v 
)
inline

Definition at line 1638 of file node.hpp.

1639 {
1640  return read(n.m_tree, n.m_id, v);
1641 }
bool read(NodeRef const &n, T *v)
Definition: node.hpp:1644

◆ read() [2/3]

template<class T >
bool c4::yml::read ( NodeRef const &  n,
T *  v 
)
inline

Definition at line 1644 of file node.hpp.

1645 {
1646  return read(n.tree(), n.id(), v);
1647 }

References c4::yml::read().

◆ readkey() [1/3]

template<class T >
bool c4::yml::readkey ( ConstNodeRef const &  n,
T *  v 
)
inline

Definition at line 1650 of file node.hpp.

1651 {
1652  return readkey(n.m_tree, n.m_id, v);
1653 }
bool readkey(NodeRef const &n, T *v)
Definition: node.hpp:1656

◆ readkey() [2/3]

template<class T >
bool c4::yml::readkey ( NodeRef const &  n,
T *  v 
)
inline

Definition at line 1656 of file node.hpp.

1657 {
1658  return readkey(n.tree(), n.id(), v);
1659 }

References c4::yml::readkey().

◆ read() [3/3]

template<class T >
auto c4::yml::read ( Tree const *  tree,
id_type  id,
T *  v 
) -> typename std::enable_if<!std::is_arithmetic<T>::value, bool>::type
inline

convert the val of a scalar node to a particular non-arithmetic non-float type, by forwarding its val to from_chars<T>().

convert the val of a scalar node to a particular arithmetic integral non-float type, by forwarding its val to from_chars<T>().

The full string is used.

Returns
false if the conversion failed, or if the key was empty and unquoted

The full string is used.

Returns
false if the conversion failed

Definition at line 1364 of file tree.hpp.

1366 {
1367  return C4_LIKELY(!(tree->type(id) & VALNIL)) ? from_chars(tree->val(id), v) : false;
1368 }
@ VALNIL
the val is null (eg {a : } results in a null val)
Definition: node_type.hpp:50
bool from_chars(ryml::csubstr buf, vec2< T > *v)

References from_chars(), and c4::yml::VALNIL.

◆ readkey() [3/3]

template<class T >
auto c4::yml::readkey ( Tree const *  tree,
id_type  id,
T *  v 
) -> typename std::enable_if<!std::is_arithmetic<T>::value, bool>::type
inline

convert the key of a node to a particular non-arithmetic non-float type, by forwarding its key to from_chars<T>().

convert the key of a node to a particular arithmetic integral non-float type, by forwarding its val to from_chars<T>().

The full string is used.

Returns
false if the conversion failed, or if the key was empty and unquoted

The full string is used.

Returns
false if the conversion failed

Definition at line 1375 of file tree.hpp.

1377 {
1378  return C4_LIKELY(!(tree->type(id) & KEYNIL)) ? from_chars(tree->key(id), v) : false;
1379 }
@ KEYNIL
the key is null (eg { : b} results in a null key)
Definition: node_type.hpp:49

References from_chars(), and c4::yml::KEYNIL.

◆ to_chars_float()

template<class T >
size_t c4::yml::to_chars_float ( substr  buf,
val 
)

encode a floating point value to a string.

Definition at line 1439 of file tree.hpp.

1440 {
1441  static_assert(std::is_floating_point<T>::value, "must be floating point");
1442  C4_SUPPRESS_WARNING_GCC_CLANG_WITH_PUSH("-Wfloat-equal");
1443  if(C4_UNLIKELY(std::isnan(val)))
1444  return to_chars(buf, csubstr(".nan"));
1445  else if(C4_UNLIKELY(val == std::numeric_limits<T>::infinity()))
1446  return to_chars(buf, csubstr(".inf"));
1447  else if(C4_UNLIKELY(val == -std::numeric_limits<T>::infinity()))
1448  return to_chars(buf, csubstr("-.inf"));
1449  return to_chars(buf, val);
1450  C4_SUPPRESS_WARNING_GCC_CLANG_POP
1451 }
size_t to_chars(substr buf, escaped_scalar e)
formatting implementation to escape a scalar with escape_scalar()

References c4::yml::to_chars().

◆ from_chars_float()

template<class T >
bool c4::yml::from_chars_float ( csubstr  buf,
T *  val 
)

decode a floating point from string.

Accepts special values: .nan, .inf, -.inf

Definition at line 1457 of file tree.hpp.

1458 {
1459  static_assert(std::is_floating_point<T>::value, "must be floating point");
1460  if(buf.begins_with('+'))
1461  {
1462  buf = buf.sub(1);
1463  }
1464  if(C4_LIKELY(from_chars(buf, val)))
1465  {
1466  return true;
1467  }
1468  else if(C4_UNLIKELY(buf == ".nan" || buf == ".NaN" || buf == ".NAN"))
1469  {
1470  *val = std::numeric_limits<T>::quiet_NaN();
1471  return true;
1472  }
1473  else if(C4_UNLIKELY(buf == ".inf" || buf == ".Inf" || buf == ".INF"))
1474  {
1475  *val = std::numeric_limits<T>::infinity();
1476  return true;
1477  }
1478  else if(C4_UNLIKELY(buf == "-.inf" || buf == "-.Inf" || buf == "-.INF"))
1479  {
1480  *val = -std::numeric_limits<T>::infinity();
1481  return true;
1482  }
1483  else
1484  {
1485  return false;
1486  }
1487 }

References from_chars().

◆ serialize_to_arena()

template<class T >
csubstr c4::yml::serialize_to_arena ( Tree tree,
T const &  a 
)

Definition at line 1553 of file tree.hpp.

1554 {
1555  substr rem(tree->m_arena.sub(tree->m_arena_pos));
1556  size_t num = serialize_scalar(rem, a);
1557  if(num > rem.len)
1558  {
1559  rem = tree->_grow_arena(num);
1560  num = serialize_scalar(rem, a);
1561  _RYML_ASSERT_VISIT_(tree->m_callbacks, num <= rem.len, tree, NONE);
1562  }
1563  rem = tree->_request_span(num);
1564  return rem;
1565 }
auto serialize_scalar(substr buf, T const &a) -> typename std::enable_if< std::is_floating_point< T >::value, size_t >::type
Definition: tree.hpp:64
@ NONE
an index to none
Definition: common.hpp:251

References c4::yml::NONE, and c4::yml::serialize_scalar().