aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/vcpkg_Strings.cpp
diff options
context:
space:
mode:
authorAlexander Karatarakis <alkarata@microsoft.com>2016-09-18 20:50:08 -0700
committerAlexander Karatarakis <alkarata@microsoft.com>2016-09-18 20:54:03 -0700
commitccca198c1b1730b0241911cb56dc8e3504958b2a (patch)
treea2dd9b8b087a09afdcecc5cbb3377bed15127eb2 /toolsrc/src/vcpkg_Strings.cpp
downloadvcpkg-ccca198c1b1730b0241911cb56dc8e3504958b2a.tar.gz
vcpkg-ccca198c1b1730b0241911cb56dc8e3504958b2a.zip
Initial commit
Diffstat (limited to 'toolsrc/src/vcpkg_Strings.cpp')
-rw-r--r--toolsrc/src/vcpkg_Strings.cpp60
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);
+ });
+ }
+}}