From 22557af4bdac3a616648ffb6818d53065ccf2e83 Mon Sep 17 00:00:00 2001 From: paulfd Date: Fri, 20 Sep 2019 23:32:05 +0200 Subject: [PATCH] Removed structured bindings from the filters --- sfizz/OnePoleFilter.h | 44 +++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/sfizz/OnePoleFilter.h b/sfizz/OnePoleFilter.h index 809c7b36..6c147199 100644 --- a/sfizz/OnePoleFilter.h +++ b/sfizz/OnePoleFilter.h @@ -53,42 +53,58 @@ public: int processLowpass(absl::Span input, absl::Span lowpass) { - for (auto [in, out] = std::pair(input.begin(), lowpass.begin()); - in < input.end() && out < lowpass.end(); in++, out++) { + auto in = input.begin(); + auto out = lowpass.begin(); + auto size = std::min(input.size(), lowpass.size()); + auto sentinel = in.begin() + size; + while (in < sentinel) { oneLowpass(in, out); + in++; + out++; } - return std::min(input.size(), lowpass.size()); + return size; } int processHighpass(absl::Span input, absl::Span highpass) { - for (auto [in, out] = std::pair(input.begin(), highpass.begin()); - in < input.end() && out < highpass.end(); in++, out++) { + auto in = input.begin(); + auto out = highpass.begin(); + auto size = std::min(input.size(), highpass.size()); + auto sentinel = in.begin() + size; + while (in < sentinel) { oneHighpass(in, out); + in++; + out++; } - return std::min(input.size(), highpass.size()); + return size; } int processLowpassVariableGain(absl::Span input, absl::Span lowpass, absl::Span gain) { - for (auto [in, out, g] = std::tuple(input.begin(), lowpass.begin(), gain.begin()); - in < input.end() && out < lowpass.end() && g < gain.end(); in++, out++, g++) { + auto in = input.begin(); + auto out = lowpass.begin(); + auto g = gain.begin(); + auto size = min(input.size(), lowpass.size(), gain.size()); + auto sentinel = in.begin() + size; + while (in < sentinel) { setGain(*g); oneLowpass(in, out); } - - return std::min({ input.size(), lowpass.size(), gain.size() }); + return size; } int processHighpassVariableGain(absl::Span input, absl::Span highpass, absl::Span gain) { - for (auto [in, out, g] = std::tuple(input.begin(), highpass.begin(), gain.begin()); - in < input.end() && out < highpass.end() && g < gain.end(); in++, out++, g++) { + auto in = input.begin(); + auto out = highpass.begin(); + auto g = gain.begin(); + auto size = min(input.size(), highpass.size(), gain.size()); + auto sentinel = in.begin() + size; + while (in < sentinel) { setGain(*g); oneHighpass(in, out); } - - return std::min({ input.size(), highpass.size(), gain.size() }); + return size; } void reset() { state = 0.0; }