rapidyaml  0.11.0
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 43 of file node.hpp.

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

◆ key() [2/3]

Definition at line 44 of file node.hpp.

44 { return {w}; }

◆ key() [3/3]

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

Definition at line 45 of file node.hpp.

45 { return {w}; }

◆ write()

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

Definition at line 1626 of file node.hpp.

1627 {
1628  n->set_val_serialized(v);
1629 }

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 1632 of file node.hpp.

1633 {
1634  return read(n.m_tree, n.m_id, v);
1635 }
bool read(NodeRef const &n, T *v)
Definition: node.hpp:1638

◆ read() [2/3]

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

Definition at line 1638 of file node.hpp.

1639 {
1640  return read(n.tree(), n.id(), v);
1641 }

References c4::yml::read().

◆ readkey() [1/3]

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

Definition at line 1644 of file node.hpp.

1645 {
1646  return readkey(n.m_tree, n.m_id, v);
1647 }
bool readkey(NodeRef const &n, T *v)
Definition: node.hpp:1650

◆ readkey() [2/3]

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

Definition at line 1650 of file node.hpp.

1651 {
1652  return readkey(n.tree(), n.id(), v);
1653 }

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 1331 of file tree.hpp.

1333 {
1334  return C4_LIKELY(!(tree->type(id) & VALNIL)) ? from_chars(tree->val(id), v) : false;
1335 }
@ VALNIL
the val is null (eg {a : } results in a null val)
Definition: node_type.hpp:49
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 1342 of file tree.hpp.

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

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 1406 of file tree.hpp.

1407 {
1408  static_assert(std::is_floating_point<T>::value, "must be floating point");
1409  C4_SUPPRESS_WARNING_GCC_CLANG_WITH_PUSH("-Wfloat-equal");
1410  if(C4_UNLIKELY(std::isnan(val)))
1411  return to_chars(buf, csubstr(".nan"));
1412  else if(C4_UNLIKELY(val == std::numeric_limits<T>::infinity()))
1413  return to_chars(buf, csubstr(".inf"));
1414  else if(C4_UNLIKELY(val == -std::numeric_limits<T>::infinity()))
1415  return to_chars(buf, csubstr("-.inf"));
1416  return to_chars(buf, val);
1417  C4_SUPPRESS_WARNING_GCC_CLANG_POP
1418 }
size_t to_chars(substr buf, escaped_scalar e)
formatting implementation to escape a scalar with x

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 1424 of file tree.hpp.

1425 {
1426  static_assert(std::is_floating_point<T>::value, "must be floating point");
1427  if(buf.begins_with('+'))
1428  {
1429  buf = buf.sub(1);
1430  }
1431  if(C4_LIKELY(from_chars(buf, val)))
1432  {
1433  return true;
1434  }
1435  else if(C4_UNLIKELY(buf == ".nan" || buf == ".NaN" || buf == ".NAN"))
1436  {
1437  *val = std::numeric_limits<T>::quiet_NaN();
1438  return true;
1439  }
1440  else if(C4_UNLIKELY(buf == ".inf" || buf == ".Inf" || buf == ".INF"))
1441  {
1442  *val = std::numeric_limits<T>::infinity();
1443  return true;
1444  }
1445  else if(C4_UNLIKELY(buf == "-.inf" || buf == "-.Inf" || buf == "-.INF"))
1446  {
1447  *val = -std::numeric_limits<T>::infinity();
1448  return true;
1449  }
1450  else
1451  {
1452  return false;
1453  }
1454 }

References from_chars().

◆ serialize_to_arena()

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

Definition at line 1520 of file tree.hpp.

1521 {
1522  substr rem(tree->m_arena.sub(tree->m_arena_pos));
1523  size_t num = serialize_scalar(rem, a);
1524  if(num > rem.len)
1525  {
1526  rem = tree->_grow_arena(num);
1527  num = serialize_scalar(rem, a);
1528  _RYML_ASSERT_VISIT_(tree->m_callbacks, num <= rem.len, tree, NONE);
1529  }
1530  rem = tree->_request_span(num);
1531  return rem;
1532 }
auto serialize_scalar(substr buf, T const &a) -> typename std::enable_if< std::is_floating_point< T >::value, size_t >::type
Definition: tree.hpp:61
@ NONE
an index to none
Definition: common.hpp:251

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