cellL10n: Use string_view

This commit is contained in:
Megamouse 2025-02-02 19:45:23 +01:00
parent 770b2ab26d
commit 666bbeba6e

View file

@ -158,41 +158,36 @@ bool _L10nCodeParse(s32 code, HostCode& retCode)
#ifdef _WIN32 #ifdef _WIN32
// Use code page to transform std::string to std::wstring. // Use code page to transform std::string to std::wstring.
s32 _OEM2Wide(HostCode oem_code, const std::string& src, std::wstring& dst) s32 _OEM2Wide(HostCode oem_code, std::string_view src, std::wstring& dst)
{ {
//Such length returned should include the '\0' character. // Such length returned should include the '\0' character.
const s32 length = MultiByteToWideChar(oem_code, 0, src.c_str(), -1, nullptr, 0); const s32 length = MultiByteToWideChar(oem_code, 0, src.data(), -1, nullptr, 0);
wchar_t *store = new wchar_t[length](); std::vector<wchar_t> store(length);
MultiByteToWideChar(oem_code, 0, src.c_str(), -1, static_cast<LPWSTR>(store), length); MultiByteToWideChar(oem_code, 0, src.data(), -1, static_cast<LPWSTR>(store.data()), length);
dst = std::wstring(store); dst = std::wstring(store.data());
delete[] store;
store = nullptr;
return length - 1; return length - 1;
} }
// Use Code page to transform std::wstring to std::string. // Use Code page to transform std::wstring to std::string.
s32 _Wide2OEM(HostCode oem_code, const std::wstring& src, std::string& dst) s32 _Wide2OEM(HostCode oem_code, std::wstring_view src, std::string& dst)
{ {
//Such length returned should include the '\0' character. //Such length returned should include the '\0' character.
const s32 length = WideCharToMultiByte(oem_code, 0, src.c_str(), -1, nullptr, 0, nullptr, nullptr); const s32 length = WideCharToMultiByte(oem_code, 0, src.data(), -1, nullptr, 0, nullptr, nullptr);
char *store = new char[length](); std::vector<char> store(length);
WideCharToMultiByte(oem_code, 0, src.c_str(), -1, store, length, nullptr, nullptr); WideCharToMultiByte(oem_code, 0, src.data(), -1, store.data(), length, nullptr, nullptr);
dst = std::string(store); dst = std::string(store.data());
delete[] store;
store = nullptr;
return length - 1; return length - 1;
} }
// Convert Codepage to Codepage (all char*) // Convert Codepage to Codepage (all char*)
std::string _OemToOem(HostCode src_code, HostCode dst_code, const std::string& str) std::string _OemToOem(HostCode src_code, HostCode dst_code, std::string_view str)
{ {
std::wstring wide; std::string result; std::wstring wide;
std::string result;
_OEM2Wide(src_code, str, wide); _OEM2Wide(src_code, str, wide);
_Wide2OEM(dst_code, wide, result); _Wide2OEM(dst_code, wide, result);
return result; return result;
@ -203,21 +198,23 @@ std::string _OemToOem(HostCode src_code, HostCode dst_code, const std::string& s
s32 _ConvertStr(s32 src_code, const void *src, s32 src_len, s32 dst_code, void *dst, s32 *dst_len, [[maybe_unused]] bool allowIncomplete) s32 _ConvertStr(s32 src_code, const void *src, s32 src_len, s32 dst_code, void *dst, s32 *dst_len, [[maybe_unused]] bool allowIncomplete)
{ {
HostCode srcCode = 0, dstCode = 0; //OEM code pages HostCode srcCode = 0, dstCode = 0; //OEM code pages
bool src_page_converted = _L10nCodeParse(src_code, srcCode); //Check if code is in list. const bool src_page_converted = _L10nCodeParse(src_code, srcCode); //Check if code is in list.
bool dst_page_converted = _L10nCodeParse(dst_code, dstCode); const bool dst_page_converted = _L10nCodeParse(dst_code, dstCode);
if (((!src_page_converted) && (srcCode == 0)) if (((!src_page_converted) && (srcCode == 0)) ||
|| ((!dst_page_converted) && (dstCode == 0))) ((!dst_page_converted) && (dstCode == 0)))
{
return ConverterUnknown; return ConverterUnknown;
}
#ifdef _WIN32 #ifdef _WIN32
const std::string wrapped_source = std::string(static_cast<const char *>(src), src_len); const std::string_view wrapped_source = std::string_view(static_cast<const char *>(src), src_len);
const std::string target = _OemToOem(srcCode, dstCode, wrapped_source); const std::string target = _OemToOem(srcCode, dstCode, wrapped_source);
if (dst) if (dst)
{ {
if (target.length() > static_cast<usz>(*dst_len)) return DSTExhausted; if (target.length() > static_cast<usz>(*dst_len)) return DSTExhausted;
memcpy(dst, target.c_str(), target.length()); std::memcpy(dst, target.c_str(), target.length());
} }
*dst_len = ::narrow<s32>(target.size()); *dst_len = ::narrow<s32>(target.size());
@ -292,13 +289,6 @@ s32 _L10nConvertChar(s32 src_code, const void *src, u32 src_len, s32 dst_code, v
return result; return result;
} }
s32 _L10nConvertCharNoResult(s32 src_code, const void *src, s32 src_len, s32 dst_code, vm::ptr<void> dst)
{
s32 dstLen = 0x7FFFFFFF;
[[maybe_unused]] s32 result = _ConvertStr(src_code, src, src_len, dst_code, dst.get_ptr(), &dstLen, true);
return dstLen;
}
s32 UCS2toEUCJP() s32 UCS2toEUCJP()
{ {
cellL10n.todo("UCS2toEUCJP()"); cellL10n.todo("UCS2toEUCJP()");