13#include "fast_float.h"
20 const char *start = buffer.
begin();
21 const char *end = buffer.
end();
23 const char *
ptr = start;
45 char *backslash = std::find(p, end,
'\\');
46 if (backslash == end) {
56 if (p < end && *p ==
'\n') {
79static const char *
drop_plus(
const char *p,
const char *end)
81 if (p < end && *p ==
'+') {
92 bool require_trailing_space)
98 fast_float::from_chars_result res = fast_float::from_chars(p, end, dst);
99 if (
ELEM(res.ec, std::errc::invalid_argument, std::errc::result_out_of_range)) {
102 else if (require_trailing_space && res.ptr < end && !
is_whitespace(*res.ptr)) {
115 bool require_trailing_space)
117 for (
int i = 0; i <
count; ++i) {
118 p =
parse_float(p, end, fallback, dst[i],
true, require_trailing_space);
123const char *
parse_int(
const char *p,
const char *end,
int fallback,
int &dst,
bool skip_space)
129 std::from_chars_result res = std::from_chars(p, end, dst);
130 if (
ELEM(res.ec, std::errc::invalid_argument, std::errc::result_out_of_range)) {
constexpr const char * begin() const
constexpr const char * end() const
static bool is_whitespace(char c)
static const char * drop_plus(const char *p, const char *end)
const char * parse_floats(const char *p, const char *end, float fallback, float *dst, int count, bool require_trailing_space)
void fixup_line_continuations(char *p, char *end)
const char * drop_non_whitespace(const char *p, const char *end)
const char * parse_int(const char *p, const char *end, int fallback, int &dst, bool skip_space)
const char * drop_whitespace(const char *p, const char *end)
StringRef read_next_line(StringRef &buffer)
const char * parse_float(const char *p, const char *end, float fallback, float &dst, bool skip_space, bool require_trailing_space)