#include "helpers.hpp" #include #include #include STR2NUM_ERROR str2num(int64_t &i, char const *s, int base) { char *end; long long l; errno = 0; l = strtoll(s, &end, base); if (errno == ERANGE && l == LLONG_MAX) { return OVERFLOW; } if (errno == ERANGE && l == LLONG_MIN) { return UNDERFLOW; } if (*s == '\0' || *end != '\0') { return INCONVERTIBLE; } i = l; return SUCCESS; } STR2NUM_ERROR str2num(uint64_t &i, char const *s, int base) { char *end; long long l; errno = 0; l = strtoull(s, &end, base); if (errno == ERANGE && l == LLONG_MAX) { return OVERFLOW; } if (errno == ERANGE && l == LLONG_MIN) { return UNDERFLOW; } if (*s == '\0' || *end != '\0') { return INCONVERTIBLE; } i = l; return SUCCESS; } STR2NUM_ERROR str2num(int32_t &i, char const *s, int base) { char *end; long l; errno = 0; l = strtol(s, &end, base); if (errno == ERANGE && l == LONG_MAX) { return OVERFLOW; } if (errno == ERANGE && l == LONG_MIN) { return UNDERFLOW; } if (*s == '\0' || *end != '\0') { return INCONVERTIBLE; } i = l; return SUCCESS; } STR2NUM_ERROR str2num(uint32_t &i, char const *s, int base) { char *end; long l; errno = 0; l = strtoul(s, &end, base); if (errno == ERANGE && l == LONG_MAX) { return OVERFLOW; } if (errno == ERANGE && l == LONG_MIN) { return UNDERFLOW; } if (*s == '\0' || *end != '\0') { return INCONVERTIBLE; } i = l; return SUCCESS; } STR2NUM_ERROR str2num(int16_t &i, char const *s, int base) { char *end; long l; errno = 0; l = strtol(s, &end, base); if (errno == ERANGE && l == LONG_MAX) { return OVERFLOW; } if (errno == ERANGE && l == LONG_MIN) { return UNDERFLOW; } if (*s == '\0' || *end != '\0') { return INCONVERTIBLE; } i = l; return SUCCESS; } STR2NUM_ERROR str2num(uint16_t &i, char const *s, int base) { char *end; long l; errno = 0; l = strtoul(s, &end, base); if (errno == ERANGE && l == LONG_MAX) { return OVERFLOW; } if (errno == ERANGE && l == LONG_MIN) { return UNDERFLOW; } if (*s == '\0' || *end != '\0') { return INCONVERTIBLE; } i = l; return SUCCESS; }