From 0b2d815509ebc3a22b958796ab43792fc536e3cf Mon Sep 17 00:00:00 2001 From: rkcf Date: Mon, 27 Feb 2023 13:29:00 -0600 Subject: [PATCH] Fix: add copy assignment functions to Wavetable and Wave --- src/wave.h | 12 ++++++++++++ src/wavetable.h | 25 +++++++++++++++++++++++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/wave.h b/src/wave.h index d2df340..a9720e5 100644 --- a/src/wave.h +++ b/src/wave.h @@ -37,6 +37,18 @@ public: m_tp = newWave.m_tp; } + Wave &operator=(const Wave &newWave) + { + if (this == &newWave) return *this; + delete m_tp; + m_tp = nullptr; + m_tp = new float_t[DEFAULT_N_WAVES]; + for (uint16_t i = 0; i < DEFAULT_N_WAVES; i++) { + *(m_tp + i) = newWave.m_tp[i]; + } + return *this; + } + ~Wave() { delete m_tp; diff --git a/src/wavetable.h b/src/wavetable.h index c30db47..300a5bb 100644 --- a/src/wavetable.h +++ b/src/wavetable.h @@ -24,14 +24,35 @@ private: Wave *m_wtp; /*!< Pointer to table of Waves */ public: - const uint16_t m_cid; /*!< Unique ID of wavetable */ + uint16_t m_cid; /*!< Unique ID of wavetable */ Wavetable(std::string name) : m_name{name}, m_cid(m_nid++) { // Allocate Wavetable memory m_wtp = new Wave[DEFAULT_N_WAVES]; } - ~Wavetable() { + Wavetable(const Wavetable& newWavetable) + { + m_nid = newWavetable.m_nid; + m_cid = newWavetable.m_cid; + m_name = newWavetable.m_name; + m_wtp = newWavetable.m_wtp; + } + + Wavetable& operator=(const Wavetable& newWavetable) + { + if (this == &newWavetable) return *this; + delete m_wtp; + m_wtp = nullptr; + m_wtp = new Wave[DEFAULT_N_WAVES]; + for (uint16_t i = 0; i < DEFAULT_N_WAVES; i++) { + *(m_wtp + i) = newWavetable.m_wtp[i]; + } + return *this; + } + + ~Wavetable() + { delete m_wtp; m_wtp = nullptr; }