aboutsummaryrefslogtreecommitdiffstats
path: root/chilbert
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2018-08-11 13:39:10 +0200
committerDavid Robillard <d@drobilla.net>2018-09-29 14:46:18 +0200
commita0a6ee8f787c07fb7ca5b63a52131660eed26586 (patch)
tree87dd3fe5b44f520e862cead4f6c824d685ed01bc /chilbert
parent9fde28df12c6f9d45e9fcb60d6a609e416a1371a (diff)
downloadchilbert-a0a6ee8f787c07fb7ca5b63a52131660eed26586.tar.gz
chilbert-a0a6ee8f787c07fb7ca5b63a52131660eed26586.tar.bz2
chilbert-a0a6ee8f787c07fb7ca5b63a52131660eed26586.zip
Fix BigBitVec assignment operators
Diffstat (limited to 'chilbert')
-rw-r--r--chilbert/BigBitVec.hpp31
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;
}