diff options
Diffstat (limited to 'src/base')
-rw-r--r-- | src/base/StringUtil.cpp | 21 | ||||
-rw-r--r-- | src/base/log/StdioLogTarget.cpp | 11 | ||||
-rw-r--r-- | src/base/platform/win/DebugLogTarget.cpp | 4 | ||||
-rw-r--r-- | src/base/platform/win/Exception.cpp | 25 | ||||
-rw-r--r-- | src/base/platform/win/Win32FileStream.cpp | 6 |
5 files changed, 42 insertions, 25 deletions
diff --git a/src/base/StringUtil.cpp b/src/base/StringUtil.cpp index 4cd662d1..5c8686dd 100644 --- a/src/base/StringUtil.cpp +++ b/src/base/StringUtil.cpp @@ -404,4 +404,25 @@ Index Utf16IndexCodePointToCodeUnit(const Utf16CodeUnit* ptr, Index size, position); } +#ifdef _WIN32 +std::wstring ToUtf16(std::string_view str) { + Utf8CodePointIterator iter(str.data(),str.size()); + std::wstring result; + for (auto c : iter) { + Utf16EncodeCodePointAppend(c, [&result](char16_t c) { result += c; }); + } + return result; +} + +std::string ToUtf8(std::wstring_view str) { + Utf16CodePointIterator iter(reinterpret_cast<const char16_t*>( str.data()),str.size()); + std::string result; + for (auto c : iter) { + Utf8EncodeCodePointAppend(c, [&result](char c) { result += c; }); + } + return result; +} + +#endif + } // namespace cru::string diff --git a/src/base/log/StdioLogTarget.cpp b/src/base/log/StdioLogTarget.cpp index 03d2d76e..34813426 100644 --- a/src/base/log/StdioLogTarget.cpp +++ b/src/base/log/StdioLogTarget.cpp @@ -1,10 +1,7 @@ #include "cru/base/log/StdioLogTarget.h" -#ifdef _WIN32 -#include "cru/base/String.h" -#endif - #include <iostream> +#include "cru/base/StringUtil.h" namespace cru::log { StdioLogTarget::StdioLogTarget() {} @@ -13,11 +10,11 @@ StdioLogTarget::~StdioLogTarget() {} void StdioLogTarget::Write(log::LogLevel level, std::string message) { #ifdef CRU_PLATFORM_WINDOWS - String s = String::FromUtf8(message); + auto s = string::ToUtf16(message); if (level == log::LogLevel::Error) { - std::wcerr.write(reinterpret_cast<const wchar_t*>(s.data()), s.size()); + std::wcerr << s << std::endl; } else { - std::wcout.write(reinterpret_cast<const wchar_t*>(s.data()), s.size()); + std::wcout << s << std::endl; } #else if (level == log::LogLevel::Error) { diff --git a/src/base/platform/win/DebugLogTarget.cpp b/src/base/platform/win/DebugLogTarget.cpp index afbab620..3b73b332 100644 --- a/src/base/platform/win/DebugLogTarget.cpp +++ b/src/base/platform/win/DebugLogTarget.cpp @@ -1,12 +1,12 @@ #include "cru/base/platform/win/DebugLogTarget.h" -#include "cru/base/String.h" +#include "cru/base/StringUtil.h" namespace cru::platform::win { void WinDebugLogTarget::Write(::cru::log::LogLevel level, std::string s) { CRU_UNUSED(level) - String m = String::FromUtf8(s); + std::wstring m = string::ToUtf16(s); ::OutputDebugStringW(reinterpret_cast<const wchar_t*>(m.c_str())); } } // namespace cru::platform::win diff --git a/src/base/platform/win/Exception.cpp b/src/base/platform/win/Exception.cpp index 941875f7..adc59e3c 100644 --- a/src/base/platform/win/Exception.cpp +++ b/src/base/platform/win/Exception.cpp @@ -1,16 +1,16 @@ #include "cru/base/platform/win/Exception.h" -#include "cru/base/Format.h" +#include <format> #include <optional> namespace cru::platform::win { -inline String HResultMakeMessage(HRESULT h_result, - std::optional<String> message) { +inline std::string HResultMakeMessage(HRESULT h_result, + std::optional<std::string_view> message) { if (message.has_value()) - return Format(u"HRESULT: {}. Message: {}", h_result, message->WinCStr()); + return std::format("HRESULT: {}. Message: {}", h_result, *message); else - return Format(u"HRESULT: {}.", h_result); + return std::format("HRESULT: {}.", h_result); } HResultError::HResultError(HRESULT h_result) @@ -19,20 +19,19 @@ HResultError::HResultError(HRESULT h_result) HResultError::HResultError(HRESULT h_result, std::string_view additional_message) - : Exception(HResultMakeMessage( - h_result, String::FromUtf8(additional_message.data(), - additional_message.size()))), + : Exception(HResultMakeMessage(h_result, additional_message)), h_result_(h_result) {} -inline String Win32MakeMessage(DWORD error_code, String message) { - return Format(u"Last error code: {}.\nMessage: {}\n", error_code, - message.WinCStr()); +inline std::string Win32MakeMessage(DWORD error_code, + std::string_view message) { + return std::format("Last error code: {}.\nMessage: {}\n", error_code, + message); } -Win32Error::Win32Error(String message) +Win32Error::Win32Error(std::string_view message) : Win32Error(::GetLastError(), message) {} -Win32Error::Win32Error(DWORD error_code, String message) +Win32Error::Win32Error(DWORD error_code, std::string_view message) : Exception(Win32MakeMessage(error_code, message)), error_code_(error_code) {} } // namespace cru::platform::win diff --git a/src/base/platform/win/Win32FileStream.cpp b/src/base/platform/win/Win32FileStream.cpp index 341fe9d3..618ce386 100644 --- a/src/base/platform/win/Win32FileStream.cpp +++ b/src/base/platform/win/Win32FileStream.cpp @@ -1,6 +1,7 @@ #include "cru/base/platform/win/Win32FileStream.h" #include "Win32FileStreamPrivate.h" +#include "cru/base/StringUtil.h" #include "cru/base/io/OpenFileFlag.h" #include "cru/base/platform/win/Exception.h" @@ -8,12 +9,11 @@ #include <coml2api.h> #include <shlwapi.h> #include <winnt.h> -#include <filesystem> namespace cru::platform::win { using namespace cru::io; -Win32FileStream::Win32FileStream(String path, OpenFileFlag flags) +Win32FileStream::Win32FileStream(std::string path, OpenFileFlag flags) : Stream(true, true, true), path_(std::move(path)), flags_(flags), @@ -40,7 +40,7 @@ Win32FileStream::Win32FileStream(String path, OpenFileFlag flags) IStream* stream; ThrowIfFailed(SHCreateStreamOnFileEx( - path_.WinCStr(), grfMode, FILE_ATTRIBUTE_NORMAL, + cru::string::ToUtf16(path_).c_str(), grfMode, FILE_ATTRIBUTE_NORMAL, flags & io::OpenFileFlags::Create ? TRUE : FALSE, NULL, &stream)); p_->stream_ = stream; |