From 70b9cc994d084ea486b28d3e33415ba7e109bf6e Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Wed, 4 Oct 2023 15:59:37 -0400 Subject: parse floats and lists of floats --- src/helpers.cpp | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'src/helpers.cpp') diff --git a/src/helpers.cpp b/src/helpers.cpp index 796aa2e..7ae21c9 100644 --- a/src/helpers.cpp +++ b/src/helpers.cpp @@ -2,6 +2,7 @@ #include "helpers.hpp" #include +#include #include #include @@ -113,3 +114,47 @@ STR2NUM_ERROR str2num(uint16_t &i, char const *s, int base) { return SUCCESS; } +STR2NUM_ERROR str2num(float &f, char const *s, char *&pEnd) { + float l; + errno = 0; + l = strtof(s, &pEnd); + if (errno == ERANGE && l == HUGE_VALF) { + return OVERFLOW; + } + if (errno == ERANGE && l == -HUGE_VALF) { + return UNDERFLOW; + } + if (*s == '\0' || *pEnd != '\0') { + return INCONVERTIBLE; + } + f = l; + return SUCCESS; +} + +STR2NUM_ERROR str2num(float &f, char const *s) { + char *end; + return str2num(f, s, end); +} + +STR2NUM_ERROR str2num(double &d, char const *s, char *&pEnd) { + char *end; + float l; + errno = 0; + l = strtod(s, &end); + if (errno == ERANGE && l == HUGE_VAL) { + return OVERFLOW; + } + if (errno == ERANGE && l == -HUGE_VAL) { + return UNDERFLOW; + } + if (*s == '\0' || *end != '\0') { + return INCONVERTIBLE; + } + d = l; + return SUCCESS; +} + +STR2NUM_ERROR str2num(double &d, char const *s) { + char *end; + return str2num(d, s, end); +} -- cgit v1.2.3