Avoid multiply defined s_2_ws linker error

+ use std::wstring directly without intermediate std::vector in `s_2_ws`

fixes #87
This commit is contained in:
Pavel P 2022-05-07 23:25:50 +03:00
parent 3f86a95c07
commit fd9dc4be35
2 changed files with 20 additions and 14 deletions

View File

@ -52,14 +52,17 @@ inline DWORD int64_low(int64_t n) noexcept
return n & 0xffffffff;
}
std::wstring s_2_ws(const std::string& s)
inline std::wstring s_2_ws(const std::string& s)
{
if (s.empty())
return{};
const auto s_length = static_cast<int>(s.length());
auto buf = std::vector<wchar_t>(s_length);
const auto wide_char_count = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), s_length, buf.data(), s_length);
return std::wstring(buf.data(), wide_char_count);
std::wstring ret;
if (!s.empty())
{
ret.resize(s.size());
int wide_char_count = MultiByteToWideChar(CP_UTF8, 0, s.c_str(),
static_cast<int>(s.size()), &ret[0], static_cast<int>(s.size()));
ret.resize(wide_char_count);
}
return ret;
}
template<

View File

@ -794,14 +794,17 @@ inline DWORD int64_low(int64_t n) noexcept
return n & 0xffffffff;
}
std::wstring s_2_ws(const std::string& s)
inline std::wstring s_2_ws(const std::string& s)
{
if (s.empty())
return{};
const auto s_length = static_cast<int>(s.length());
auto buf = std::vector<wchar_t>(s_length);
const auto wide_char_count = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), s_length, buf.data(), s_length);
return std::wstring(buf.data(), wide_char_count);
std::wstring ret;
if (!s.empty())
{
ret.resize(s.size());
int wide_char_count = MultiByteToWideChar(CP_UTF8, 0, s.c_str(),
static_cast<int>(s.size()), &ret[0], static_cast<int>(s.size()));
ret.resize(wide_char_count);
}
return ret;
}
template<