81 {
82 if (!str) return false;
83
84
86 str++;
87 }
88
89 if (*str == '\0') return false;
90
91
92 if (*str == '+') {
93 str++;
94 } else if (*str == '-') {
95 return false;
96 }
97
98 if (*str ==
'\0' || !
isDigit(*str))
return false;
99
100 fl::u32 value = 0;
101 const fl::u32 max_div_10 = 429496729U;
102 const fl::u32 max_mod_10 = 5U;
103
104 while (*str &&
isDigit(*str)) {
105 fl::u32 digit = *str - '0';
106
107
108 if (value > max_div_10 || (value == max_div_10 && digit > max_mod_10)) {
109 return false;
110 }
111
112 value = value * 10 + digit;
113 str++;
114 }
115
116
117 if (*str != '\0') return false;
118
119 result = value;
120 return true;
121 }