From 6fc54d80fb7e55c6ac9d3b4b7505e9600329e5b4 Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Tue, 15 Dec 2020 17:01:57 +0100 Subject: [PATCH] Move TChar* -> std::u16string conversion to base.h We're going to need it for VST3 events. --- src/common/serialization/vst3/base.cpp | 10 ++++++++++ src/common/serialization/vst3/base.h | 7 +++++++ src/common/serialization/vst3/host-application.cpp | 8 +------- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/common/serialization/vst3/base.cpp b/src/common/serialization/vst3/base.cpp index 0704c5ac..31b00998 100644 --- a/src/common/serialization/vst3/base.cpp +++ b/src/common/serialization/vst3/base.cpp @@ -19,6 +19,16 @@ #include "base.h" +std::u16string tchar_string_to_u16string(const Steinberg::Vst::TChar* string) { +#ifdef __WINE__ + // This is great, thanks Steinberg + static_assert(sizeof(Steinberg::Vst::TChar) == sizeof(char16_t)); + return std::u16string(reinterpret_cast(string)); +#else + return std::u16string(static_cast(string)); +#endif +} + UniversalTResult::UniversalTResult() : universal_result(Value::kResultFalse) {} UniversalTResult::UniversalTResult(tresult native_result) diff --git a/src/common/serialization/vst3/base.h b/src/common/serialization/vst3/base.h index 049d6bac..a2437457 100644 --- a/src/common/serialization/vst3/base.h +++ b/src/common/serialization/vst3/base.h @@ -23,6 +23,7 @@ #include #include #include +#include // Yet Another layer of includes, but these are some VST3-specific typedefs that // we'll need for all of our interfaces @@ -51,6 +52,12 @@ constexpr size_t max_num_speakers = 16384; */ constexpr size_t max_vector_stream_size = 50 << 20; +/** + * Convert a UTF-16 C-style string to an `std::u16string`. Who event invented + * UTF-16? + */ +std::u16string tchar_string_to_u16string(const Steinberg::Vst::TChar* string); + /** * Empty struct for when we have send a response to some operation without any * result values. diff --git a/src/common/serialization/vst3/host-application.cpp b/src/common/serialization/vst3/host-application.cpp index b5695028..00c2e637 100644 --- a/src/common/serialization/vst3/host-application.cpp +++ b/src/common/serialization/vst3/host-application.cpp @@ -24,13 +24,7 @@ YaHostApplication::ConstructArgs::ConstructArgs( : component_instance_id(component_instance_id) { Steinberg::Vst::String128 name_array; if (context->getName(name_array) == Steinberg::kResultOk) { -#ifdef __WINE__ - // Who even invented UTF-16 - static_assert(sizeof(Steinberg::Vst::TChar) == sizeof(char16_t)); - name = std::u16string(reinterpret_cast(name_array)); -#else - name = std::u16string(static_cast(name_array)); -#endif + name = tchar_string_to_u16string(name_array); } }