summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2012-02-10 17:26:44 +0100
committerEike Rathke <erack@redhat.com>2012-02-10 17:27:27 +0100
commit43aa1115c88f1300c73337a3622c2c03faa699f7 (patch)
treedf60e4e395da7cc4f74534a784bd3286821fe702 /sc
parentd4a31e6ae28825a42cb8b1935fdfd777cda41e8f (diff)
changes to "convert detdata.cxx in SC module to boost:ptr_vector"
* for includes from other modules use <> instead of "", i.e. <boost/ptr_container/ptr_vector.hpp> * use size_t instead of int for container positions and count * no need for DeleteAndDestroy(), in fact delete p followed by ptr_vector::erase() attempted to delete the instance twice and would crash * adapted places that accessed DeleteAndDestroy() to operate on the vector instead * introduced GetDataVector() for that * changed the DeleteOnTab() loop that used DeleteAndDestroy() to properly iterate over the container instead * changed UpdateReference() to a loop using iterator * changed operator==() to use size_t instead of sal_uInt16 * note aside: mixing sal_uInt16 with a container's size isn't a good idea * adapted places that access Count() and GetObject() to use size_t instead of sal_uInt16 * made GetObject() const and return const ScDetOpData* * changed indentation to 4 spaces per level
Diffstat (limited to 'sc')
-rw-r--r--sc/inc/detdata.hxx10
-rw-r--r--sc/source/core/tool/detdata.cxx40
-rw-r--r--sc/source/filter/xml/xmlexprt.cxx8
-rw-r--r--sc/source/ui/docshell/docfunc.cxx6
-rw-r--r--sc/source/ui/undo/undocell.cxx8
5 files changed, 29 insertions, 43 deletions
diff --git a/sc/inc/detdata.hxx b/sc/inc/detdata.hxx
index 891c803d8b18..6ba78c706f34 100644
--- a/sc/inc/detdata.hxx
+++ b/sc/inc/detdata.hxx
@@ -30,8 +30,8 @@
#define SC_DETDATA_HXX
#include <svl/svarray.hxx>
+#include <boost/ptr_container/ptr_vector.hpp>
#include "global.hxx"
-#include "boost/ptr_container/ptr_vector.hpp"
//------------------------------------------------------------------------
@@ -79,7 +79,7 @@ typedef boost::ptr_vector<ScDetOpData> ScDetOpDataVector;
class ScDetOpList
{
sal_Bool bHasAddError; // updated in append
- ScDetOpDataVector aDetOpDataVector;
+ ScDetOpDataVector aDetOpDataVector;
public:
ScDetOpList() : bHasAddError(false) {}
@@ -93,11 +93,11 @@ public:
sal_Bool operator==( const ScDetOpList& r ) const; // for ref-undo
void Append( ScDetOpData* pData );
- ScDetOpData* GetObject(int i);
- void DeleteAndDestroy(int i);
+ ScDetOpDataVector& GetDataVector() { return aDetOpDataVector; }
+ const ScDetOpData* GetObject( size_t nPos ) const;
sal_Bool HasAddError() const { return bHasAddError; }
- int Count() const { return aDetOpDataVector.size(); }
+ size_t Count() const { return aDetOpDataVector.size(); }
};
diff --git a/sc/source/core/tool/detdata.cxx b/sc/source/core/tool/detdata.cxx
index d23208c22cc3..5a0ed3ac6820 100644
--- a/sc/source/core/tool/detdata.cxx
+++ b/sc/source/core/tool/detdata.cxx
@@ -40,33 +40,30 @@
ScDetOpList::ScDetOpList(const ScDetOpList& rList) :
bHasAddError( false )
{
- sal_uInt16 nCount = rList.Count();
+ size_t nCount = rList.Count();
- for (sal_uInt16 i=0; i<nCount; i++)
+ for (size_t i=0; i<nCount; i++)
Append( new ScDetOpData(rList.aDetOpDataVector[i]) );
}
void ScDetOpList::DeleteOnTab( SCTAB nTab )
{
- sal_uInt16 nPos = 0;
- while ( nPos < Count() )
+ for (ScDetOpDataVector::iterator it = aDetOpDataVector.begin(); it != aDetOpDataVector.end(); /*noop*/ )
{
// look for operations on the deleted sheet
-
- if ( GetObject(nPos)->GetPos().Tab() == nTab )
- DeleteAndDestroy(nPos);
+ if (it->GetPos().Tab() == nTab)
+ it = aDetOpDataVector.erase( it);
else
- ++nPos;
+ ++it;
}
}
void ScDetOpList::UpdateReference( ScDocument* pDoc, UpdateRefMode eUpdateRefMode,
const ScRange& rRange, SCsCOL nDx, SCsROW nDy, SCsTAB nDz )
{
- sal_uInt16 nCount = Count();
- for (sal_uInt16 i=0; i<nCount; i++)
+ for (ScDetOpDataVector::iterator it = aDetOpDataVector.begin(); it != aDetOpDataVector.end(); ++it )
{
- ScAddress aPos = GetObject(i)->GetPos();
+ ScAddress aPos = it->GetPos();
SCCOL nCol1 = aPos.Col();
SCROW nRow1 = aPos.Row();
SCTAB nTab1 = aPos.Tab();
@@ -80,7 +77,7 @@ void ScDetOpList::UpdateReference( ScDocument* pDoc, UpdateRefMode eUpdateRefMod
rRange.aEnd.Col(), rRange.aEnd.Row(), rRange.aEnd.Tab(), nDx, nDy, nDz,
nCol1, nRow1, nTab1, nCol2, nRow2, nTab2 );
if ( eRes != UR_NOTHING )
- GetObject(i)->SetPos( ScAddress( nCol1, nRow1, nTab1 ) );
+ it->SetPos( ScAddress( nCol1, nRow1, nTab1 ) );
}
}
@@ -97,29 +94,18 @@ sal_Bool ScDetOpList::operator==( const ScDetOpList& r ) const
{
// fuer Ref-Undo
- sal_uInt16 nCount = Count();
+ size_t nCount = Count();
sal_Bool bEqual = ( nCount == r.Count() );
- for (sal_uInt16 i=0; i<nCount && bEqual; i++) // Reihenfolge muss auch gleich sein
+ for (size_t i=0; i<nCount && bEqual; i++) // Reihenfolge muss auch gleich sein
if ( !(aDetOpDataVector[i] == r.aDetOpDataVector[i]) ) // Eintraege unterschiedlich ?
bEqual = false;
return bEqual;
}
-ScDetOpData* ScDetOpList::GetObject(int i)
+const ScDetOpData* ScDetOpList::GetObject( size_t nPos ) const
{
- return &aDetOpDataVector[i];
+ return &aDetOpDataVector[nPos];
}
-void ScDetOpList::DeleteAndDestroy(int i)
-{
- const ScDetOpData* p = &aDetOpDataVector[i];
- if (p != NULL)
- {
- delete p;
- aDetOpDataVector.erase(aDetOpDataVector.begin() + i);
- }
-}
-
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/filter/xml/xmlexprt.cxx b/sc/source/filter/xml/xmlexprt.cxx
index 8a8dde71172f..01689d251dc7 100644
--- a/sc/source/filter/xml/xmlexprt.cxx
+++ b/sc/source/filter/xml/xmlexprt.cxx
@@ -910,17 +910,17 @@ void ScXMLExport::GetDetectiveOpList( ScMyDetectiveOpContainer& rDetOp )
ScDetOpList* pOpList(pDoc->GetDetOpList());
if( pOpList )
{
- sal_uInt32 nCount(pOpList->Count());
- for( sal_uInt32 nIndex = 0; nIndex < nCount; ++nIndex )
+ size_t nCount = pOpList->Count();
+ for (size_t nIndex = 0; nIndex < nCount; ++nIndex )
{
- ScDetOpData* pDetData(pOpList->GetObject( static_cast<sal_uInt16>(nIndex) ));
+ const ScDetOpData* pDetData = pOpList->GetObject( nIndex);
if( pDetData )
{
const ScAddress& rDetPos = pDetData->GetPos();
SCTAB nTab = rDetPos.Tab();
if ( nTab < pDoc->GetTableCount() )
{
- rDetOp.AddOperation( pDetData->GetOperation(), rDetPos, nIndex );
+ rDetOp.AddOperation( pDetData->GetOperation(), rDetPos, static_cast<sal_uInt32>( nIndex) );
// cells with detective operations are written even if empty
pSharedData->SetLastColumn( nTab, rDetPos.Col() );
diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx
index ffc4730ceb74..8b9d0688f275 100644
--- a/sc/source/ui/docshell/docfunc.cxx
+++ b/sc/source/ui/docshell/docfunc.cxx
@@ -490,10 +490,10 @@ sal_Bool ScDocFunc::DetectiveRefresh( sal_Bool bAutomatic )
// Wiederholen
- sal_uInt16 nCount = pList->Count();
- for (sal_uInt16 i=0; i<nCount; i++)
+ size_t nCount = pList->Count();
+ for (size_t i=0; i < nCount; ++i)
{
- ScDetOpData* pData = pList->GetObject(i);
+ const ScDetOpData* pData = pList->GetObject(i);
if (pData)
{
ScAddress aPos = pData->GetPos();
diff --git a/sc/source/ui/undo/undocell.cxx b/sc/source/ui/undo/undocell.cxx
index 321cf789bf68..114964220a19 100644
--- a/sc/source/ui/undo/undocell.cxx
+++ b/sc/source/ui/undo/undocell.cxx
@@ -1028,10 +1028,10 @@ void ScUndoDetective::Undo()
ScDetOpList* pList = pDoc->GetDetOpList();
if (pList && pList->Count())
{
- sal_uInt16 nPos = pList->Count() - 1;
- ScDetOpData* pData = pList->GetObject(nPos);
- if ( pData->GetOperation() == (ScDetOpType) nAction && pData->GetPos() == aPos )
- pList->DeleteAndDestroy( nPos );
+ ScDetOpDataVector& rVec = pList->GetDataVector();
+ ScDetOpDataVector::iterator it = rVec.begin() + rVec.size() - 1;
+ if ( it->GetOperation() == (ScDetOpType) nAction && it->GetPos() == aPos )
+ rVec.erase( it);
else
{
OSL_FAIL("Detektiv-Eintrag in der Liste nicht gefunden");