From 75322915450ebbf5ba2c3e0ad061bfef28f8bd26 Mon Sep 17 00:00:00 2001 From: Paul Fd Date: Thu, 5 Mar 2020 16:53:12 +0100 Subject: [PATCH] Moved the factory to unique pointers --- src/sfizz/Effects.cpp | 10 +++++----- src/sfizz/Effects.h | 4 ++-- src/sfizz/Synth.cpp | 5 ++--- src/sfizz/effects/Lofi.cpp | 6 +++--- src/sfizz/effects/Lofi.h | 2 +- 5 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/sfizz/Effects.cpp b/src/sfizz/Effects.cpp index a5b3b964..5bfddf68 100644 --- a/src/sfizz/Effects.cpp +++ b/src/sfizz/Effects.cpp @@ -29,7 +29,7 @@ void EffectFactory::registerEffectType(absl::string_view name, Effect::MakeInsta _entries.push_back(std::move(ent)); } -Effect* EffectFactory::makeEffect(absl::Span members) +std::unique_ptr EffectFactory::makeEffect(absl::Span members) { const Opcode* opcode = nullptr; @@ -40,7 +40,7 @@ Effect* EffectFactory::makeEffect(absl::Span members) if (!opcode) { DBG("The effect does not specify a type"); - return new sfz::fx::Nothing; + return std::make_unique(); } absl::string_view type = opcode->value; @@ -52,13 +52,13 @@ Effect* EffectFactory::makeEffect(absl::Span members) if (it == end) { DBG("Unsupported effect type: " << type); - return new sfz::fx::Nothing; + return std::make_unique(); } - Effect* fx = it->make(members); + auto fx = std::unique_ptr(it->make(members)); if (!fx) { DBG("Could not instantiate effect of type: " << type); - return new sfz::fx::Nothing; + return std::make_unique(); } return fx; diff --git a/src/sfizz/Effects.h b/src/sfizz/Effects.h index 80462d0c..ff159d3c 100644 --- a/src/sfizz/Effects.h +++ b/src/sfizz/Effects.h @@ -46,7 +46,7 @@ public: @brief Type of the factory function used to instantiate an effect given the contents of the block */ - typedef Effect* (MakeInstance)(absl::Span members); + typedef std::unique_ptr (MakeInstance)(absl::Span members); }; /** @@ -67,7 +67,7 @@ public: /** @brief Instantiates an effect given the contents of the block. */ - Effect* makeEffect(absl::Span members); + std::unique_ptr makeEffect(absl::Span members); private: struct FactoryEntry { diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index 7ebbbb39..7c2c0a02 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -256,10 +256,9 @@ void sfz::Synth::handleEffectOpcodes(const std::vector& members) // create the effect and add it EffectBus& bus = getOrCreateBus(busIndex); - Effect* fx = effectFactory.makeEffect(members); - bus.addEffect(std::unique_ptr(fx)); - + auto fx = effectFactory.makeEffect(members); fx->init(sampleRate); + bus.addEffect(std::move(fx)); } void addEndpointsToVelocityCurve(sfz::Region& region) diff --git a/src/sfizz/effects/Lofi.cpp b/src/sfizz/effects/Lofi.cpp index 9c4e1f7e..758df404 100644 --- a/src/sfizz/effects/Lofi.cpp +++ b/src/sfizz/effects/Lofi.cpp @@ -72,9 +72,9 @@ namespace fx { } } - Effect* Lofi::makeInstance(absl::Span members) + std::unique_ptr Lofi::makeInstance(absl::Span members) { - std::unique_ptr fx { new Lofi }; + auto fx = std::make_unique(); for (const Opcode& opcode : members) { switch (opcode.lettersOnlyHash) { @@ -87,7 +87,7 @@ namespace fx { } } - return fx.release(); + return fx; } /// diff --git a/src/sfizz/effects/Lofi.h b/src/sfizz/effects/Lofi.h index 8bfda5d8..65b5e54e 100644 --- a/src/sfizz/effects/Lofi.h +++ b/src/sfizz/effects/Lofi.h @@ -34,7 +34,7 @@ namespace fx { /** * @brief Instantiates given the contents of the block. */ - static Effect* makeInstance(absl::Span members); + static std::unique_ptr makeInstance(absl::Span members); private: float _bitred_depth = 0;