From 86bf9cbd7af99c8964745d414494c26af11af0f4 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 17 Dec 2017 00:03:59 +0100 Subject: Simplify Tee --- ingen/Tee.hpp | 24 +++++------------------- src/server/Engine.cpp | 17 ++++++++--------- 2 files changed, 13 insertions(+), 28 deletions(-) diff --git a/ingen/Tee.hpp b/ingen/Tee.hpp index f02d8602..543dfa28 100644 --- a/ingen/Tee.hpp +++ b/ingen/Tee.hpp @@ -19,7 +19,7 @@ #include #include -#include +#include #include "ingen/Interface.hpp" #include "ingen/types.hpp" @@ -32,25 +32,13 @@ class Tee : public Interface public: typedef std::set< SPtr > Sinks; - Tee(const Sinks& sinks = {}) - : _sinks(sinks) - {} + explicit Tee(Sinks sinks) : _sinks(std::move(sinks)) {} - void add_sink(SPtr sink) { - std::lock_guard lock(_sinks_mutex); - _sinks.insert(sink); - } - - bool remove_sink(SPtr sink) { - std::lock_guard lock(_sinks_mutex); - return (_sinks.erase(sink) > 0); - } - - virtual SPtr respondee() const { + SPtr respondee() const override { return (*_sinks.begin())->respondee(); } - virtual void set_respondee(SPtr respondee) { + void set_respondee(SPtr respondee) override { (*_sinks.begin())->set_respondee(respondee); } @@ -61,9 +49,7 @@ public: } } - Raul::URI uri() const { return Raul::URI("ingen:/tee"); } - const Sinks& sinks() const { return _sinks; } - Sinks& sinks() { return _sinks; } + Raul::URI uri() const override { return Raul::URI("ingen:/tee"); } private: std::mutex _sinks_mutex; diff --git a/src/server/Engine.cpp b/src/server/Engine.cpp index 8567ae2a..2e32e706 100644 --- a/src/server/Engine.cpp +++ b/src/server/Engine.cpp @@ -121,15 +121,14 @@ Engine::Engine(Ingen::World* world) new LV2Features::EmptyFeature(LV2_STATE__loadDefaultState))); if (world->conf().option("dump").get()) { - SPtr tee(new Tee()); - SPtr dumper(new StreamWriter(world->uri_map(), - world->uris(), - Raul::URI("ingen:/engine"), - stderr, - ColorContext::Color::MAGENTA)); - tee->add_sink(_event_writer); - tee->add_sink(dumper); - _interface = tee; + _interface = std::make_shared( + Tee::Sinks{ + _event_writer, + std::make_shared(world->uri_map(), + world->uris(), + Raul::URI("ingen:/engine"), + stderr, + ColorContext::Color::MAGENTA)}); } _atom_interface = new AtomReader( -- cgit v1.2.1