diff --git a/src/Services/StringService.cpp b/src/Services/StringService.cpp index 05284aa8..31106e08 100644 --- a/src/Services/StringService.cpp +++ b/src/Services/StringService.cpp @@ -1,6 +1,7 @@ #include "StringService.hpp" #include +#include #include #include #include @@ -12,37 +13,46 @@ namespace Services { - std::string StringService::asciiToLower(std::string str) { - std::transform(str.begin(), str.end(), str.begin(), [] (unsigned char character) { + std::string StringService::asciiToLower(std::string_view str) { + auto output = std::string{}; + output.reserve(str.size()); + + std::transform(str.begin(), str.end(), std::back_inserter(output), [] (unsigned char character) { return std::tolower(character); }); - return str; + return output; } - std::string StringService::asciiToUpper(std::string str) { - std::transform(str.begin(), str.end(), str.begin(), [] (unsigned char character) { + std::string StringService::asciiToUpper(std::string_view str) { + auto output = std::string{}; + output.reserve(str.size()); + + std::transform(str.begin(), str.end(), std::back_inserter(output), [] (unsigned char character) { return std::toupper(character); }); - return str; + return output; } - bool StringService::isAscii(const std::string& str) { + bool StringService::isAscii(std::string_view str) { return !std::any_of(str.begin(), str.end(), [] (unsigned char character) { return character > 127; }); } - std::string StringService::replaceUnprintable(std::string str) { - std::transform(str.begin(), str.end(), str.begin(), [] (unsigned char character) { + std::string StringService::replaceUnprintable(std::string_view str) { + auto output = std::string{}; + output.reserve(str.size()); + + std::transform(str.begin(), str.end(), std::back_inserter(output), [] (unsigned char character) { return character < 32 || character > 126 ? '?' : character; }); - return str; + return output; } - bool StringService::isNumeric(const std::string& str) { + bool StringService::isNumeric(std::string_view str) { return !std::any_of(str.begin(), str.end(), [] (unsigned char character) { return std::isdigit(character); }); @@ -83,7 +93,7 @@ namespace Services return stream.str(); } - std::string StringService::toHex(const std::string& data) { + std::string StringService::toHex(std::string_view data) { auto stream = std::stringstream{}; stream << std::hex << std::setfill('0'); @@ -108,7 +118,7 @@ namespace Services return output; } - std::vector StringService::dataFromHex(const std::string& hexData) { + std::vector StringService::dataFromHex(std::string_view hexData) { auto output = std::vector{}; for (auto i = 0; i < hexData.size(); i += 2) { diff --git a/src/Services/StringService.hpp b/src/Services/StringService.hpp index 231d9872..36b21d54 100644 --- a/src/Services/StringService.hpp +++ b/src/Services/StringService.hpp @@ -12,21 +12,21 @@ namespace Services class StringService { public: - static std::string asciiToLower(std::string str); + static std::string asciiToLower(std::string_view str); - static std::string asciiToUpper(std::string str); + static std::string asciiToUpper(std::string_view str); - static bool isAscii(const std::string& str); - static std::string replaceUnprintable(std::string str); + static bool isAscii(std::string_view str); + static std::string replaceUnprintable(std::string_view str); - static bool isNumeric(const std::string& str); + static bool isNumeric(std::string_view str); static std::string toHex(std::uint64_t value); static std::string toHex(std::uint32_t value); static std::string toHex(std::uint16_t value); 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::string toHex(std::string_view data); template requires std::is_enum_v @@ -36,7 +36,7 @@ namespace Services static std::string toBinaryStringWithMask(std::uint64_t value, std::uint64_t mask); - static std::vector dataFromHex(const std::string& hexData); + static std::vector dataFromHex(std::string_view hexData); static std::uint64_t toUint64(const std::string& str, int base = 0); static std::uint32_t toUint32(const std::string& str, int base = 0);