rapidyaml  0.13.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...
 
size_t c4::from_chars (csubstr buf, fmt::base64_wrapper const &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/22]

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

Definition at line 2368 of file charconv.hpp.

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

◆ from_chars() [2/22]

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

Definition at line 2369 of file charconv.hpp.

2369 { return atou(buf, v); }

◆ from_chars() [3/22]

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

Definition at line 2370 of file charconv.hpp.

2370 { return atou(buf, v); }

◆ from_chars() [4/22]

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

Definition at line 2371 of file charconv.hpp.

2371 { return atou(buf, v); }

◆ from_chars() [5/22]

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

Definition at line 2372 of file charconv.hpp.

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

◆ from_chars() [6/22]

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

Definition at line 2373 of file charconv.hpp.

2373 { return atoi(buf, v); }

◆ from_chars() [7/22]

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

Definition at line 2374 of file charconv.hpp.

2374 { return atoi(buf, v); }

◆ from_chars() [8/22]

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

Definition at line 2375 of file charconv.hpp.

2375 { return atoi(buf, v); }

◆ from_chars() [9/22]

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

Definition at line 2376 of file charconv.hpp.

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

◆ from_chars() [10/22]

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

Definition at line 2377 of file charconv.hpp.

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

◆ from_chars() [11/22]

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

Definition at line 2379 of file charconv.hpp.

2379 { return atoi(buf, v); }

◆ from_chars() [12/22]

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

Definition at line 2382 of file charconv.hpp.

2382 { 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:2600

◆ from_chars() [13/22]

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

Definition at line 2451 of file charconv.hpp.

2452 {
2453  if(buf.len == 1)
2454  {
2455  if(buf.str[0] == '0')
2456  {
2457  *v = false; return true;
2458  }
2459  else if(buf.str[0] == '1')
2460  {
2461  *v = true; return true;
2462  }
2463  }
2464  else if(buf.len == 4)
2465  {
2466  if(((buf.str[0] == 't') && (0 == memcmp(buf.str + 1, "rue", 3)))
2467  ||
2468  ((buf.str[0] == 'T') && ((0 == memcmp(buf.str + 1, "rue", 3) ||
2469  0 == memcmp(buf.str + 1, "RUE", 3)))))
2470  {
2471  *v = true; return true;
2472  }
2473  }
2474  else if(buf.len == 5)
2475  {
2476  if(((buf.str[0] == 'f') && (0 == memcmp(buf.str + 1, "alse", 4)))
2477  ||
2478  ((buf.str[0] == 'F') && ((0 == memcmp(buf.str + 1, "alse", 4) ||
2479  0 == memcmp(buf.str + 1, "ALSE", 4)))))
2480  {
2481  *v = false; return true;
2482  }
2483  }
2484  // fallback to c-style int bools
2485  int val = 0;
2486  bool ret = from_chars(buf, &val);
2487  if(C4_LIKELY(ret))
2488  {
2489  *v = (val != 0);
2490  }
2491  return ret;
2492 }

◆ from_chars() [14/22]

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 2522 of file charconv.hpp.

2523 {
2524  if(buf.len != 1)
2525  return false;
2526  C4_XASSERT(buf.str);
2527  *v = buf.str[0];
2528  return true;
2529 }

◆ from_chars() [15/22]

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

Definition at line 2562 of file charconv.hpp.

2563 {
2564  *v = buf;
2565  return true;
2566 }

◆ from_chars() [16/22]

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

Definition at line 2600 of file charconv.hpp.

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

◆ from_chars() [17/22]

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 326 of file format.hpp.

327 {
328  if(C4_LIKELY(!overflows<T>(s)))
329  return atox(s, wrapper.val);
330  return false;
331 }
bool atox(csubstr s, uint8_t *v) noexcept
Definition: charconv.hpp:2287

◆ from_chars() [18/22]

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 335 of file format.hpp.

336 {
337  if(C4_LIKELY(!overflows<T>(s)))
338  return atox(s, wrapper->val);
339  return false;
340 }

◆ from_chars() [19/22]

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

read a variable in raw binary format, using memcpy

◆ from_chars() [20/22]

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

read a variable in raw binary format, using memcpy

Definition at line 469 of file format.hpp.

470 {
471  return from_chars(buf, &r);
472 }
bool from_chars(csubstr buf, fmt::raw_wrapper r)
read a variable in raw binary format, using memcpy
Definition: format.hpp:469

◆ from_chars() [21/22]

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

◆ from_chars() [22/22]

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

read a variable in base64 format

Definition at line 140 of file base64.hpp.

141 {
142  return base64_decode(buf, b.data);
143 }