11 #include "fast_float.h"
18 const char *start =
buffer.begin();
19 const char *end =
buffer.end();
21 const char *
ptr = start;
43 char *backslash = std::find(p, end,
'\\');
52 if (p < end && *p ==
'\n') {
75 static const char *
drop_plus(
const char *p,
const char *end)
77 if (p < end && *p ==
'+') {
88 bool require_trailing_space)
94 fast_float::from_chars_result res = fast_float::from_chars(p, end, dst);
95 if (res.ec == std::errc::invalid_argument || res.ec == std::errc::result_out_of_range) {
98 else if (require_trailing_space && res.ptr < end && !
is_whitespace(*res.ptr)) {
111 bool require_trailing_space)
113 for (
int i = 0; i <
count; ++i) {
114 p =
parse_float(p, end, fallback, dst[i],
true, require_trailing_space);
119 const char *
parse_int(
const char *p,
const char *end,
int fallback,
int &dst,
bool skip_space)
125 std::from_chars_result res = std::from_chars(p, end, dst);
126 if (res.ec == std::errc::invalid_argument || res.ec == std::errc::result_out_of_range) {
ccl_global float * buffer
static bool is_whitespace(char c)
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)
static const char * drop_plus(const char *p, const char *end)
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)