25 {
26 if (!str) return false;
27
28
30 str++;
31 }
32
33 if (*str == '\0') return false;
34
35 bool negative = false;
36 if (*str == '-') {
37 negative = true;
38 str++;
39 } else if (*str == '+') {
40 str++;
41 }
42
43 if (*str ==
'\0' || !
isDigit(*str))
return false;
44
46 const fl::u32 max_div_10 = 214748364U;
47 const fl::u32 max_mod_10 = 7U;
48 const fl::u32 max_neg_div_10 = 214748364U;
49 const fl::u32 max_neg_mod_10 = 8U;
50
52 fl::u32 digit = *str - '0';
53
54
55 if (negative) {
56 if (
value > max_neg_div_10 || (
value == max_neg_div_10 && digit > max_neg_mod_10)) {
57 return false;
58 }
59 } else {
60 if (
value > max_div_10 || (
value == max_div_10 && digit > max_mod_10)) {
61 return false;
62 }
63 }
64
66 str++;
67 }
68
69
70 if (*str != '\0') return false;
71
72 if (negative) {
74 } else {
76 }
77
78 return true;
79 }
bool isDigit(char c) FL_NO_EXCEPT
bool isSpace(char c) FL_NO_EXCEPT
constexpr int type_rank< T >::value
expected< T, E > result
Alias for expected (Rust-style naming)