From 68c45ee5bb9c998923f7a8ce7857128803dbe93a Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Mon, 27 Sep 2021 16:44:30 +0300 Subject: add a std::u16string overload --- include/winapi/utf8.hpp | 6 ++++++ src/convert.cpp | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/include/winapi/utf8.hpp b/include/winapi/utf8.hpp index 9259df6..c6bb03a 100644 --- a/include/winapi/utf8.hpp +++ b/include/winapi/utf8.hpp @@ -17,6 +17,9 @@ namespace winapi { +/* sizeof(wchar_t) == 4 on Linux, we don't care about that. */ +static_assert(sizeof(wchar_t) == 2, "This is Windows, right?"); + /** Convert UTF-8 string to UTF-16. */ std::wstring widen(const std::string&); @@ -39,6 +42,9 @@ std::wstring widen(const std::vector& src) { /** Convert UTF-16 string to UTF-8. */ std::string narrow(const std::wstring&); +/** Convert UTF-16 string to UTF-8. */ +std::string narrow(const std::u16string&); + /** * Convert UTF-16 string to UTF-8. * \param src Memory address of a UTF-16 string. diff --git a/src/convert.cpp b/src/convert.cpp index bacea60..4ccc3a0 100644 --- a/src/convert.cpp +++ b/src/convert.cpp @@ -130,6 +130,10 @@ std::string narrow(const std::wstring& src) { return narrow(src.c_str(), src.size() * sizeof(std::wstring::value_type)); } +std::string narrow(const std::u16string& src) { + return narrow(src.c_str(), src.size() * sizeof(std::u16string::value_type)); +} + std::string narrow(const void* src, std::size_t in_nb) { const DWORD flags = WC_ERR_INVALID_CHARS; -- cgit v1.2.3