rapidyaml  0.10.0
parse and emit YAML, and do it fast
from_chars: generalized chars to value

Read a value from the string, which must be trimmed to the value (ie, no leading/trailing whitespace). More...

Modules

 from_chars_first: generalized chars to value
 Read the first valid sequence of characters from the string, skipping leading whitespace, and convert it using from_chars: generalized chars to value .
 

Functions

bool c4::from_chars (csubstr buf, uint8_t *v) noexcept
 
bool c4::from_chars (csubstr buf, uint16_t *v) noexcept
 
bool c4::from_chars (csubstr buf, uint32_t *v) noexcept
 
bool c4::from_chars (csubstr buf, uint64_t *v) noexcept
 
bool c4::from_chars (csubstr buf, int8_t *v) noexcept
 
bool c4::from_chars (csubstr buf, int16_t *v) noexcept
 
bool c4::from_chars (csubstr buf, int32_t *v) noexcept
 
bool c4::from_chars (csubstr buf, int64_t *v) noexcept
 
bool c4::from_chars (csubstr buf, float *v) noexcept
 
bool c4::from_chars (csubstr buf, double *v) noexcept
 
template<class T >
auto c4::from_chars (csubstr buf, T *v) noexcept -> bool ::type
 
template<class T >
bool c4::from_chars (csubstr buf, T **v) noexcept
 
bool c4::from_chars (csubstr buf, bool *v) noexcept
 
bool c4::from_chars (csubstr buf, char *v) noexcept
 extract a single character from a substring More...
 
bool c4::from_chars (csubstr buf, csubstr *v) noexcept
 
bool c4::from_chars (csubstr buf, substr *v) noexcept
 
template<class T >
bool c4::from_chars (csubstr s, fmt::overflow_checked_< T > wrapper)
 read an integer type, detecting overflow (returns false on overflow) More...
 
template<class T >
bool c4::from_chars (csubstr s, fmt::overflow_checked_< T > *wrapper)
 read an integer type, detecting overflow (returns false on overflow) More...
 
bool c4::from_chars (csubstr buf, fmt::raw_wrapper *r)
 read a variable in raw binary format, using memcpy More...
 
bool c4::from_chars (csubstr buf, fmt::raw_wrapper r)
 read a variable in raw binary format, using memcpy More...
 
size_t c4::from_chars (csubstr buf, fmt::base64_wrapper *b)
 read a variable in base64 format More...
 

Detailed Description

Read a value from the string, which must be trimmed to the value (ie, no leading/trailing whitespace).

return true if the conversion succeeded. There is no check for overflow; the value wraps around in a way similar to the standard C/C++ overflow behavior. For example, from_chars<int8_t>("128", &val) returns true and val will be set tot 0. See overflows: does a number string overflow a type and Check read for overflow for facilities enforcing no-overflow.

Dispatches to the most appropriate and efficient conversion function

See also
from_chars_first: generalized chars to value, atou, atoi, atof, atod

Function Documentation

◆ from_chars() [1/21]

bool c4::from_chars ( csubstr  buf,
uint8_t *  v 
)
inlinenoexcept

Definition at line 2363 of file charconv.hpp.

2363 { return atou(buf, v); }
bool atou(csubstr str, T *v) noexcept
Convert a trimmed string to an unsigned integral value.
Definition: charconv.hpp:1547

References c4::atou().

Referenced by c4::yml::detail::RoNodeMethods< Impl, ConstImpl >::deserialize_key(), c4::yml::detail::RoNodeMethods< Impl, ConstImpl >::deserialize_val(), c4::from_chars(), and c4::from_chars_first().

◆ from_chars() [2/21]

bool c4::from_chars ( csubstr  buf,
uint16_t *  v 
)
inlinenoexcept

Definition at line 2364 of file charconv.hpp.

2364 { return atou(buf, v); }

References c4::atou().

◆ from_chars() [3/21]

bool c4::from_chars ( csubstr  buf,
uint32_t *  v 
)
inlinenoexcept

Definition at line 2365 of file charconv.hpp.

2365 { return atou(buf, v); }

References c4::atou().

◆ from_chars() [4/21]

bool c4::from_chars ( csubstr  buf,
uint64_t *  v 
)
inlinenoexcept

Definition at line 2366 of file charconv.hpp.

2366 { return atou(buf, v); }

References c4::atou().

◆ from_chars() [5/21]

bool c4::from_chars ( csubstr  buf,
int8_t *  v 
)
inlinenoexcept

Definition at line 2367 of file charconv.hpp.

2367 { return atoi(buf, v); }
bool atoi(csubstr str, T *v) noexcept
Convert a trimmed string to a signed integral value.
Definition: charconv.hpp:1454

References c4::atoi().

◆ from_chars() [6/21]

bool c4::from_chars ( csubstr  buf,
int16_t *  v 
)
inlinenoexcept

Definition at line 2368 of file charconv.hpp.

2368 { return atoi(buf, v); }

References c4::atoi().

◆ from_chars() [7/21]

bool c4::from_chars ( csubstr  buf,
int32_t *  v 
)
inlinenoexcept

Definition at line 2369 of file charconv.hpp.

2369 { return atoi(buf, v); }

References c4::atoi().

◆ from_chars() [8/21]

bool c4::from_chars ( csubstr  buf,
int64_t *  v 
)
inlinenoexcept

Definition at line 2370 of file charconv.hpp.

2370 { return atoi(buf, v); }

References c4::atoi().

◆ from_chars() [9/21]

bool c4::from_chars ( csubstr  buf,
float *  v 
)
inlinenoexcept

Definition at line 2371 of file charconv.hpp.

2371 { return atof(buf, v); }
bool atof(csubstr str, float *v) noexcept
Convert a string to a single precision real number.
Definition: charconv.hpp:2111

References c4::atof().

◆ from_chars() [10/21]

bool c4::from_chars ( csubstr  buf,
double *  v 
)
inlinenoexcept

Definition at line 2372 of file charconv.hpp.

2372 { return atod(buf, v); }
bool atod(csubstr str, double *v) noexcept
Convert a string to a double precision real number.
Definition: charconv.hpp:2172

References c4::atod().

◆ from_chars() [11/21]

template<class T >
auto c4::from_chars ( csubstr  buf,
T *  v 
) -> bool ::type
inlinenoexcept

Definition at line 2374 of file charconv.hpp.

2374 { return atoi(buf, v); }

◆ from_chars() [12/21]

template<class T >
bool c4::from_chars ( csubstr  buf,
T **  v 
)
inlinenoexcept

Definition at line 2377 of file charconv.hpp.

2377 { intptr_t tmp; bool ret = from_chars(buf, &tmp); if(ret) { *v = (T*)tmp; } return ret; }
bool from_chars(csubstr buf, substr *v) noexcept
Definition: charconv.hpp:2596

References c4::from_chars().

◆ from_chars() [13/21]

bool c4::from_chars ( csubstr  buf,
bool *  v 
)
inlinenoexcept

Definition at line 2446 of file charconv.hpp.

2447 {
2448  if(buf == '0')
2449  {
2450  *v = false; return true;
2451  }
2452  else if(buf == '1')
2453  {
2454  *v = true; return true;
2455  }
2456  else if(buf == "false")
2457  {
2458  *v = false; return true;
2459  }
2460  else if(buf == "true")
2461  {
2462  *v = true; return true;
2463  }
2464  else if(buf == "False")
2465  {
2466  *v = false; return true;
2467  }
2468  else if(buf == "True")
2469  {
2470  *v = true; return true;
2471  }
2472  else if(buf == "FALSE")
2473  {
2474  *v = false; return true;
2475  }
2476  else if(buf == "TRUE")
2477  {
2478  *v = true; return true;
2479  }
2480  // fallback to c-style int bools
2481  int val = 0;
2482  bool ret = from_chars(buf, &val);
2483  if(C4_LIKELY(ret))
2484  {
2485  *v = (val != 0);
2486  }
2487  return ret;
2488 }

References c4::from_chars().

◆ from_chars() [14/21]

bool c4::from_chars ( csubstr  buf,
char *  v 
)
inlinenoexcept

extract a single character from a substring

Note
to extract a string instead and not just a single character, use the csubstr overload

Definition at line 2518 of file charconv.hpp.

2519 {
2520  if(buf.len != 1)
2521  return false;
2522  C4_XASSERT(buf.str);
2523  *v = buf.str[0];
2524  return true;
2525 }

◆ from_chars() [15/21]

bool c4::from_chars ( csubstr  buf,
csubstr *  v 
)
inlinenoexcept

Definition at line 2558 of file charconv.hpp.

2559 {
2560  *v = buf;
2561  return true;
2562 }

◆ from_chars() [16/21]

bool c4::from_chars ( csubstr  buf,
substr *  v 
)
inlinenoexcept

Definition at line 2596 of file charconv.hpp.

2597 {
2598  C4_ASSERT(!buf.overlaps(*v));
2599  // is the destination buffer wide enough?
2600  if(v->len >= buf.len)
2601  {
2602  // calling memcpy with null strings is undefined behavior
2603  // and will wreak havoc in calling code's branches.
2604  // see https://github.com/biojppm/rapidyaml/pull/264#issuecomment-1262133637
2605  if(buf.len)
2606  {
2607  C4_ASSERT(buf.str != nullptr);
2608  C4_ASSERT(v->str != nullptr);
2609  memcpy(v->str, buf.str, buf.len);
2610  }
2611  v->len = buf.len;
2612  return true;
2613  }
2614  return false;
2615 }

Referenced by c4::atod(), c4::atof(), c4::from_chars(), and c4::from_chars_first().

◆ from_chars() [17/21]

template<class T >
bool c4::from_chars ( csubstr  s,
fmt::overflow_checked_< T >  wrapper 
)
inline

read an integer type, detecting overflow (returns false on overflow)

Definition at line 330 of file format.hpp.

331 {
332  if(C4_LIKELY(!overflows<T>(s)))
333  return atox(s, wrapper.val);
334  return false;
335 }
bool atox(csubstr s, uint8_t *v) noexcept
Definition: charconv.hpp:2288

References c4::atox(), and c4::fmt::overflow_checked_< T >::val.

◆ from_chars() [18/21]

template<class T >
bool c4::from_chars ( csubstr  s,
fmt::overflow_checked_< T > *  wrapper 
)
inline

read an integer type, detecting overflow (returns false on overflow)

Definition at line 339 of file format.hpp.

340 {
341  if(C4_LIKELY(!overflows<T>(s)))
342  return atox(s, wrapper->val);
343  return false;
344 }

References c4::atox(), and c4::fmt::overflow_checked_< T >::val.

◆ from_chars() [19/21]

bool c4::from_chars ( csubstr  buf,
fmt::raw_wrapper r 
)

read a variable in raw binary format, using memcpy

◆ from_chars() [20/21]

bool c4::from_chars ( csubstr  buf,
fmt::raw_wrapper  r 
)
inline

read a variable in raw binary format, using memcpy

Definition at line 473 of file format.hpp.

474 {
475  return from_chars(buf, &r);
476 }
bool from_chars(csubstr buf, fmt::raw_wrapper r)
read a variable in raw binary format, using memcpy
Definition: format.hpp:473

References c4::from_chars().

◆ from_chars() [21/21]

size_t c4::from_chars ( csubstr  buf,
fmt::base64_wrapper b 
)
inline

read a variable in base64 format

Definition at line 134 of file base64.hpp.

135 {
136  return base64_decode(buf, b->data);
137 }
size_t base64_decode(csubstr encoded, blob data)
decode the base64 encoding in the given buffer

References c4::base64_decode(), and c4::fmt::base64_wrapper_< CharOrConstChar >::data.