diff options
| author | Alexander Karatarakis <alkarata@microsoft.com> | 2016-09-18 20:50:08 -0700 |
|---|---|---|
| committer | Alexander Karatarakis <alkarata@microsoft.com> | 2016-09-18 20:54:03 -0700 |
| commit | ccca198c1b1730b0241911cb56dc8e3504958b2a (patch) | |
| tree | a2dd9b8b087a09afdcecc5cbb3377bed15127eb2 /toolsrc/src/vcpkg_Strings.cpp | |
| download | vcpkg-ccca198c1b1730b0241911cb56dc8e3504958b2a.tar.gz vcpkg-ccca198c1b1730b0241911cb56dc8e3504958b2a.zip | |
Initial commit
Diffstat (limited to 'toolsrc/src/vcpkg_Strings.cpp')
| -rw-r--r-- | toolsrc/src/vcpkg_Strings.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/toolsrc/src/vcpkg_Strings.cpp b/toolsrc/src/vcpkg_Strings.cpp new file mode 100644 index 000000000..b0312536a --- /dev/null +++ b/toolsrc/src/vcpkg_Strings.cpp @@ -0,0 +1,60 @@ +#include "vcpkg_Strings.h" + +#include <cstdarg> +#include <algorithm> +#include <codecvt> +#include <iterator> + +namespace vcpkg {namespace Strings {namespace details +{ + std::string format_internal(const char* fmtstr, ...) + { + va_list lst; + va_start(lst, fmtstr); + + auto sz = _vscprintf(fmtstr, lst); + std::string output(sz, '\0'); + _vsnprintf_s(&output[0], output.size() + 1, output.size() + 1, fmtstr, lst); + va_end(lst); + + return output; + } + + std::wstring format_internal(const wchar_t* fmtstr, ...) + { + va_list lst; + va_start(lst, fmtstr); + + auto sz = _vscwprintf(fmtstr, lst); + std::wstring output(sz, '\0'); + _vsnwprintf_s(&output[0], output.size() + 1, output.size() + 1, fmtstr, lst); + va_end(lst); + + return output; + } +}}} + +namespace vcpkg {namespace Strings +{ + std::wstring utf8_to_utf16(const std::string& s) + { + std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> conversion; + return conversion.from_bytes(s); + } + + std::string utf16_to_utf8(const std::wstring& w) + { + std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> conversion; + return conversion.to_bytes(w); + } + + std::string::const_iterator case_insensitive_find(const std::string& s, const std::string& pattern) + { + std::string patter_as_lower_case; + std::transform(pattern.begin(), pattern.end(), back_inserter(patter_as_lower_case), tolower); + return search(s.begin(), s.end(), patter_as_lower_case.begin(), patter_as_lower_case.end(), [](const char a, const char b) + { + return (tolower(a) == b); + }); + } +}} |
