diff options
author | Noel Grandin <noel@peralex.com> | 2012-07-09 16:53:50 +0200 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2012-07-12 14:12:31 +0200 |
commit | 8cfdbe66c1973cec801a466209291aecc80650c6 (patch) | |
tree | aaab5edeb7a6bf8d673e9e96fe731b6fb1be254f /sc | |
parent | 38b0ec8519c8692251c8973c724ef2097f12eefa (diff) |
Convert SV_DECL_PTRARR_SORT(ScValidationEntries_Impl) to std::set
Change-Id: I2ccd12b8e9516f59a39db7c9a123b2b76a0b6c28
Diffstat (limited to 'sc')
-rw-r--r-- | sc/inc/validat.hxx | 25 | ||||
-rw-r--r-- | sc/source/core/data/documen2.cxx | 8 | ||||
-rw-r--r-- | sc/source/core/data/documen4.cxx | 5 | ||||
-rw-r--r-- | sc/source/core/data/validat.cxx | 51 |
4 files changed, 40 insertions, 49 deletions
diff --git a/sc/inc/validat.hxx b/sc/inc/validat.hxx index b8a661ffefee..8272988db74f 100644 --- a/sc/inc/validat.hxx +++ b/sc/inc/validat.hxx @@ -151,10 +151,10 @@ public: sal_Bool EqualEntries( const ScValidationData& r ) const; // for undo - // sort (using PTRARR) by index + // sort (using std::set) by index // operator== only for sorting - sal_Bool operator ==( const ScValidationData& r ) const { return nKey == r.nKey; } - sal_Bool operator < ( const ScValidationData& r ) const { return nKey < r.nKey; } + bool operator ==( const ScValidationData& r ) const { return nKey == r.nKey; } + bool operator < ( const ScValidationData& r ) const { return nKey < r.nKey; } private: /** Tries to fill the passed collection with list validation entries. @@ -180,20 +180,21 @@ private: // list of contitions: // -typedef ScValidationData* ScValidationDataPtr; - -SV_DECL_PTRARR_SORT(ScValidationEntries_Impl, ScValidationDataPtr, SC_COND_GROW) +struct CompareScValidationDataPtr +{ + bool operator()( ScValidationData* const& lhs, ScValidationData* const& rhs ) const { return (*lhs)<(*rhs); } +}; -class ScValidationDataList : public ScValidationEntries_Impl +class ScValidationDataList : public std::set<ScValidationData*, CompareScValidationDataPtr> { public: - ScValidationDataList() {} - ScValidationDataList(const ScValidationDataList& rList); - ScValidationDataList(ScDocument* pNewDoc, const ScValidationDataList& rList); - ~ScValidationDataList() {} + ScValidationDataList() {} + ScValidationDataList(const ScValidationDataList& rList); + ScValidationDataList(ScDocument* pNewDoc, const ScValidationDataList& rList); + ~ScValidationDataList() {} void InsertNew( ScValidationData* pNew ) - { if (!Insert(pNew)) delete pNew; } + { if (!insert(pNew).second) delete pNew; } ScValidationData* GetData( sal_uInt32 nKey ); diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx index 6b3aa3cf287b..d537c3577f01 100644 --- a/sc/source/core/data/documen2.cxx +++ b/sc/source/core/data/documen2.cxx @@ -409,7 +409,9 @@ ScDocument::~ScDocument() if (pValidationList) { - pValidationList->DeleteAndDestroy( 0, pValidationList->Count() ); + for( ScValidationDataList::iterator it = pValidationList->begin(); it != pValidationList->end(); ++it ) + delete *it; + pValidationList->clear(); DELETEZ(pValidationList); } delete pRangeName; @@ -452,7 +454,9 @@ void ScDocument::InitClipPtrs( ScDocument* pSourceDoc ) if (pValidationList) { - pValidationList->DeleteAndDestroy( 0, pValidationList->Count() ); + for(ScValidationDataList::iterator it = pValidationList->begin(); it != pValidationList->end(); ++it ) + delete *it; + pValidationList->clear(); DELETEZ(pValidationList); } diff --git a/sc/source/core/data/documen4.cxx b/sc/source/core/data/documen4.cxx index 8eca48528ea9..41e058a48cfb 100644 --- a/sc/source/core/data/documen4.cxx +++ b/sc/source/core/data/documen4.cxx @@ -612,10 +612,9 @@ sal_uLong ScDocument::AddValidationEntry( const ScValidationData& rNew ) pValidationList = new ScValidationDataList; sal_uLong nMax = 0; - sal_uInt16 nCount = pValidationList->Count(); - for (sal_uInt16 i=0; i<nCount; i++) + for( ScValidationDataList::iterator it = pValidationList->begin(); it != pValidationList->end(); ++it ) { - const ScValidationData* pData = (*pValidationList)[i]; + const ScValidationData* pData = *it; sal_uLong nKey = pData->GetKey(); if ( pData->EqualEntries( rNew ) ) return nKey; diff --git a/sc/source/core/data/validat.cxx b/sc/source/core/data/validat.cxx index c4cb9171d990..f41adffac3eb 100644 --- a/sc/source/core/data/validat.cxx +++ b/sc/source/core/data/validat.cxx @@ -54,11 +54,6 @@ #include <memory> using namespace formula; -//------------------------------------------------------------------------ - -SV_IMPL_OP_PTRARR_SORT( ScValidationEntries_Impl, ScValidationDataPtr ); - -//------------------------------------------------------------------------ // // Eintrag fuer Gueltigkeit (es gibt nur eine Bedingung) @@ -885,14 +880,12 @@ bool ScValidationData::IsListValid( ScBaseCell* pCell, const ScAddress& rPos ) c // ============================================================================ ScValidationDataList::ScValidationDataList(const ScValidationDataList& rList) : - ScValidationEntries_Impl() + std::set<ScValidationData*, CompareScValidationDataPtr>() { // fuer Ref-Undo - echte Kopie mit neuen Tokens! - sal_uInt16 nCount = rList.Count(); - - for (sal_uInt16 i=0; i<nCount; i++) - InsertNew( rList[i]->Clone() ); + for( iterator it = rList.begin(); it != rList.end(); ++it ) + InsertNew( (*it)->Clone() ); //! sortierte Eintraege aus rList schneller einfuegen ??? } @@ -902,10 +895,8 @@ ScValidationDataList::ScValidationDataList(ScDocument* pNewDoc, { // fuer neues Dokument - echte Kopie mit neuen Tokens! - sal_uInt16 nCount = rList.Count(); - - for (sal_uInt16 i=0; i<nCount; i++) - InsertNew( rList[i]->Clone(pNewDoc) ); + for( iterator it = rList.begin(); it != rList.end(); ++it ) + InsertNew( (*it)->Clone(pNewDoc) ); //! sortierte Eintraege aus rList schneller einfuegen ??? } @@ -914,10 +905,9 @@ ScValidationData* ScValidationDataList::GetData( sal_uInt32 nKey ) { //! binaer suchen - sal_uInt16 nCount = Count(); - for (sal_uInt16 i=0; i<nCount; i++) - if ((*this)[i]->GetKey() == nKey) - return (*this)[i]; + for( iterator it = begin(); it != end(); ++it ) + if( (*it)->GetKey() == nKey ) + return *it; OSL_FAIL("ScValidationDataList: Eintrag nicht gefunden"); return NULL; @@ -925,35 +915,32 @@ ScValidationData* ScValidationDataList::GetData( sal_uInt32 nKey ) void ScValidationDataList::CompileXML() { - sal_uInt16 nCount = Count(); - for (sal_uInt16 i=0; i<nCount; i++) - (*this)[i]->CompileXML(); + for( iterator it = begin(); it != end(); ++it ) + (*it)->CompileXML(); } void ScValidationDataList::UpdateReference( UpdateRefMode eUpdateRefMode, const ScRange& rRange, SCsCOL nDx, SCsROW nDy, SCsTAB nDz ) { - sal_uInt16 nCount = Count(); - for (sal_uInt16 i=0; i<nCount; i++) - (*this)[i]->UpdateReference( eUpdateRefMode, rRange, nDx, nDy, nDz); + for( iterator it = begin(); it != end(); ++it ) + (*it)->UpdateReference( eUpdateRefMode, rRange, nDx, nDy, nDz); } void ScValidationDataList::UpdateMoveTab( SCTAB nOldPos, SCTAB nNewPos ) { - sal_uInt16 nCount = Count(); - for (sal_uInt16 i=0; i<nCount; i++) - (*this)[i]->UpdateMoveTab( nOldPos, nNewPos ); + for( iterator it = begin(); it != end(); ++it ) + (*it)->UpdateMoveTab( nOldPos, nNewPos ); } sal_Bool ScValidationDataList::operator==( const ScValidationDataList& r ) const { // fuer Ref-Undo - interne Variablen werden nicht verglichen - sal_uInt16 nCount = Count(); - sal_Bool bEqual = ( nCount == r.Count() ); - for (sal_uInt16 i=0; i<nCount && bEqual; i++) // Eintraege sind sortiert - if ( !(*this)[i]->EqualEntries(*r[i]) ) // Eintraege unterschiedlich ? - bEqual = false; + sal_uInt16 nCount = size(); + sal_Bool bEqual = ( nCount == r.size() ); + for( const_iterator it1 = begin(), it2 = r.begin(); it1 != end() && bEqual; ++it1, ++it2 ) // Eintraege sind sortiert + if ( !(*it1)->EqualEntries(**it2) ) // Eintraege unterschiedlich ? + bEqual = sal_False; return bEqual; } |