Replace std::stoi with something that doesn't throw
@@ -78,29 +78,17 @@ static std::string itox(T i) {
return ss.str();
}
-static bool try_stoi(int& val, const std::string& str, std::size_t* pos = 0, int base = 10)
+static bool try_stoi(int& val, const std::string& str)
{
- try {
- val = std::stoi(str, pos, base);
+ if (sscanf(str.c_str(), "%d", &val) == 1)
return true;
- } catch (std::invalid_argument& e) {
-#ifndef NDEBUG
- std::cerr << __func__ << ": invalid argument: '" << str << "'" << std::endl;
-#endif
- }
return false;
}
-static bool try_stoull(unsigned long long& val, const std::string& str, std::size_t* pos = 0, int base = 10)
+static bool try_stoull(unsigned long long& val, const std::string& str)
{
- try {
- val = std::stoull(str, pos, base);
+ if (sscanf(str.c_str(), "%llu", &val) == 1)
return true;
- } catch (std::invalid_argument& e) {
-#ifndef NDEBUG
- std::cerr << __func__ << ": invalid argument: '" << str << "'" << std::endl;
-#endif
- }
return false;
}
