From 4a056dcd3156795f3716b253a36e9a666ce925c8 Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Wed, 9 Dec 2020 22:11:39 +0100 Subject: [PATCH] Get rid of the VST3 logging boilerplate --- src/common/logging/vst3.cpp | 61 +++++++++++-------------------------- src/common/logging/vst3.h | 43 +++++++++++++++++++++++--- 2 files changed, 56 insertions(+), 48 deletions(-) diff --git a/src/common/logging/vst3.cpp b/src/common/logging/vst3.cpp index f75010be..77e9bdec 100644 --- a/src/common/logging/vst3.cpp +++ b/src/common/logging/vst3.cpp @@ -16,79 +16,54 @@ #include "vst3.h" -#include #include "src/common/serialization/vst3.h" // TODO: Reconsider the output format -// TODO: Maybe think of an alterantive that's a little less boilerplaty Vst3Logger::Vst3Logger(Logger& generic_logger) : logger(generic_logger) {} void Vst3Logger::log_request(bool is_host_vst, const YaComponent::Create&) { - if (BOOST_UNLIKELY(logger.verbosity >= Logger::Verbosity::most_events)) { - std::ostringstream message; + log_request_base(is_host_vst, [](auto& message) { // TODO: Log the cid in some readable way, if possible - message << get_log_prefix(is_host_vst) - << " >> IPluginFactory::createComponent(cid, IComponent::iid, " + message << "IPluginFactory::createComponent(cid, IComponent::iid, " "&obj)"; - - log(message.str()); - } + }); } void Vst3Logger::log_request(bool is_host_vst, const WantsConfiguration&) { - if (BOOST_UNLIKELY(logger.verbosity >= Logger::Verbosity::most_events)) { - std::ostringstream message; - message << get_log_prefix(is_host_vst) - << " >> Requesting "; - - log(message.str()); - } + log_request_base(is_host_vst, [](auto& message) { + message << "Requesting "; + }); } void Vst3Logger::log_request(bool is_host_vst, const WantsPluginFactory&) { - if (BOOST_UNLIKELY(logger.verbosity >= Logger::Verbosity::most_events)) { - std::ostringstream message; - message << get_log_prefix(is_host_vst) - << " >> Requesting "; - - log(message.str()); - } + log_request_base(is_host_vst, [](auto& message) { + message << "Requesting "; + }); } void Vst3Logger::log_response( bool is_host_vst, const std::optional& args) { - if (BOOST_UNLIKELY(logger.verbosity >= Logger::Verbosity::most_events)) { - std::ostringstream message; + log_response_base(is_host_vst, [&](auto& message) { if (args) { - message << get_log_prefix(is_host_vst) << " instance_id << ">"; + message << "instance_id << ">"; } else { - message << get_log_prefix(is_host_vst) << " "; + message << ""; } - - log(message.str()); - } + }); } void Vst3Logger::log_response(bool is_host_vst, const Configuration&) { - if (BOOST_UNLIKELY(logger.verbosity >= Logger::Verbosity::most_events)) { - std::ostringstream message; - message << get_log_prefix(is_host_vst) << " "; - - log(message.str()); - } + log_response_base(is_host_vst, + [](auto& message) { message << "= Logger::Verbosity::most_events)) { - std::ostringstream message; - message << get_log_prefix(is_host_vst) << " with " + log_response_base(is_host_vst, [&](auto& message) { + message << " with " << const_cast(factory).countClasses() << " registered classes"; - - log(message.str()); - } + }); } diff --git a/src/common/logging/vst3.h b/src/common/logging/vst3.h index 11d75739..529ce3ba 100644 --- a/src/common/logging/vst3.h +++ b/src/common/logging/vst3.h @@ -16,6 +16,8 @@ #pragma once +#include + #include "../serialization/vst3.h" #include "common.h" @@ -58,11 +60,42 @@ class Vst3Logger { private: /** - * Get the `host -> vst` or `vst -> host` prefix based on the boolean flag - * we pass to every logging function so we don't have to repeat it - * everywhere. + * Log a request with a standard prefix based on the boolean flag we pass to + * every logging function so we don't have to repeat it everywhere. */ - inline std::string get_log_prefix(bool is_host_vst) { - return is_host_vst ? "[host -> vst]" : "[vst -> host]"; + template F> + void log_request_base(bool is_host_vst, F callback) { + if (BOOST_UNLIKELY(logger.verbosity >= + Logger::Verbosity::most_events)) { + std::ostringstream message; + if (is_host_vst) { + message << "[host -> vst] >> "; + } else { + message << "[vst -> host] >> "; + } + + callback(message); + log(message.str()); + } + } + + /** + * Log a response with a standard prefix based on the boolean flag we pass + * to every logging function so we don't have to repeat it everywhere. + */ + template F> + void log_response_base(bool is_host_vst, F callback) { + if (BOOST_UNLIKELY(logger.verbosity >= + Logger::Verbosity::most_events)) { + std::ostringstream message; + if (is_host_vst) { + message << "[host -> vst] "; + } else { + message << "[vst -> host] "; + } + + callback(message); + log(message.str()); + } } };