diff options
author | David Robillard <d@drobilla.net> | 2018-08-11 13:39:10 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2018-09-29 14:46:18 +0200 |
commit | a0a6ee8f787c07fb7ca5b63a52131660eed26586 (patch) | |
tree | 87dd3fe5b44f520e862cead4f6c824d685ed01bc /chilbert | |
parent | 9fde28df12c6f9d45e9fcb60d6a609e416a1371a (diff) | |
download | chilbert-a0a6ee8f787c07fb7ca5b63a52131660eed26586.tar.gz chilbert-a0a6ee8f787c07fb7ca5b63a52131660eed26586.tar.bz2 chilbert-a0a6ee8f787c07fb7ca5b63a52131660eed26586.zip |
Fix BigBitVec assignment operators
Diffstat (limited to 'chilbert')
-rw-r--r-- | chilbert/BigBitVec.hpp | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/chilbert/BigBitVec.hpp b/chilbert/BigBitVec.hpp index 5053b1a..d25d1c8 100644 --- a/chilbert/BigBitVec.hpp +++ b/chilbert/BigBitVec.hpp @@ -101,20 +101,19 @@ public: CBigBitVec& operator=(const CBigBitVec& vec) { if (m_iRacks < vec.m_iRacks) { + m_iRacks = vec.m_iRacks; + m_pcRacks = std::unique_ptr<FBV_UINT[]>{new FBV_UINT[m_iRacks]}; + memcpy(m_pcRacks.get(), + vec.m_pcRacks.get(), + sizeof(CFixBitVec) * m_iRacks); + } else if (vec.m_iRacks > 0) { + m_iRacks = vec.m_iRacks; memcpy(m_pcRacks.get(), vec.m_pcRacks.get(), sizeof(CFixBitVec) * m_iRacks); } else { - if (m_pcRacks) { - if (vec.m_pcRacks) { - memcpy(m_pcRacks.get(), - vec.m_pcRacks.get(), - sizeof(CFixBitVec) * vec.m_iRacks); - } - memset(m_pcRacks.get() + vec.m_iRacks, - 0, - sizeof(CFixBitVec) * (m_iRacks - vec.m_iRacks)); - } + m_iRacks = 0; + m_pcRacks.reset(); } return *this; @@ -124,15 +123,23 @@ public: CBigBitVec& operator=(const CFixBitVec& vec) { + if (!m_pcRacks) { + m_pcRacks = std::unique_ptr<FBV_UINT[]>{new FBV_UINT[1]}; + } + + m_iRacks = 1; m_pcRacks[0] = vec.rack(); - memset(m_pcRacks.get() + 1, 0, sizeof(FBV_UINT) * (m_iRacks - 1)); return *this; } CBigBitVec& operator=(const FBV_UINT j) { + if (!m_pcRacks) { + m_pcRacks = std::unique_ptr<FBV_UINT[]>{new FBV_UINT[1]}; + } + + m_iRacks = 1; m_pcRacks[0] = j; - memset(m_pcRacks.get() + 1, 0, sizeof(CFixBitVec) * (m_iRacks - 1)); return *this; } |