Add implicit conversion for UniversalTResult

This commit is contained in:
Robbert van der Helm
2020-12-14 18:32:18 +01:00
parent 2becd420b2
commit cb7413c521
5 changed files with 44 additions and 62 deletions
+4 -4
View File
@@ -230,7 +230,7 @@ void Vst3Logger::log_response(bool is_host_vst,
const YaComponent::GetBusInfoResponse& response) { const YaComponent::GetBusInfoResponse& response) {
log_response_base(is_host_vst, [&](auto& message) { log_response_base(is_host_vst, [&](auto& message) {
message << response.result.string(); message << response.result.string();
if (response.result.native() == Steinberg::kResultOk) { if (response.result == Steinberg::kResultOk) {
message << ", <BusInfo>"; message << ", <BusInfo>";
} }
}); });
@@ -241,7 +241,7 @@ void Vst3Logger::log_response(
const YaComponent::GetRoutingInfoResponse& response) { const YaComponent::GetRoutingInfoResponse& response) {
log_response_base(is_host_vst, [&](auto& message) { log_response_base(is_host_vst, [&](auto& message) {
message << response.result.string(); message << response.result.string();
if (response.result.native() == Steinberg::kResultOk) { if (response.result == Steinberg::kResultOk) {
message << ", <RoutingInfo& for bus " message << ", <RoutingInfo& for bus "
<< response.updated_in_info.busIndex << " and channel " << response.updated_in_info.busIndex << " and channel "
<< response.updated_in_info.channel << response.updated_in_info.channel
@@ -256,7 +256,7 @@ void Vst3Logger::log_response(bool is_host_vst,
const YaComponent::GetStateResponse& response) { const YaComponent::GetStateResponse& response) {
log_response_base(is_host_vst, [&](auto& message) { log_response_base(is_host_vst, [&](auto& message) {
message << response.result.string(); message << response.result.string();
if (response.result.native() == Steinberg::kResultOk) { if (response.result == Steinberg::kResultOk) {
message << ", <IBStream* containing " message << ", <IBStream* containing "
<< response.updated_state.size() << " bytes>"; << response.updated_state.size() << " bytes>";
} }
@@ -268,7 +268,7 @@ void Vst3Logger::log_response(
const YaComponent::GetBusArrangementResponse& response) { const YaComponent::GetBusArrangementResponse& response) {
log_response_base(is_host_vst, [&](auto& message) { log_response_base(is_host_vst, [&](auto& message) {
message << response.result.string(); message << response.result.string();
if (response.result.native() == Steinberg::kResultOk) { if (response.result == Steinberg::kResultOk) {
message << ", <SpeakerArrangement>"; message << ", <SpeakerArrangement>";
} }
}); });
+1 -1
View File
@@ -24,7 +24,7 @@ UniversalTResult::UniversalTResult() : universal_result(Value::kResultFalse) {}
UniversalTResult::UniversalTResult(tresult native_result) UniversalTResult::UniversalTResult(tresult native_result)
: universal_result(to_universal_result(native_result)) {} : universal_result(to_universal_result(native_result)) {}
tresult UniversalTResult::native() const { UniversalTResult::operator tresult() const {
static_assert(Steinberg::kResultOk == Steinberg::kResultTrue); static_assert(Steinberg::kResultOk == Steinberg::kResultTrue);
switch (universal_result) { switch (universal_result) {
case Value::kNoInterface: case Value::kNoInterface:
+1 -1
View File
@@ -104,7 +104,7 @@ class UniversalTResult {
/** /**
* Get the native equivalent for the wrapped `tresult` value. * 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`. * Get the original name for the result, e.g. `kResultOk`.
+34 -50
View File
@@ -58,27 +58,21 @@ tresult PLUGIN_API YaComponentPluginImpl::initialize(FUnknown* context) {
context ? std::optional(context->iid) : std::nullopt); context ? std::optional(context->iid) : std::nullopt);
} }
return bridge return bridge.send_message(
.send_message(YaComponent::Initialize{ YaComponent::Initialize{.instance_id = arguments.instance_id,
.instance_id = arguments.instance_id, .host_application_context_args =
.host_application_context_args = std::move(host_application_context_args)});
std::move(host_application_context_args)})
.native();
} }
tresult PLUGIN_API YaComponentPluginImpl::terminate() { tresult PLUGIN_API YaComponentPluginImpl::terminate() {
return bridge return bridge.send_message(
.send_message( YaComponent::Terminate{.instance_id = arguments.instance_id});
YaComponent::Terminate{.instance_id = arguments.instance_id})
.native();
} }
tresult PLUGIN_API tresult PLUGIN_API
YaComponentPluginImpl::setIoMode(Steinberg::Vst::IoMode mode) { YaComponentPluginImpl::setIoMode(Steinberg::Vst::IoMode mode) {
return bridge return bridge.send_message(YaComponent::SetIoMode{
.send_message(YaComponent::SetIoMode{ .instance_id = arguments.instance_id, .mode = mode});
.instance_id = arguments.instance_id, .mode = mode})
.native();
} }
int32 PLUGIN_API int32 PLUGIN_API
@@ -101,7 +95,7 @@ YaComponentPluginImpl::getBusInfo(Steinberg::Vst::MediaType type,
.bus = bus}); .bus = bus});
bus = response.updated_bus; bus = response.updated_bus;
return response.result.native(); return response.result;
} }
tresult PLUGIN_API YaComponentPluginImpl::getRoutingInfo( tresult PLUGIN_API YaComponentPluginImpl::getRoutingInfo(
@@ -114,7 +108,7 @@ tresult PLUGIN_API YaComponentPluginImpl::getRoutingInfo(
inInfo = response.updated_in_info; inInfo = response.updated_in_info;
outInfo = response.updated_out_info; outInfo = response.updated_out_info;
return response.result.native(); return response.result;
} }
tresult PLUGIN_API tresult PLUGIN_API
@@ -122,28 +116,22 @@ YaComponentPluginImpl::activateBus(Steinberg::Vst::MediaType type,
Steinberg::Vst::BusDirection dir, Steinberg::Vst::BusDirection dir,
int32 index, int32 index,
TBool state) { TBool state) {
return bridge return bridge.send_message(
.send_message( YaComponent::ActivateBus{.instance_id = arguments.instance_id,
YaComponent::ActivateBus{.instance_id = arguments.instance_id, .type = type,
.type = type, .dir = dir,
.dir = dir, .index = index,
.index = index, .state = state});
.state = state})
.native();
} }
tresult PLUGIN_API YaComponentPluginImpl::setActive(TBool state) { tresult PLUGIN_API YaComponentPluginImpl::setActive(TBool state) {
return bridge return bridge.send_message(YaComponent::SetActive{
.send_message(YaComponent::SetActive{ .instance_id = arguments.instance_id, .state = state});
.instance_id = arguments.instance_id, .state = state})
.native();
} }
tresult PLUGIN_API YaComponentPluginImpl::setState(Steinberg::IBStream* state) { tresult PLUGIN_API YaComponentPluginImpl::setState(Steinberg::IBStream* state) {
return bridge return bridge.send_message(YaComponent::SetState{
.send_message(YaComponent::SetState{ .instance_id = arguments.instance_id, .state = state});
.instance_id = arguments.instance_id, .state = state})
.native();
} }
tresult PLUGIN_API YaComponentPluginImpl::getState(Steinberg::IBStream* 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); assert(response.updated_state.write_back(state) == Steinberg::kResultOk);
return response.result.native(); return response.result;
} }
tresult PLUGIN_API YaComponentPluginImpl::setBusArrangements( tresult PLUGIN_API YaComponentPluginImpl::setBusArrangements(
@@ -161,17 +149,15 @@ tresult PLUGIN_API YaComponentPluginImpl::setBusArrangements(
Steinberg::Vst::SpeakerArrangement* outputs, Steinberg::Vst::SpeakerArrangement* outputs,
int32 numOuts) { int32 numOuts) {
assert(inputs && outputs); assert(inputs && outputs);
return bridge return bridge.send_message(YaComponent::SetBusArrangements{
.send_message(YaComponent::SetBusArrangements{ .instance_id = arguments.instance_id,
.instance_id = arguments.instance_id, .inputs = std::vector<Steinberg::Vst::SpeakerArrangement>(
.inputs = std::vector<Steinberg::Vst::SpeakerArrangement>( inputs, &inputs[numIns]),
inputs, &inputs[numIns]), .num_ins = numIns,
.num_ins = numIns, .outputs = std::vector<Steinberg::Vst::SpeakerArrangement>(
.outputs = std::vector<Steinberg::Vst::SpeakerArrangement>( outputs, &outputs[numOuts]),
outputs, &outputs[numOuts]), .num_outs = numOuts,
.num_outs = numOuts, });
})
.native();
} }
tresult PLUGIN_API YaComponentPluginImpl::getBusArrangement( tresult PLUGIN_API YaComponentPluginImpl::getBusArrangement(
@@ -186,16 +172,14 @@ tresult PLUGIN_API YaComponentPluginImpl::getBusArrangement(
arr = response.updated_arr; arr = response.updated_arr;
return response.result.native(); return response.result;
} }
tresult PLUGIN_API tresult PLUGIN_API
YaComponentPluginImpl::canProcessSampleSize(int32 symbolicSampleSize) { YaComponentPluginImpl::canProcessSampleSize(int32 symbolicSampleSize) {
return bridge return bridge.send_message(YaComponent::CanProcessSampleSize{
.send_message(YaComponent::CanProcessSampleSize{ .instance_id = arguments.instance_id,
.instance_id = arguments.instance_id, .symbolic_sample_size = symbolicSampleSize});
.symbolic_sample_size = symbolicSampleSize})
.native();
} }
uint32 PLUGIN_API YaComponentPluginImpl::getLatencySamples() { uint32 PLUGIN_API YaComponentPluginImpl::getLatencySamples() {
@@ -47,7 +47,7 @@ YaPluginFactoryPluginImpl::createInstance(Steinberg::FIDString cid,
new YaComponentPluginImpl(bridge, std::move(args))); new YaComponentPluginImpl(bridge, std::move(args)));
return Steinberg::kResultOk; return Steinberg::kResultOk;
}, },
[&](const UniversalTResult& code) { return code.native(); }}, [&](const UniversalTResult& code) -> tresult { return code; }},
std::move(result)); std::move(result));
} else { } else {
// When the host requests an interface we do not (yet) implement, we'll // 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( YaHostApplication::ConstructArgs host_application_context_args(
host_application_context, std::nullopt); host_application_context, std::nullopt);
return bridge return bridge.send_message(YaPluginFactory::SetHostContext{
.send_message(YaPluginFactory::SetHostContext{ .host_application_context_args =
.host_application_context_args = std::move(host_application_context_args)});
std::move(host_application_context_args)})
.native();
} else { } else {
bridge.logger.log_unknown_interface( bridge.logger.log_unknown_interface(
"In IPluginFactory3::setHostContext(), ignoring", "In IPluginFactory3::setHostContext(), ignoring",