From fa4da415f1788bed17eefd05ba8d49b8ad847613 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sat, 3 Jul 2021 22:40:00 +0200 Subject: [PATCH] Use std::vector rather than a raw array. --- src/lib/audio_filter.cc | 18 ++++-------------- src/lib/audio_filter.h | 7 ++++--- test/audio_filter_test.cc | 3 +-- 3 files changed, 9 insertions(+), 19 deletions(-) diff --git a/src/lib/audio_filter.cc b/src/lib/audio_filter.cc index 281ac9668..96af75674 100644 --- a/src/lib/audio_filter.cc +++ b/src/lib/audio_filter.cc @@ -30,11 +30,11 @@ using std::min; using std::shared_ptr; -/** @return array of floats which the caller must destroy with delete[] */ -float * +std::vector AudioFilter::sinc_blackman (float cutoff, bool invert) const { - float* ir = new float[_M + 1]; + auto ir = std::vector(); + ir.reserve(_M + 1); /* Impulse response */ @@ -73,12 +73,6 @@ AudioFilter::sinc_blackman (float cutoff, bool invert) const } -AudioFilter::~AudioFilter () -{ - delete[] _ir; -} - - shared_ptr AudioFilter::run (shared_ptr in) { @@ -147,15 +141,11 @@ BandPassAudioFilter::BandPassAudioFilter (float transition_bandwidth, float lowe auto lpf = sinc_blackman (lower, false); auto hpf = sinc_blackman (higher, true); - delete[] _ir; - _ir = new float[_M + 1]; + _ir.reserve (_M + 1); for (int i = 0; i <= _M; ++i) { _ir[i] = lpf[i] + hpf[i]; } - delete[] lpf; - delete[] hpf; - /* We now have a band-stop, so invert for band-pass */ for (int i = 0; i <= _M; ++i) { _ir[i] = -_ir[i]; diff --git a/src/lib/audio_filter.h b/src/lib/audio_filter.h index 922cc5fdb..86fdce590 100644 --- a/src/lib/audio_filter.h +++ b/src/lib/audio_filter.h @@ -23,6 +23,7 @@ #include +#include class AudioBuffers; @@ -43,7 +44,7 @@ public: } } - virtual ~AudioFilter (); + virtual ~AudioFilter () {} std::shared_ptr run (std::shared_ptr in); @@ -53,9 +54,9 @@ protected: friend struct audio_filter_impulse_kernel_test; friend struct audio_filter_impulse_input_test; - float* sinc_blackman (float cutoff, bool invert) const; + std::vector sinc_blackman (float cutoff, bool invert) const; - float* _ir = nullptr; + std::vector _ir; int _M; std::shared_ptr _tail; }; diff --git a/test/audio_filter_test.cc b/test/audio_filter_test.cc index d4fc550f1..a25878637 100644 --- a/test/audio_filter_test.cc +++ b/test/audio_filter_test.cc @@ -63,9 +63,8 @@ audio_filter_impulse_test_one (AudioFilter& f, int block_size, int num_blocks) BOOST_AUTO_TEST_CASE (audio_filter_impulse_kernel_test) { AudioFilter f (0.02); - delete[] f._ir; - f._ir = new float[f._M + 1]; + f._ir.reserve(f._M + 1); f._ir[0] = 1; for (int i = 1; i <= f._M; ++i) { f._ir[i] = 0; -- 2.30.2