Use string_view

This commit is contained in:
LAGonauta 2021-02-22 06:18:53 -03:00
parent ca0cab0e36
commit 13e0a5c0c4
6 changed files with 20 additions and 31 deletions

View file

@ -1,7 +1,7 @@
#pragma once
#include <glib.h>
#include <string>
#include <string_view>
std::wstring char_to_wstr(const gchar* str);
char* wstr_to_char(const std::wstring& wstr);
std::wstring sview_to_wstr(const std::string_view str);
char* wsview_to_char(const std::wstring_view wstr);

View file

@ -3,7 +3,7 @@
#include "converter.hpp"
// Convert a wide Unicode string to an UTF8 string
std::string wstr_to_str(const std::wstring& wstr)
std::string wstr_to_str(const std::wstring_view wstr)
{
if(wstr.empty())
{
@ -15,7 +15,7 @@ std::string wstr_to_str(const std::wstring& wstr)
return strTo;
}
char* wstr_to_char(const std::wstring& wstr)
char* wsview_to_char(const std::wstring_view wstr)
{
if(wstr.empty())
{
@ -28,7 +28,7 @@ char* wstr_to_char(const std::wstring& wstr)
}
// Convert an UTF8 string to a wide Unicode String
std::wstring std_to_wstr(const std::string &str)
std::wstring sview_to_wstr(const std::string_view str)
{
if(str.empty())
{
@ -38,16 +38,4 @@ std::wstring std_to_wstr(const std::string &str)
std::wstring wstrTo(final_size, 0);
MultiByteToWideChar(CP_UTF8, 0, str.data(), (int)str.size(), wstrTo.data(), final_size);
return wstrTo;
}
std::wstring char_to_wstr(const char* str) // TODO: how to be safe from non-null terminated strings?
{
if(str == nullptr)
{
return std::wstring();
}
int final_size = MultiByteToWideChar(CP_UTF8, 0, str, strlen(str), nullptr, 0);
std::wstring wstrTo(final_size, 0);
MultiByteToWideChar(CP_UTF8, 0, str, strlen(str), wstrTo.data(), final_size);
return wstrTo;
}

View file

@ -12,6 +12,7 @@
#include <iostream>
#include <string>
#include <string_view>
#include <vector>
#include <tuple>
@ -147,7 +148,7 @@ winrtWindowsUINotificationsToastNotification* winrt_windows_ui_notifications_toa
auto ret = static_cast<winrtWindowsUINotificationsToastNotification*>(g_object_new (WINRT_TYPE_WINDOWS_UI_NOTIFICATIONS_TOAST_NOTIFICATION, NULL));
winrt::Windows::Data::Xml::Dom::XmlDocument xmlDoc;
xmlDoc.LoadXml(char_to_wstr(doc));
xmlDoc.LoadXml(sview_to_wstr(doc));
winrt_windows_ui_notifications_toast_notification_set_internal(ret, winrt::Windows::UI::Notifications::ToastNotification{ xmlDoc });
return ret;
}
@ -170,7 +171,7 @@ void winrt_windows_ui_notifications_toast_notification_set_Tag(winrtWindowsUINot
{
g_return_if_fail (WINRT_IS_WINDOWS_UI_NOTIFICATIONS_TOAST_NOTIFICATION (self));
winrt_windows_ui_notifications_toast_notification_get_internal(self)->Tag(char_to_wstr(value));
winrt_windows_ui_notifications_toast_notification_get_internal(self)->Tag(sview_to_wstr(value));
}
/**
@ -185,14 +186,14 @@ char* winrt_windows_ui_notifications_toast_notification_get_Tag(winrtWindowsUINo
{
g_return_val_if_fail (WINRT_IS_WINDOWS_UI_NOTIFICATIONS_TOAST_NOTIFICATION (self), FALSE);
return wstr_to_char(std::wstring(winrt_windows_ui_notifications_toast_notification_get_internal(self)->Tag()));
return wsview_to_char(winrt_windows_ui_notifications_toast_notification_get_internal(self)->Tag());
}
void winrt_windows_ui_notifications_toast_notification_set_Group(winrtWindowsUINotificationsToastNotification* self, const char* value)
{
g_return_if_fail (WINRT_IS_WINDOWS_UI_NOTIFICATIONS_TOAST_NOTIFICATION (self));
winrt_windows_ui_notifications_toast_notification_get_internal(self)->Group(char_to_wstr(value));
winrt_windows_ui_notifications_toast_notification_get_internal(self)->Group(sview_to_wstr(value));
}
/**
@ -207,7 +208,7 @@ char* winrt_windows_ui_notifications_toast_notification_get_Group(winrtWindowsUI
{
g_return_val_if_fail (WINRT_IS_WINDOWS_UI_NOTIFICATIONS_TOAST_NOTIFICATION (self), FALSE);
return wstr_to_char(std::wstring(winrt_windows_ui_notifications_toast_notification_get_internal(self)->Group()));
return wsview_to_char(winrt_windows_ui_notifications_toast_notification_get_internal(self)->Group());
}
winrtEventToken* winrt_windows_ui_notifications_toast_notification_Activated(winrtWindowsUINotificationsToastNotification* self, NotificationCallbackActivated callback, void* context, void(*free)(void*))
@ -248,7 +249,7 @@ winrtEventToken* winrt_windows_ui_notifications_toast_notification_Activated(win
}
std::cout << "Notification activated!" << std::endl;
priv->activated.callback(wstr_to_char(arguments.data()), nullptr, user_input.size(), priv->activated.context);
priv->activated.callback(wsview_to_char(arguments.data()), nullptr /* user_input */ , 0 /* user_input.size() */, priv->activated.context);
});
priv->activated.token = winrt_event_token_new_from_token(&token);
return priv->activated.token;

View file

@ -150,7 +150,7 @@ extern "C"
{
gboolean TryCreateShortcut(const gchar* aumid)
{
auto result = char_to_wstr(aumid);
auto result = sview_to_wstr(aumid);
if (result.empty())
{
return FALSE;

View file

@ -6,22 +6,22 @@
std::optional<std::wstring> GetCurrentModulePath()
{
std::array<wchar_t, MAX_PATH> exePath;
std::wstring exePath(MAX_PATH, 0);
auto charWritten = GetModuleFileName(nullptr, exePath.data(), exePath.size());
if (charWritten > 0)
{
return std::wstring(exePath.data());
return exePath;
}
return std::nullopt;
}
std::optional<std::wstring> GetShortcutPath()
{
std::array<wchar_t, MAX_PATH> shortcutPath;
std::wstring shortcutPath(MAX_PATH, 0);
auto charWritten = GetEnvironmentVariable(L"APPDATA", shortcutPath.data(), shortcutPath.size());
if (charWritten > 0)
{
return std::wstring(shortcutPath.data());
return shortcutPath;
}
return std::nullopt;
}
@ -49,7 +49,7 @@ extern "C"
gboolean SetAppModelID(const gchar* aumid)
{
auto result = char_to_wstr(aumid);
auto result = sview_to_wstr(aumid);
if (result.empty())
{
return FALSE;

View file

@ -27,7 +27,7 @@ public class Plugin : RootInterface, Object {
{
var m = new winrt.Windows.UI.Notifications.ToastNotification("Test");
var token = m.Activated(() => {
var token = m.Activated((c, d) => {
var i = 2;
});
m.RemoveActivatedAction(token);