Use std::vector rather than a raw array.
authorCarl Hetherington <cth@carlh.net>
Sat, 3 Jul 2021 20:40:00 +0000 (22:40 +0200)
committerCarl Hetherington <cth@carlh.net>
Sat, 3 Jul 2021 20:48:07 +0000 (22:48 +0200)
src/lib/audio_filter.cc
src/lib/audio_filter.h
test/audio_filter_test.cc

index 281ac966831c8e80de73609a96a12132a763d67a..96af75674cc1369d72f781b25078e5761ad2d495 100644 (file)
@@ -30,11 +30,11 @@ using std::min;
 using std::shared_ptr;
 
 
 using std::shared_ptr;
 
 
-/** @return array of floats which the caller must destroy with delete[] */
-float *
+std::vector<float>
 AudioFilter::sinc_blackman (float cutoff, bool invert) const
 {
 AudioFilter::sinc_blackman (float cutoff, bool invert) const
 {
-       float* ir = new float[_M + 1];
+       auto ir = std::vector<float>();
+       ir.reserve(_M + 1);
 
        /* Impulse response */
 
 
        /* Impulse response */
 
@@ -73,12 +73,6 @@ AudioFilter::sinc_blackman (float cutoff, bool invert) const
 }
 
 
 }
 
 
-AudioFilter::~AudioFilter ()
-{
-       delete[] _ir;
-}
-
-
 shared_ptr<AudioBuffers>
 AudioFilter::run (shared_ptr<const AudioBuffers> in)
 {
 shared_ptr<AudioBuffers>
 AudioFilter::run (shared_ptr<const AudioBuffers> in)
 {
@@ -147,15 +141,11 @@ BandPassAudioFilter::BandPassAudioFilter (float transition_bandwidth, float lowe
        auto lpf = sinc_blackman (lower, false);
        auto hpf = sinc_blackman (higher, true);
 
        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];
        }
 
        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];
        /* We now have a band-stop, so invert for band-pass */
        for (int i = 0; i <= _M; ++i) {
                _ir[i] = -_ir[i];
index 922cc5fdb483fdec278721becf8f4528776600dd..86fdce590cf0a5dc6eddba42ad8566779c332c73 100644 (file)
@@ -23,6 +23,7 @@
 
 
 #include <memory>
 
 
 #include <memory>
+#include <vector>
 
 
 class AudioBuffers;
 
 
 class AudioBuffers;
@@ -43,7 +44,7 @@ public:
                }
        }
 
                }
        }
 
-       virtual ~AudioFilter ();
+       virtual ~AudioFilter () {}
 
        std::shared_ptr<AudioBuffers> run (std::shared_ptr<const AudioBuffers> in);
 
 
        std::shared_ptr<AudioBuffers> run (std::shared_ptr<const AudioBuffers> in);
 
@@ -53,9 +54,9 @@ protected:
        friend struct audio_filter_impulse_kernel_test;
        friend struct audio_filter_impulse_input_test;
 
        friend struct audio_filter_impulse_kernel_test;
        friend struct audio_filter_impulse_input_test;
 
-       float* sinc_blackman (float cutoff, bool invert) const;
+       std::vector<float> sinc_blackman (float cutoff, bool invert) const;
 
 
-       float* _ir = nullptr;
+       std::vector<float> _ir;
        int _M;
        std::shared_ptr<AudioBuffers> _tail;
 };
        int _M;
        std::shared_ptr<AudioBuffers> _tail;
 };
index d4fc550f16e7e5ae9aef244fb5b48bf03dd0dfc6..a258786374e0a22a1a3beea6b50f8017837da967 100644 (file)
@@ -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);
 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;
        f._ir[0] = 1;
        for (int i = 1; i <= f._M; ++i) {
                f._ir[i] = 0;