summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2017-04-21 16:10:35 +0200
committerJan Holesovsky <kendy@collabora.com>2017-04-21 16:10:35 +0200
commite659128b744b88dbc72f142c2d8564a1243b5ad4 (patch)
tree7787997e702d35c2382931b02ec596110e3f0e78 /sc
parent8b929a7124ae42d019ea902a4a54f9911f0b2867 (diff)
new loplugin: useuniqueptr: sc part 1 (only the ScMarkArray part)
Change-Id: I24a837c79aaef2246929bb194635f01b4ddedb0b
Diffstat (limited to 'sc')
-rw-r--r--sc/inc/markarr.hxx7
-rw-r--r--sc/source/core/data/markarr.cxx27
2 files changed, 14 insertions, 20 deletions
diff --git a/sc/inc/markarr.hxx b/sc/inc/markarr.hxx
index 2f2e27984486..f92fa94df60c 100644
--- a/sc/inc/markarr.hxx
+++ b/sc/inc/markarr.hxx
@@ -21,6 +21,7 @@
#define INCLUDED_SC_INC_MARKARR_HXX
#include "address.hxx"
+#include <memory>
#define SC_MARKARRAY_DELTA 4
@@ -32,9 +33,9 @@ struct ScMarkEntry
class ScMarkArray
{
- SCSIZE nCount;
- SCSIZE nLimit;
- ScMarkEntry* pData;
+ SCSIZE nCount;
+ SCSIZE nLimit;
+ std::unique_ptr<ScMarkEntry[]> pData;
friend class ScMarkArrayIter;
friend class ScDocument; // for FillInfo
diff --git a/sc/source/core/data/markarr.cxx b/sc/source/core/data/markarr.cxx
index 62f087cbab78..6266d5afd970 100644
--- a/sc/source/core/data/markarr.cxx
+++ b/sc/source/core/data/markarr.cxx
@@ -35,16 +35,14 @@ ScMarkArray::ScMarkArray() :
ScMarkArray::ScMarkArray( ScMarkArray&& rArray ) :
nCount( rArray.nCount ),
nLimit( rArray.nLimit ),
- pData( rArray.pData )
+ pData( rArray.pData.release() )
{
rArray.nCount = 0;
rArray.nLimit = 0;
- rArray.pData = nullptr;
}
ScMarkArray::~ScMarkArray()
{
- delete[] pData;
}
void ScMarkArray::Reset( bool bMarked, SCSIZE nNeeded )
@@ -52,12 +50,10 @@ void ScMarkArray::Reset( bool bMarked, SCSIZE nNeeded )
// always create pData here
// (or have separate method to ensure pData)
- delete[] pData;
-
assert(nNeeded);
nLimit = nNeeded;
nCount = 1;
- pData = new ScMarkEntry[nNeeded];
+ pData.reset( new ScMarkEntry[nNeeded] );
pData[0].nRow = MAXROW;
pData[0].bMarked = bMarked;
}
@@ -129,9 +125,8 @@ void ScMarkArray::SetMarkArea( SCROW nStartRow, SCROW nEndRow, bool bMarked )
if ( nLimit < nNeeded )
nLimit = nNeeded;
ScMarkEntry* pNewData = new ScMarkEntry[nLimit];
- memcpy( pNewData, pData, nCount*sizeof(ScMarkEntry) );
- delete[] pData;
- pData = pNewData;
+ memcpy( pNewData, pData.get(), nCount*sizeof(ScMarkEntry) );
+ pData.reset( pNewData );
}
}
@@ -207,7 +202,7 @@ void ScMarkArray::SetMarkArea( SCROW nStartRow, SCROW nEndRow, bool bMarked )
}
if ( ni < nj )
{ // remove entries
- memmove( pData + ni, pData + nj, (nCount - nj) * sizeof(ScMarkEntry) );
+ memmove( pData.get() + ni, pData.get() + nj, (nCount - nj) * sizeof(ScMarkEntry) );
nCount -= nj - ni;
}
}
@@ -217,11 +212,11 @@ void ScMarkArray::SetMarkArea( SCROW nStartRow, SCROW nEndRow, bool bMarked )
if ( nInsert <= nCount )
{
if ( !bSplit )
- memmove( pData + nInsert + 1, pData + nInsert,
+ memmove( pData.get() + nInsert + 1, pData.get() + nInsert,
(nCount - nInsert) * sizeof(ScMarkEntry) );
else
{
- memmove( pData + nInsert + 2, pData + nInsert,
+ memmove( pData.get() + nInsert + 2, pData.get() + nInsert,
(nCount - nInsert) * sizeof(ScMarkEntry) );
pData[nInsert+1] = pData[nInsert-1];
nCount++;
@@ -306,15 +301,13 @@ bool ScMarkArray::HasEqualRowsMarked( const ScMarkArray& rOther ) const
void ScMarkArray::CopyMarksTo( ScMarkArray& rDestMarkArray ) const
{
- delete[] rDestMarkArray.pData;
-
if (pData)
{
- rDestMarkArray.pData = new ScMarkEntry[nCount];
- memcpy( rDestMarkArray.pData, pData, nCount * sizeof(ScMarkEntry) );
+ rDestMarkArray.pData.reset( new ScMarkEntry[nCount] );
+ memcpy( rDestMarkArray.pData.get(), pData.get(), nCount * sizeof(ScMarkEntry) );
}
else
- rDestMarkArray.pData = nullptr;
+ rDestMarkArray.pData.reset();
rDestMarkArray.nCount = rDestMarkArray.nLimit = nCount;
}