From cb7413c5214598eb6d247a4b53775057147d5e3f Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Mon, 14 Dec 2020 18:32:18 +0100 Subject: [PATCH] Add implicit conversion for UniversalTResult --- src/common/logging/vst3.cpp | 8 +- src/common/serialization/vst3/base.cpp | 2 +- src/common/serialization/vst3/base.h | 2 +- src/plugin/bridges/vst3-impls/component.cpp | 84 ++++++++----------- .../bridges/vst3-impls/plugin-factory.cpp | 10 +-- 5 files changed, 44 insertions(+), 62 deletions(-) diff --git a/src/common/logging/vst3.cpp b/src/common/logging/vst3.cpp index db4fe48b..c713e206 100644 --- a/src/common/logging/vst3.cpp +++ b/src/common/logging/vst3.cpp @@ -230,7 +230,7 @@ void Vst3Logger::log_response(bool is_host_vst, const YaComponent::GetBusInfoResponse& response) { log_response_base(is_host_vst, [&](auto& message) { message << response.result.string(); - if (response.result.native() == Steinberg::kResultOk) { + if (response.result == Steinberg::kResultOk) { message << ", "; } }); @@ -241,7 +241,7 @@ void Vst3Logger::log_response( const YaComponent::GetRoutingInfoResponse& response) { log_response_base(is_host_vst, [&](auto& message) { message << response.result.string(); - if (response.result.native() == Steinberg::kResultOk) { + if (response.result == Steinberg::kResultOk) { message << ", "; } @@ -268,7 +268,7 @@ void Vst3Logger::log_response( const YaComponent::GetBusArrangementResponse& response) { log_response_base(is_host_vst, [&](auto& message) { message << response.result.string(); - if (response.result.native() == Steinberg::kResultOk) { + if (response.result == Steinberg::kResultOk) { message << ", "; } }); diff --git a/src/common/serialization/vst3/base.cpp b/src/common/serialization/vst3/base.cpp index 88542121..0704c5ac 100644 --- a/src/common/serialization/vst3/base.cpp +++ b/src/common/serialization/vst3/base.cpp @@ -24,7 +24,7 @@ UniversalTResult::UniversalTResult() : universal_result(Value::kResultFalse) {} UniversalTResult::UniversalTResult(tresult native_result) : universal_result(to_universal_result(native_result)) {} -tresult UniversalTResult::native() const { +UniversalTResult::operator tresult() const { static_assert(Steinberg::kResultOk == Steinberg::kResultTrue); switch (universal_result) { case Value::kNoInterface: diff --git a/src/common/serialization/vst3/base.h b/src/common/serialization/vst3/base.h index 1023431c..7d452a02 100644 --- a/src/common/serialization/vst3/base.h +++ b/src/common/serialization/vst3/base.h @@ -104,7 +104,7 @@ class UniversalTResult { /** * Get the native equivalent for the wrapped `tresult` value. */ - tresult native() const; + operator tresult() const; /** * Get the original name for the result, e.g. `kResultOk`. diff --git a/src/plugin/bridges/vst3-impls/component.cpp b/src/plugin/bridges/vst3-impls/component.cpp index 94ef7a20..180edd1f 100644 --- a/src/plugin/bridges/vst3-impls/component.cpp +++ b/src/plugin/bridges/vst3-impls/component.cpp @@ -58,27 +58,21 @@ tresult PLUGIN_API YaComponentPluginImpl::initialize(FUnknown* context) { context ? std::optional(context->iid) : std::nullopt); } - return bridge - .send_message(YaComponent::Initialize{ - .instance_id = arguments.instance_id, - .host_application_context_args = - std::move(host_application_context_args)}) - .native(); + return bridge.send_message( + YaComponent::Initialize{.instance_id = arguments.instance_id, + .host_application_context_args = + std::move(host_application_context_args)}); } tresult PLUGIN_API YaComponentPluginImpl::terminate() { - return bridge - .send_message( - YaComponent::Terminate{.instance_id = arguments.instance_id}) - .native(); + return bridge.send_message( + YaComponent::Terminate{.instance_id = arguments.instance_id}); } tresult PLUGIN_API YaComponentPluginImpl::setIoMode(Steinberg::Vst::IoMode mode) { - return bridge - .send_message(YaComponent::SetIoMode{ - .instance_id = arguments.instance_id, .mode = mode}) - .native(); + return bridge.send_message(YaComponent::SetIoMode{ + .instance_id = arguments.instance_id, .mode = mode}); } int32 PLUGIN_API @@ -101,7 +95,7 @@ YaComponentPluginImpl::getBusInfo(Steinberg::Vst::MediaType type, .bus = bus}); bus = response.updated_bus; - return response.result.native(); + return response.result; } tresult PLUGIN_API YaComponentPluginImpl::getRoutingInfo( @@ -114,7 +108,7 @@ tresult PLUGIN_API YaComponentPluginImpl::getRoutingInfo( inInfo = response.updated_in_info; outInfo = response.updated_out_info; - return response.result.native(); + return response.result; } tresult PLUGIN_API @@ -122,28 +116,22 @@ YaComponentPluginImpl::activateBus(Steinberg::Vst::MediaType type, Steinberg::Vst::BusDirection dir, int32 index, TBool state) { - return bridge - .send_message( - YaComponent::ActivateBus{.instance_id = arguments.instance_id, - .type = type, - .dir = dir, - .index = index, - .state = state}) - .native(); + return bridge.send_message( + YaComponent::ActivateBus{.instance_id = arguments.instance_id, + .type = type, + .dir = dir, + .index = index, + .state = state}); } tresult PLUGIN_API YaComponentPluginImpl::setActive(TBool state) { - return bridge - .send_message(YaComponent::SetActive{ - .instance_id = arguments.instance_id, .state = state}) - .native(); + return bridge.send_message(YaComponent::SetActive{ + .instance_id = arguments.instance_id, .state = state}); } tresult PLUGIN_API YaComponentPluginImpl::setState(Steinberg::IBStream* state) { - return bridge - .send_message(YaComponent::SetState{ - .instance_id = arguments.instance_id, .state = state}) - .native(); + return bridge.send_message(YaComponent::SetState{ + .instance_id = arguments.instance_id, .state = state}); } tresult PLUGIN_API YaComponentPluginImpl::getState(Steinberg::IBStream* state) { @@ -152,7 +140,7 @@ tresult PLUGIN_API YaComponentPluginImpl::getState(Steinberg::IBStream* state) { assert(response.updated_state.write_back(state) == Steinberg::kResultOk); - return response.result.native(); + return response.result; } tresult PLUGIN_API YaComponentPluginImpl::setBusArrangements( @@ -161,17 +149,15 @@ tresult PLUGIN_API YaComponentPluginImpl::setBusArrangements( Steinberg::Vst::SpeakerArrangement* outputs, int32 numOuts) { assert(inputs && outputs); - return bridge - .send_message(YaComponent::SetBusArrangements{ - .instance_id = arguments.instance_id, - .inputs = std::vector( - inputs, &inputs[numIns]), - .num_ins = numIns, - .outputs = std::vector( - outputs, &outputs[numOuts]), - .num_outs = numOuts, - }) - .native(); + return bridge.send_message(YaComponent::SetBusArrangements{ + .instance_id = arguments.instance_id, + .inputs = std::vector( + inputs, &inputs[numIns]), + .num_ins = numIns, + .outputs = std::vector( + outputs, &outputs[numOuts]), + .num_outs = numOuts, + }); } tresult PLUGIN_API YaComponentPluginImpl::getBusArrangement( @@ -186,16 +172,14 @@ tresult PLUGIN_API YaComponentPluginImpl::getBusArrangement( arr = response.updated_arr; - return response.result.native(); + return response.result; } tresult PLUGIN_API YaComponentPluginImpl::canProcessSampleSize(int32 symbolicSampleSize) { - return bridge - .send_message(YaComponent::CanProcessSampleSize{ - .instance_id = arguments.instance_id, - .symbolic_sample_size = symbolicSampleSize}) - .native(); + return bridge.send_message(YaComponent::CanProcessSampleSize{ + .instance_id = arguments.instance_id, + .symbolic_sample_size = symbolicSampleSize}); } uint32 PLUGIN_API YaComponentPluginImpl::getLatencySamples() { diff --git a/src/plugin/bridges/vst3-impls/plugin-factory.cpp b/src/plugin/bridges/vst3-impls/plugin-factory.cpp index d5522051..a39ac230 100644 --- a/src/plugin/bridges/vst3-impls/plugin-factory.cpp +++ b/src/plugin/bridges/vst3-impls/plugin-factory.cpp @@ -47,7 +47,7 @@ YaPluginFactoryPluginImpl::createInstance(Steinberg::FIDString cid, new YaComponentPluginImpl(bridge, std::move(args))); return Steinberg::kResultOk; }, - [&](const UniversalTResult& code) { return code.native(); }}, + [&](const UniversalTResult& code) -> tresult { return code; }}, std::move(result)); } else { // When the host requests an interface we do not (yet) implement, we'll @@ -81,11 +81,9 @@ YaPluginFactoryPluginImpl::setHostContext(Steinberg::FUnknown* context) { YaHostApplication::ConstructArgs host_application_context_args( host_application_context, std::nullopt); - return bridge - .send_message(YaPluginFactory::SetHostContext{ - .host_application_context_args = - std::move(host_application_context_args)}) - .native(); + return bridge.send_message(YaPluginFactory::SetHostContext{ + .host_application_context_args = + std::move(host_application_context_args)}); } else { bridge.logger.log_unknown_interface( "In IPluginFactory3::setHostContext(), ignoring",