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') {
95 const char *p,
const char *end,
int fallback,
bool &success,
float &dst,
bool skip_space)
102 fast_float::from_chars_result res = fast_float::from_chars(p, end, dst);
103 if (
ELEM(res.ec, std::errc::invalid_argument, std::errc::result_out_of_range) || res.ptr < end) {
115 const char *p,
const char *end,
int fallback,
bool &success,
int &dst,
bool skip_space)
122 std::from_chars_result res = std::from_chars(p, end, dst);
123 if (
ELEM(res.ec, std::errc::invalid_argument, std::errc::result_out_of_range) || res.ptr < end) {
134static const char *
drop_plus(
const char *p,
const char *end)
136 if (p < end && *p ==
'+') {
147 bool require_trailing_space)
153 fast_float::from_chars_result res = fast_float::from_chars(p, end, dst);
154 if (
ELEM(res.ec, std::errc::invalid_argument, std::errc::result_out_of_range)) {
157 else if (require_trailing_space && res.ptr < end && !
is_whitespace(*res.ptr)) {
170 bool require_trailing_space)
173 p =
parse_float(p, end, fallback, dst[
i],
true, require_trailing_space);
178const char *
parse_int(
const char *p,
const char *end,
int fallback,
int &dst,
bool skip_space)
184 std::from_chars_result res = std::from_chars(p, end, dst);
185 if (
ELEM(res.ec, std::errc::invalid_argument, std::errc::result_out_of_range)) {
constexpr const char * begin() const
constexpr const char * end() const
const char * parse_float(const char *p, const char *end, float fallback, float &dst, bool skip_space, bool require_trailing_space)
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)
const char * drop_non_whitespace(const char *p, const char *end)
static bool is_whitespace(char c)
StringRef read_next_line(StringRef &buffer)
const char * try_parse_int(const char *p, const char *end, int fallback, bool &success, int &dst, bool skip_space)
const char * parse_int(const char *p, const char *end, int fallback, int &dst, bool skip_space)
void fixup_line_continuations(char *p, char *end)
static const char * drop_sign(const char *p, const char *end, int &sign)
const char * drop_whitespace(const char *p, const char *end)
const char * try_parse_float(const char *p, const char *end, int fallback, bool &success, float &dst, bool skip_space)