diff --git a/bee/platform/win/wtf8.h b/bee/platform/win/wtf8.h index c023304b..2191b607 100644 --- a/bee/platform/win/wtf8.h +++ b/bee/platform/win/wtf8.h @@ -1,31 +1,8 @@ #pragma once -extern "C" { -#include -} #include namespace bee::wtf8 { - inline std::wstring u2w(zstring_view str) noexcept { - if (str.empty()) { - return L""; - } - size_t wlen = wtf8_to_utf16_length(str.data(), str.size()); - if (wlen == (size_t)-1) { - return L""; - } - std::wstring wresult(wlen, L'\0'); - wtf8_to_utf16(str.data(), str.size(), wresult.data(), wlen); - return wresult; - } - - inline std::string w2u(wzstring_view wstr) noexcept { - if (wstr.empty()) { - return ""; - } - size_t len = wtf8_from_utf16_length(wstr.data(), wstr.size()); - std::string result(len, '\0'); - wtf8_from_utf16(wstr.data(), wstr.size(), result.data(), len); - return result; - } + std::wstring u2w(zstring_view str) noexcept; + std::string w2u(wzstring_view wstr) noexcept; } diff --git a/bee/platform/win/wtf8_win.cpp b/bee/platform/win/wtf8_win.cpp new file mode 100644 index 00000000..f5604660 --- /dev/null +++ b/bee/platform/win/wtf8_win.cpp @@ -0,0 +1,30 @@ +#include + +extern "C" { +#include +} + +namespace bee::wtf8 { + std::wstring u2w(zstring_view str) noexcept { + if (str.empty()) { + return L""; + } + size_t wlen = wtf8_to_utf16_length(str.data(), str.size()); + if (wlen == (size_t)-1) { + return L""; + } + std::wstring wresult(wlen, L'\0'); + wtf8_to_utf16(str.data(), str.size(), wresult.data(), wlen); + return wresult; + } + + std::string w2u(wzstring_view wstr) noexcept { + if (wstr.empty()) { + return ""; + } + size_t len = wtf8_from_utf16_length(wstr.data(), wstr.size()); + std::string result(len, '\0'); + wtf8_from_utf16(wstr.data(), wstr.size(), result.data(), len); + return result; + } +}