aboutsummaryrefslogtreecommitdiff
path: root/src/base
diff options
context:
space:
mode:
Diffstat (limited to 'src/base')
-rw-r--r--src/base/StringUtil.cpp21
-rw-r--r--src/base/log/StdioLogTarget.cpp11
-rw-r--r--src/base/platform/win/DebugLogTarget.cpp4
-rw-r--r--src/base/platform/win/Exception.cpp25
-rw-r--r--src/base/platform/win/Win32FileStream.cpp6
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;