From d8334c143988b0ae1405932122665800e1c9fc68 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 5 Aug 2018 15:39:44 +0200 Subject: Use unique_ptr to manage BigBitVec memory --- chilbert/BigBitVec.hpp | 81 ++++++++++++++------------------------------------ 1 file changed, 22 insertions(+), 59 deletions(-) (limited to 'chilbert/BigBitVec.hpp') 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 #include +#include #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 m_pcRacks; int m_iRacks; }; -- cgit v1.2.1