diff options
author | HampusM <hampus@hampusmat.com> | 2022-02-15 20:27:51 +0100 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2022-02-15 20:27:51 +0100 |
commit | 5dae8f8d10d506abc3c75a1f66c1dfe620c84fc1 (patch) | |
tree | 2bfb6efef0535a35bab1da811a5f69cb5203dff9 /src/conversion.cpp | |
parent | 9147551cd21d565f9503e3ebbcd2121e284d88d5 (diff) |
refactor: improve project design
Diffstat (limited to 'src/conversion.cpp')
-rw-r--r-- | src/conversion.cpp | 41 |
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); +} |