rapidyaml  0.9.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...
 

Detailed Description

Function Documentation

◆ key() [1/3]

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

1610 {
1611  n->set_val_serialized(v);
1612 }

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

Referenced by c4::yml::NodeRef::operator<<().

◆ read() [1/3]

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

Definition at line 1615 of file node.hpp.

1616 {
1617  return read(n.m_tree, n.m_id, v);
1618 }
bool read(NodeRef const &n, T *v)
Definition: node.hpp:1621

Referenced by c4::yml::detail::RoNodeMethods< Impl, ConstImpl >::operator>>(), and c4::yml::read().

◆ read() [2/3]

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

Definition at line 1621 of file node.hpp.

1622 {
1623  return read(n.tree(), n.id(), v);
1624 }

References c4::yml::read().

◆ readkey() [1/3]

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

Definition at line 1627 of file node.hpp.

1628 {
1629  return readkey(n.m_tree, n.m_id, v);
1630 }
bool readkey(NodeRef const &n, T *v)
Definition: node.hpp:1633

Referenced by c4::yml::detail::RoNodeMethods< Impl, ConstImpl >::operator>>(), and c4::yml::readkey().

◆ readkey() [2/3]

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

Definition at line 1633 of file node.hpp.

1634 {
1635  return readkey(n.tree(), n.id(), v);
1636 }

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

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

References sample::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 1348 of file tree.hpp.

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

References sample::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 1412 of file tree.hpp.

1413 {
1414  static_assert(std::is_floating_point<T>::value, "must be floating point");
1415  C4_SUPPRESS_WARNING_GCC_CLANG_WITH_PUSH("-Wfloat-equal");
1416  if(C4_UNLIKELY(std::isnan(val)))
1417  return to_chars(buf, csubstr(".nan"));
1418  else if(C4_UNLIKELY(val == std::numeric_limits<T>::infinity()))
1419  return to_chars(buf, csubstr(".inf"));
1420  else if(C4_UNLIKELY(val == -std::numeric_limits<T>::infinity()))
1421  return to_chars(buf, csubstr("-.inf"));
1422  return to_chars(buf, val);
1423  C4_SUPPRESS_WARNING_GCC_CLANG_POP
1424 }
size_t to_chars(ryml::substr buf, vec2< T > v)

References sample::to_chars().

Referenced by c4::yml::Tree::to_arena().

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

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

References sample::from_chars().

Referenced by c4::yml::read(), and c4::yml::readkey().