From becdff5969f30e1410b852eaa4655bd3d5ec78da Mon Sep 17 00:00:00 2001 From: Paul Fd Date: Tue, 7 Apr 2020 20:14:55 +0200 Subject: [PATCH] Stricter c++11 compliance --- src/sfizz/Defer.h | 14 ++++++++------ src/sfizz/EQPool.cpp | 4 ++-- src/sfizz/FilePool.cpp | 4 ++-- src/sfizz/FilterPool.cpp | 4 ++-- src/sfizz/Synth.cpp | 30 +++++++++++++++--------------- 5 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/sfizz/Defer.h b/src/sfizz/Defer.h index 087ca8d6..e88bd21c 100644 --- a/src/sfizz/Defer.h +++ b/src/sfizz/Defer.h @@ -7,16 +7,18 @@ template struct deferred { - std::decay_t f; - template - deferred(G&& g) : f{std::forward(g)} {} + F f; + deferred(F f) : f(f) {} ~deferred() { f(); } }; -template -deferred(G&&) -> deferred; + +template +deferred deferred_func(F f) { + return deferred(f); +} #define CAT_(x, y) x##y #define CAT(x, y) CAT_(x, y) #define ANONYMOUS_VAR(x) CAT(x, __LINE__) -#define DEFER deferred ANONYMOUS_VAR(defer_variable) = [&] +#define DEFER(code) auto ANONYMOUS_VAR(defer_variable) = deferred_func([&] { code ; }) diff --git a/src/sfizz/EQPool.cpp b/src/sfizz/EQPool.cpp index 574c5fd0..ccee55bc 100644 --- a/src/sfizz/EQPool.cpp +++ b/src/sfizz/EQPool.cpp @@ -110,7 +110,7 @@ sfz::EQHolderPtr sfz::EQPool::getEQ(const EQDescription& description, unsigned n { if (!eqGuard.try_lock()) return {}; - DEFER { eqGuard.unlock(); }; + DEFER(eqGuard.unlock()); auto eq = absl::c_find_if(eqs, [](const EQHolderPtr& holder) { return holder.use_count() == 1; @@ -132,7 +132,7 @@ size_t sfz::EQPool::getActiveEQs() const size_t sfz::EQPool::setnumEQs(size_t numEQs) { - const std::lock_guard eqLock { eqGuard }; + const std::lock_guard eqLock { eqGuard }; auto eqIterator = eqs.begin(); auto eqSentinel = eqs.rbegin(); diff --git a/src/sfizz/FilePool.cpp b/src/sfizz/FilePool.cpp index 981485b4..fb120c14 100644 --- a/src/sfizz/FilePool.cpp +++ b/src/sfizz/FilePool.cpp @@ -306,7 +306,7 @@ void sfz::FilePool::setPreloadSize(uint32_t preloadSize) noexcept void sfz::FilePool::tryToClearPromises() { - const std::lock_guard promiseLock { promiseGuard }; + const std::lock_guard promiseLock { promiseGuard }; for (auto& promise: promisesToClear) { if (promise->dataStatus != FilePromise::DataStatus::Wait) @@ -381,7 +381,7 @@ void sfz::FilePool::cleanupPromises() noexcept { if (!promiseGuard.try_lock()) return; - DEFER { promiseGuard.unlock(); }; + DEFER(promiseGuard.unlock()); // The garbage collection cleared the data from these so we can move them // back to the empty queue diff --git a/src/sfizz/FilterPool.cpp b/src/sfizz/FilterPool.cpp index 74e185f3..ce18be28 100644 --- a/src/sfizz/FilterPool.cpp +++ b/src/sfizz/FilterPool.cpp @@ -111,7 +111,7 @@ sfz::FilterHolderPtr sfz::FilterPool::getFilter(const FilterDescription& descrip { if (!filterGuard.try_lock()) return {}; - DEFER { filterGuard.unlock(); }; + DEFER(filterGuard.unlock()); auto filter = absl::c_find_if(filters, [](const FilterHolderPtr& holder) { return holder.use_count() == 1; @@ -133,7 +133,7 @@ size_t sfz::FilterPool::getActiveFilters() const size_t sfz::FilterPool::setNumFilters(size_t numFilters) { - const std::lock_guard filterLock { filterGuard }; + const std::lock_guard filterLock { filterGuard }; auto filterIterator = filters.begin(); auto filterSentinel = filters.rbegin(); diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index 884491a0..a83743b7 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -28,7 +28,7 @@ sfz::Synth::Synth() sfz::Synth::Synth(int numVoices) { - const std::lock_guard disableCallback { callbackGuard }; + const std::lock_guard disableCallback { callbackGuard }; parser.setListener(this); effectFactory.registerStandardEffectTypes(); effectBuses.reserve(5); // sufficient room for main and fx1-4 @@ -37,7 +37,7 @@ sfz::Synth::Synth(int numVoices) sfz::Synth::~Synth() { - const std::lock_guard disableCallback { callbackGuard }; + const std::lock_guard disableCallback { callbackGuard }; for (auto& voice : voices) voice->reset(); @@ -123,7 +123,7 @@ void sfz::Synth::buildRegion(const std::vector& regionOpcodes) void sfz::Synth::clear() { - const std::lock_guard disableCallback { callbackGuard }; + const std::lock_guard disableCallback { callbackGuard }; for (auto& voice : voices) voice->reset(); @@ -321,7 +321,7 @@ bool sfz::Synth::loadSfzFile(const fs::path& file) { clear(); - const std::lock_guard disableCallback { callbackGuard }; + const std::lock_guard disableCallback { callbackGuard }; parser.parseFile(file); if (parser.getErrorCount() > 0) return false; @@ -496,7 +496,7 @@ void sfz::Synth::setSamplesPerBlock(int samplesPerBlock) noexcept { ASSERT(samplesPerBlock < config::maxBlockSize); - const std::lock_guard disableCallback { callbackGuard }; + const std::lock_guard disableCallback { callbackGuard }; this->samplesPerBlock = samplesPerBlock; for (auto& voice : voices) @@ -512,7 +512,7 @@ void sfz::Synth::setSamplesPerBlock(int samplesPerBlock) noexcept void sfz::Synth::setSampleRate(float sampleRate) noexcept { - const std::lock_guard disableCallback { callbackGuard }; + const std::lock_guard disableCallback { callbackGuard }; this->sampleRate = sampleRate; for (auto& voice : voices) @@ -541,7 +541,7 @@ void sfz::Synth::renderBlock(AudioSpan buffer) noexcept if (!callbackGuard.try_lock()) return; - DEFER { callbackGuard.unlock(); }; + DEFER(callbackGuard.unlock()); size_t numFrames = buffer.getNumFrames(); @@ -637,7 +637,7 @@ void sfz::Synth::noteOn(int delay, int noteNumber, uint8_t velocity) noexcept if (!callbackGuard.try_lock()) return; - DEFER { callbackGuard.unlock(); }; + DEFER(callbackGuard.unlock()); noteOnDispatch(delay, noteNumber, normalizedVelocity); } @@ -653,7 +653,7 @@ void sfz::Synth::noteOff(int delay, int noteNumber, uint8_t velocity) noexcept if (!callbackGuard.try_lock()) return; - DEFER { callbackGuard.unlock(); }; + DEFER(callbackGuard.unlock()); // FIXME: Some keyboards (e.g. Casio PX5S) can send a real note-off velocity. In this case, do we have a // way in sfz to specify that a release trigger should NOT use the note-on velocity? @@ -749,7 +749,7 @@ void sfz::Synth::cc(int delay, int ccNumber, uint8_t ccValue) noexcept if (!callbackGuard.try_lock()) return; - DEFER { callbackGuard.unlock(); }; + DEFER(callbackGuard.unlock()); if (ccNumber == config::resetCC) { resetAllControllers(delay); @@ -941,7 +941,7 @@ int sfz::Synth::getNumVoices() const noexcept void sfz::Synth::setNumVoices(int numVoices) noexcept { ASSERT(numVoices > 0); - const std::lock_guard disableCallback { callbackGuard }; + const std::lock_guard disableCallback { callbackGuard }; resetVoices(numVoices); } @@ -962,7 +962,7 @@ void sfz::Synth::resetVoices(int numVoices) void sfz::Synth::setOversamplingFactor(sfz::Oversampling factor) noexcept { - const std::lock_guard disableCallback { callbackGuard }; + const std::lock_guard disableCallback { callbackGuard }; for (auto& voice : voices) voice->reset(); @@ -979,7 +979,7 @@ sfz::Oversampling sfz::Synth::getOversamplingFactor() const noexcept void sfz::Synth::setPreloadSize(uint32_t preloadSize) noexcept { - const std::lock_guard disableCallback { callbackGuard }; + const std::lock_guard disableCallback { callbackGuard }; resources.filePool.setPreloadSize(preloadSize); } @@ -1010,7 +1010,7 @@ void sfz::Synth::resetAllControllers(int delay) noexcept if (!callbackGuard.try_lock()) return; - DEFER { callbackGuard.unlock(); }; + DEFER(callbackGuard.unlock()); for (auto& voice : voices) { voice->registerPitchWheel(delay, 0); @@ -1057,7 +1057,7 @@ void sfz::Synth::disableLogging() noexcept void sfz::Synth::allSoundOff() noexcept { - const std::lock_guard disableCallback { callbackGuard }; + const std::lock_guard disableCallback { callbackGuard }; for (auto& voice : voices) voice->reset();