diff --git a/src/Services/StringService.cpp b/src/Services/StringService.cpp index 3072d9e2..a0385d69 100644 --- a/src/Services/StringService.cpp +++ b/src/Services/StringService.cpp @@ -4,6 +4,7 @@ #include #include #include +#include namespace Services { @@ -70,4 +71,33 @@ namespace Services return stream.str(); } + + std::uint64_t StringService::toUint64(const std::string& str) { + return static_cast(std::stoul(str, nullptr, 0)); + } + + std::uint32_t StringService::toUint32(const std::string& str) { + return static_cast(StringService::toUint64(str)); + } + + std::uint16_t StringService::toUint16(const std::string& str) { + return static_cast(StringService::toUint64(str)); + } + + std::uint8_t StringService::toUint8(const std::string& str) { + return static_cast(StringService::toUint64(str)); + } + + std::vector StringService::split(std::string_view str, char delimiter) { + auto range = str | + std::ranges::views::split(delimiter) | + std::ranges::views::transform([](auto&& subRange) -> std::string_view { + return std::string_view( + subRange.begin(), + static_cast(std::ranges::distance(subRange)) + ); + }); + + return {std::ranges::begin(range), std::ranges::end(range)}; + } } diff --git a/src/Services/StringService.hpp b/src/Services/StringService.hpp index 9c3b5ffb..9e17b6fa 100644 --- a/src/Services/StringService.hpp +++ b/src/Services/StringService.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include @@ -20,5 +21,12 @@ namespace Services static std::string toHex(unsigned char value); static std::string toHex(const std::vector& data); static std::string toHex(const std::string& data); + + static std::uint64_t toUint64(const std::string& str); + static std::uint32_t toUint32(const std::string& str); + static std::uint16_t toUint16(const std::string& str); + static std::uint8_t toUint8(const std::string& str); + + static std::vector split(std::string_view str, char delimiter); }; }