rapidyaml  0.8.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 1608 of file node.hpp.

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

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

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

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

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

References c4::yml::read().

◆ readkey() [1/3]

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

Definition at line 1626 of file node.hpp.

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

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

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

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

1346 {
1347  return C4_LIKELY(!(tree->type(id) & VALNIL)) ? from_chars(tree->val(id), v) : false;
1348 }
@ 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 1355 of file tree.hpp.

1357 {
1358  return C4_LIKELY(!(tree->type(id) & KEYNIL)) ? from_chars(tree->key(id), v) : false;
1359 }
@ 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 1419 of file tree.hpp.

1420 {
1421  static_assert(std::is_floating_point<T>::value, "must be floating point");
1422  C4_SUPPRESS_WARNING_GCC_CLANG_WITH_PUSH("-Wfloat-equal");
1423  if(C4_UNLIKELY(std::isnan(val)))
1424  return to_chars(buf, csubstr(".nan"));
1425  else if(C4_UNLIKELY(val == std::numeric_limits<T>::infinity()))
1426  return to_chars(buf, csubstr(".inf"));
1427  else if(C4_UNLIKELY(val == -std::numeric_limits<T>::infinity()))
1428  return to_chars(buf, csubstr("-.inf"));
1429  return to_chars(buf, val);
1430  C4_SUPPRESS_WARNING_GCC_CLANG_POP
1431 }
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 1437 of file tree.hpp.

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

References sample::from_chars().

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