diff options
Diffstat (limited to 'src/3rdparty/angle/src/common/string_utils.cpp')
-rw-r--r-- | src/3rdparty/angle/src/common/string_utils.cpp | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/3rdparty/angle/src/common/string_utils.cpp b/src/3rdparty/angle/src/common/string_utils.cpp index acb0376bf9..26f384bb2a 100644 --- a/src/3rdparty/angle/src/common/string_utils.cpp +++ b/src/3rdparty/angle/src/common/string_utils.cpp @@ -9,9 +9,14 @@ #include "string_utils.h" +#include <algorithm> +#include <stdlib.h> +#include <string.h> #include <fstream> #include <sstream> +#include "common/platform.h" + namespace angle { @@ -133,4 +138,76 @@ bool ReadFileToString(const std::string &path, std::string *stringOut) return !inFile.fail(); } +Optional<std::vector<wchar_t>> WidenString(size_t length, const char *cString) +{ + std::vector<wchar_t> wcstring(length + 1); +#if !defined(ANGLE_PLATFORM_WINDOWS) + size_t written = mbstowcs(wcstring.data(), cString, length + 1); + if (written == 0) + { + return Optional<std::vector<wchar_t>>::Invalid(); + } +#else + size_t convertedChars = 0; + errno_t err = mbstowcs_s(&convertedChars, wcstring.data(), length + 1, cString, _TRUNCATE); + if (err != 0) + { + return Optional<std::vector<wchar_t>>::Invalid(); + } +#endif + return Optional<std::vector<wchar_t>>(wcstring); +} + +bool BeginsWith(const std::string &str, const std::string &prefix) +{ + return strncmp(str.c_str(), prefix.c_str(), prefix.length()) == 0; +} + +bool BeginsWith(const std::string &str, const char *prefix) +{ + return strncmp(str.c_str(), prefix, strlen(prefix)) == 0; +} + +bool BeginsWith(const char *str, const char *prefix) +{ + return strncmp(str, prefix, strlen(prefix)) == 0; +} + +bool BeginsWith(const std::string &str, const std::string &prefix, const size_t prefixLength) +{ + return strncmp(str.c_str(), prefix.c_str(), prefixLength) == 0; +} + +bool EndsWith(const std::string &str, const char *suffix) +{ + const auto len = strlen(suffix); + if (len > str.size()) + return false; + + const char *end = str.c_str() + str.size() - len; + + return memcmp(end, suffix, len) == 0; +} + +void ToLower(std::string *str) +{ + for (auto &ch : *str) + { + ch = static_cast<char>(::tolower(ch)); + } +} + +bool ReplaceSubstring(std::string *str, + const std::string &substring, + const std::string &replacement) +{ + size_t replacePos = str->find(substring); + if (replacePos == std::string::npos) + { + return false; + } + str->replace(replacePos, substring.size(), replacement); + return true; } + +} // namespace angle |