aboutsummaryrefslogtreecommitdiffstats
path: root/chilbert
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2018-08-05 15:39:44 +0200
committerDavid Robillard <d@drobilla.net>2018-08-07 20:01:29 +0200
commitd8334c143988b0ae1405932122665800e1c9fc68 (patch)
tree000c014b271bc9ee7b799f8a8e49a3068e1395b8 /chilbert
parenta7667a2540a9336c141a5f26a802a61bd719f79b (diff)
downloadchilbert-d8334c143988b0ae1405932122665800e1c9fc68.tar.gz
chilbert-d8334c143988b0ae1405932122665800e1c9fc68.tar.bz2
chilbert-d8334c143988b0ae1405932122665800e1c9fc68.zip
Use unique_ptr to manage BigBitVec memory
Diffstat (limited to 'chilbert')
-rw-r--r--chilbert/BigBitVec.hpp81
1 files changed, 22 insertions, 59 deletions
diff --git a/chilbert/BigBitVec.hpp b/chilbert/BigBitVec.hpp
index 5e29d1a..129f5d8 100644
--- a/chilbert/BigBitVec.hpp
+++ b/chilbert/BigBitVec.hpp
@@ -24,6 +24,7 @@
#include <cassert>
#include <cstring>
+#include <memory>
#define BBV_MIN(a,b) ((a)<(b)?(a):(b))
#define BBV_MAX(a,b) ((a)>(b)?(a):(b))
@@ -40,18 +41,9 @@ public:
CBigBitVec(
int iBits = FBV_BITS
)
+ : m_pcRacks{new FBV_UINT[iBits == 0 ? 0 : FBVS_NEEDED(iBits)]}
+ , m_iRacks{iBits == 0 ? 0 : FBVS_NEEDED(iBits)}
{
- // Determine number of racks required.
- m_iRacks = iBits == 0 ? 0 : FBVS_NEEDED(iBits);
-
- // Allocate the memory.
- if (m_iRacks > 0) {
- m_pcRacks = new FBV_UINT[m_iRacks];
- } else {
- m_pcRacks = nullptr;
- }
-
- return;
}
@@ -59,49 +51,29 @@ public:
CBigBitVec(
const CBigBitVec &cBBV
)
+ : m_pcRacks{new FBV_UINT[cBBV.m_iRacks]}
+ , m_iRacks{cBBV.m_iRacks}
{
- m_iRacks = cBBV.m_iRacks;
- m_pcRacks = new FBV_UINT[m_iRacks];
-
- // Copy the rack values.
if (cBBV.m_pcRacks) {
- memcpy(m_pcRacks, cBBV.m_pcRacks, sizeof(FBV_UINT) * m_iRacks);
+ memcpy(m_pcRacks.get(),
+ cBBV.m_pcRacks.get(),
+ sizeof(FBV_UINT) * m_iRacks);
}
-
- return;
}
// Move construct.
CBigBitVec(
CBigBitVec &&cBBV
- )
- {
- m_iRacks = cBBV.m_iRacks;
- m_pcRacks = cBBV.m_pcRacks;
- cBBV.m_iRacks = 0;
- cBBV.m_pcRacks = nullptr;
- }
+ ) = default;
// Copy constructor.
CBigBitVec(
const CFixBitVec &cFBV
)
+ : m_pcRacks{new FBV_UINT[1]}
+ , m_iRacks{1}
{
- m_iRacks = 1;
- m_pcRacks = new FBV_UINT[m_iRacks];
-
m_pcRacks[0] = cFBV.rack();
-
- return;
- }
-
-
- // Destructor
- ~CBigBitVec()
- {
- delete [] m_pcRacks;
-
- return;
}
@@ -118,7 +90,7 @@ public:
reset()
{
- memset(m_pcRacks, 0, sizeof(CFixBitVec) * m_iRacks);
+ memset(m_pcRacks.get(), 0, sizeof(CFixBitVec) * m_iRacks);
return (*this);
}
@@ -157,15 +129,15 @@ public:
{
if ( m_iRacks < cBBV.m_iRacks )
{
- memcpy(m_pcRacks, cBBV.m_pcRacks, sizeof(CFixBitVec) * m_iRacks);
+ memcpy(m_pcRacks.get(), cBBV.m_pcRacks.get(), sizeof(CFixBitVec) * m_iRacks);
} else {
if (m_pcRacks) {
if (cBBV.m_pcRacks) {
- memcpy(m_pcRacks,
- cBBV.m_pcRacks,
+ memcpy(m_pcRacks.get(),
+ cBBV.m_pcRacks.get(),
sizeof(CFixBitVec) * cBBV.m_iRacks);
}
- memset(m_pcRacks + cBBV.m_iRacks,
+ memset(m_pcRacks.get() + cBBV.m_iRacks,
0,
sizeof(CFixBitVec) * (m_iRacks - cBBV.m_iRacks));
}
@@ -176,24 +148,15 @@ public:
CBigBitVec &
operator=(
CBigBitVec &&cBBV
- )
- {
- if (&cBBV != this) {
- m_iRacks = cBBV.m_iRacks;
- m_pcRacks = cBBV.m_pcRacks;
- cBBV.m_iRacks = 0;
- cBBV.m_pcRacks = nullptr;
- }
+ ) = default;
- return (*this);
- }
CBigBitVec &
operator=(
const CFixBitVec &cFBV
)
{
m_pcRacks[0] = cFBV.rack();
- memset(m_pcRacks + 1, 0, sizeof(FBV_UINT) * (m_iRacks - 1));
+ memset(m_pcRacks.get() + 1, 0, sizeof(FBV_UINT) * (m_iRacks - 1));
return (*this);
}
CBigBitVec &
@@ -202,7 +165,7 @@ public:
)
{
m_pcRacks[0] = j;
- memset(m_pcRacks + 1, 0, sizeof(CFixBitVec) * (m_iRacks - 1));
+ memset(m_pcRacks.get() + 1, 0, sizeof(CFixBitVec) * (m_iRacks - 1));
return (*this);
}
@@ -567,12 +530,12 @@ public:
FBV_UINT *
racks()
{
- return m_pcRacks;
+ return m_pcRacks.get();
}
const FBV_UINT *
racks() const
{
- return m_pcRacks;
+ return m_pcRacks.get();
}
@@ -622,7 +585,7 @@ private:
}
- FBV_UINT *m_pcRacks;
+ std::unique_ptr<FBV_UINT[]> m_pcRacks;
int m_iRacks;
};