aboutsummaryrefslogtreecommitdiff
path: root/src/utils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils.cpp')
-rw-r--r--src/utils.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/utils.cpp b/src/utils.cpp
new file mode 100644
index 0000000..30ff4ec
--- /dev/null
+++ b/src/utils.cpp
@@ -0,0 +1,34 @@
+#include "utils.hpp"
+#include <climits>
+#include <stdexcept>
+
+unsigned int str_to_uint(std::string str)
+{
+ if (str.at(0) == '-')
+ throw "Less than 0";
+
+ std::size_t waste_pos;
+
+ unsigned long num;
+
+ try
+ {
+ num = std::stoul(str, &waste_pos, 10);
+ }
+ catch (const std::invalid_argument &exc)
+ {
+ throw "Not a number";
+ }
+ catch (const std::out_of_range &exc)
+ {
+ throw "Out of range";
+ }
+
+ if (waste_pos != str.length())
+ throw "Not a number";
+
+ if (num > (unsigned long)UINT_MAX)
+ throw "Out of range";
+
+ return (unsigned int)num;
+}