aboutsummaryrefslogtreecommitdiff
path: root/src/conversion.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/conversion.cpp')
-rw-r--r--src/conversion.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/conversion.cpp b/src/conversion.cpp
new file mode 100644
index 0000000..b8fb942
--- /dev/null
+++ b/src/conversion.cpp
@@ -0,0 +1,41 @@
+#include "conversion.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 = 0;
+
+ uint64_t num = 0;
+
+ try
+ {
+ num = std::stoul(str, &waste_pos, NUMBER_BASE);
+ }
+ 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 > UINT_MAX)
+ {
+ throw "Out of range";
+ }
+
+ return static_cast<unsigned int>(num);
+}