Fix: add copy assignment functions to Wavetable and Wave

main
rkcf 2023-02-27 13:29:00 -06:00
parent 6aa0f72afb
commit 0b2d815509
2 changed files with 35 additions and 2 deletions

View File

@ -37,6 +37,18 @@ public:
m_tp = newWave.m_tp; 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() ~Wave()
{ {
delete m_tp; delete m_tp;

View File

@ -24,14 +24,35 @@ private:
Wave *m_wtp; /*!< Pointer to table of Waves */ Wave *m_wtp; /*!< Pointer to table of Waves */
public: 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++) Wavetable(std::string name) : m_name{name}, m_cid(m_nid++)
{ {
// Allocate Wavetable memory // Allocate Wavetable memory
m_wtp = new Wave[DEFAULT_N_WAVES]; 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; delete m_wtp;
m_wtp = nullptr; m_wtp = nullptr;
} }