diff options
-rw-r--r-- | sc/inc/global.hxx | 5 | ||||
-rw-r--r-- | sc/source/core/data/global2.cxx | 56 | ||||
-rw-r--r-- | sc/source/filter/xml/XMLConsolidationContext.cxx | 14 | ||||
-rw-r--r-- | sc/source/filter/xml/xmlexprt.cxx | 2 | ||||
-rw-r--r-- | sc/source/ui/dbgui/consdlg.cxx | 15 | ||||
-rw-r--r-- | sc/source/ui/docshell/docsh5.cxx | 22 | ||||
-rw-r--r-- | sc/source/ui/unoobj/datauno.cxx | 26 |
7 files changed, 53 insertions, 87 deletions
diff --git a/sc/inc/global.hxx b/sc/inc/global.hxx index bdef61bf5c39..4c658290cca8 100644 --- a/sc/inc/global.hxx +++ b/sc/inc/global.hxx @@ -34,6 +34,7 @@ // which confuses clang plugins. #undef bool #include <map> +#include <memory> class SfxItemSet; class SfxViewShell; @@ -887,7 +888,7 @@ struct ScConsolidateParam SCTAB nTab; ScSubTotalFunc eFunction; sal_uInt16 nDataAreaCount; // number of data areas - ScArea** ppDataAreas; // array of pointers into data areas + std::unique_ptr<ScArea[]> pDataAreas; // array of pointers into data areas bool bByCol; bool bByRow; bool bReferenceData; // reference source data @@ -900,7 +901,7 @@ struct ScConsolidateParam bool operator== ( const ScConsolidateParam& r ) const; void Clear (); // = ClearDataAreas()+Members void ClearDataAreas (); - void SetAreas ( ScArea* const* ppAreas, sal_uInt16 nCount ); + void SetAreas ( std::unique_ptr<ScArea[]> pAreas, sal_uInt16 nCount ); }; extern SfxViewShell* pScActiveViewShell; diff --git a/sc/source/core/data/global2.cxx b/sc/source/core/data/global2.cxx index d75f64c1c57c..52b4b8aeb531 100644 --- a/sc/source/core/data/global2.cxx +++ b/sc/source/core/data/global2.cxx @@ -105,41 +105,23 @@ bool ScImportParam::operator==( const ScImportParam& rOther ) const // struct ScConsolidateParam: -ScConsolidateParam::ScConsolidateParam() : - ppDataAreas( nullptr ) +ScConsolidateParam::ScConsolidateParam() { Clear(); } -ScConsolidateParam::ScConsolidateParam( const ScConsolidateParam& r ) : - nCol(r.nCol),nRow(r.nRow),nTab(r.nTab), - eFunction(r.eFunction),nDataAreaCount(0), - ppDataAreas( nullptr ), - bByCol(r.bByCol),bByRow(r.bByRow),bReferenceData(r.bReferenceData) +ScConsolidateParam::ScConsolidateParam( const ScConsolidateParam& r ) { - if ( r.nDataAreaCount > 0 ) - { - nDataAreaCount = r.nDataAreaCount; - ppDataAreas = new ScArea*[nDataAreaCount]; - for ( sal_uInt16 i=0; i<nDataAreaCount; i++ ) - ppDataAreas[i] = new ScArea( *(r.ppDataAreas[i]) ); - } + operator=(r); } ScConsolidateParam::~ScConsolidateParam() { - ClearDataAreas(); } void ScConsolidateParam::ClearDataAreas() { - if ( ppDataAreas ) - { - for ( sal_uInt16 i=0; i<nDataAreaCount; i++ ) - delete ppDataAreas[i]; - delete [] ppDataAreas; - ppDataAreas = nullptr; - } + pDataAreas.reset(); nDataAreaCount = 0; } @@ -163,8 +145,16 @@ ScConsolidateParam& ScConsolidateParam::operator=( const ScConsolidateParam& r ) bByRow = r.bByRow; bReferenceData = r.bReferenceData; eFunction = r.eFunction; - SetAreas( r.ppDataAreas, r.nDataAreaCount ); - + nDataAreaCount = r.nDataAreaCount; + if ( r.nDataAreaCount > 0 ) + { + nDataAreaCount = r.nDataAreaCount; + pDataAreas.reset( new ScArea[nDataAreaCount] ); + for ( sal_uInt16 i=0; i<nDataAreaCount; i++ ) + pDataAreas[i] = r.pDataAreas[i]; + } + else + pDataAreas.reset(); return *this; } @@ -180,27 +170,21 @@ bool ScConsolidateParam::operator==( const ScConsolidateParam& r ) const && (eFunction == r.eFunction); if ( nDataAreaCount == 0 ) - bEqual = bEqual && (ppDataAreas == nullptr) && (r.ppDataAreas == nullptr); + bEqual = bEqual && (pDataAreas == nullptr) && (r.pDataAreas == nullptr); else - bEqual = bEqual && (ppDataAreas != nullptr) && (r.ppDataAreas != nullptr); + bEqual = bEqual && (pDataAreas != nullptr) && (r.pDataAreas != nullptr); if ( bEqual && (nDataAreaCount > 0) ) for ( sal_uInt16 i=0; i<nDataAreaCount && bEqual; i++ ) - bEqual = *(ppDataAreas[i]) == *(r.ppDataAreas[i]); + bEqual = pDataAreas[i] == r.pDataAreas[i]; return bEqual; } -void ScConsolidateParam::SetAreas( ScArea* const* ppAreas, sal_uInt16 nCount ) +void ScConsolidateParam::SetAreas( std::unique_ptr<ScArea[]> pAreas, sal_uInt16 nCount ) { - ClearDataAreas(); - if ( ppAreas && nCount > 0 ) - { - ppDataAreas = new ScArea*[nCount]; - for ( sal_uInt16 i=0; i<nCount; i++ ) - ppDataAreas[i] = new ScArea( *(ppAreas[i]) ); - nDataAreaCount = nCount; - } + pDataAreas = std::move(pAreas); + nDataAreaCount = nCount; } // struct ScSolveParam diff --git a/sc/source/filter/xml/XMLConsolidationContext.cxx b/sc/source/filter/xml/XMLConsolidationContext.cxx index f27b4b1508de..ba6525eabce3 100644 --- a/sc/source/filter/xml/XMLConsolidationContext.cxx +++ b/sc/source/filter/xml/XMLConsolidationContext.cxx @@ -84,27 +84,21 @@ void SAL_CALL ScXMLConsolidationContext::endFastElement( sal_Int32 /*nElement*/ pConsParam->eFunction = eFunction; sal_uInt16 nCount = static_cast<sal_uInt16>(std::min( ScRangeStringConverter::GetTokenCount( sSourceList ), sal_Int32(0xFFFF) )); - ScArea** ppAreas = nCount ? new ScArea*[ nCount ] : nullptr; - if( ppAreas ) + if( nCount ) { + std::unique_ptr<ScArea[]> ppAreas(new ScArea[ nCount ]); sal_Int32 nOffset = 0; sal_uInt16 nIndex; for( nIndex = 0; nIndex < nCount; ++nIndex ) { - ppAreas[ nIndex ] = new ScArea; if ( !ScRangeStringConverter::GetAreaFromString( - *ppAreas[ nIndex ], sSourceList, GetScImport().GetDocument(), ::formula::FormulaGrammar::CONV_OOO, nOffset ) ) + ppAreas[ nIndex ], sSourceList, GetScImport().GetDocument(), ::formula::FormulaGrammar::CONV_OOO, nOffset ) ) { //! handle error } } - pConsParam->SetAreas( ppAreas, nCount ); - - // array is copied in SetAreas - for( nIndex = 0; nIndex < nCount; ++nIndex ) - delete ppAreas[nIndex]; - delete[] ppAreas; + pConsParam->SetAreas( std::move(ppAreas), nCount ); } pConsParam->bByCol = pConsParam->bByRow = false; diff --git a/sc/source/filter/xml/xmlexprt.cxx b/sc/source/filter/xml/xmlexprt.cxx index ec0833019240..6e5c2b49bbe7 100644 --- a/sc/source/filter/xml/xmlexprt.cxx +++ b/sc/source/filter/xml/xmlexprt.cxx @@ -4783,7 +4783,7 @@ void ScXMLExport::WriteConsolidation() sStrData.clear(); for( sal_Int32 nIndex = 0; nIndex < pCons->nDataAreaCount; ++nIndex ) - ScRangeStringConverter::GetStringFromArea( sStrData, *pCons->ppDataAreas[ nIndex ], pDoc, FormulaGrammar::CONV_OOO, ' ', true ); + ScRangeStringConverter::GetStringFromArea( sStrData, pCons->pDataAreas[ nIndex ], pDoc, FormulaGrammar::CONV_OOO, ' ', true ); AddAttribute( XML_NAMESPACE_TABLE, XML_SOURCE_CELL_RANGE_ADDRESSES, sStrData ); ScRangeStringConverter::GetStringFromAddress( sStrData, ScAddress( pCons->nCol, pCons->nRow, pCons->nTab ), pDoc, FormulaGrammar::CONV_OOO ); diff --git a/sc/source/ui/dbgui/consdlg.cxx b/sc/source/ui/dbgui/consdlg.cxx index 7fadd6c22bd0..dc3338ddd5ab 100644 --- a/sc/source/ui/dbgui/consdlg.cxx +++ b/sc/source/ui/dbgui/consdlg.cxx @@ -184,7 +184,7 @@ void ScConsolidateDlg::Init() const formula::FormulaGrammar::AddressConvention eConv = pDoc->GetAddressConvention(); for ( i=0; i<theConsData.nDataAreaCount; i++ ) { - const ScArea& rArea = *(theConsData.ppDataAreas[i] ); + const ScArea& rArea = theConsData.pDataAreas[i]; if ( rArea.nTab < pDoc->GetTableCount() ) { aStr = ScRange( rArea.nColStart, rArea.nRowStart, rArea.nTab, @@ -381,15 +381,12 @@ IMPL_LINK_NOARG(ScConsolidateDlg, OkHdl, Button*, void) if ( ScRangeUtil::IsAbsPos( aDestPosStr, pDoc, nTab, nullptr, &aDestAddress, eConv ) ) { ScConsolidateParam theOutParam( theConsData ); - ScArea** ppDataAreas = new ScArea*[nDataAreaCount]; - ScArea* pArea; + std::unique_ptr<ScArea[]> pDataAreas(new ScArea[nDataAreaCount]); for ( sal_Int32 i=0; i<nDataAreaCount; ++i ) { - pArea = new ScArea; ScRangeUtil::MakeArea( pLbConsAreas->GetEntry( i ), - *pArea, pDoc, nTab, eConv ); - ppDataAreas[i] = pArea; + pDataAreas[i], pDoc, nTab, eConv ); } theOutParam.nCol = aDestAddress.Col(); @@ -399,11 +396,7 @@ IMPL_LINK_NOARG(ScConsolidateDlg, OkHdl, Button*, void) theOutParam.bByCol = pBtnByCol->IsChecked(); theOutParam.bByRow = pBtnByRow->IsChecked(); theOutParam.bReferenceData = pBtnRefs->IsChecked(); - theOutParam.SetAreas( ppDataAreas, nDataAreaCount ); - - for ( sal_Int32 i=0; i<nDataAreaCount; ++i ) - delete ppDataAreas[i]; - delete [] ppDataAreas; + theOutParam.SetAreas( std::move(pDataAreas), nDataAreaCount ); ScConsolidateItem aOutItem( nWhichCons, &theOutParam ); diff --git a/sc/source/ui/docshell/docsh5.cxx b/sc/source/ui/docshell/docsh5.cxx index 2b43c4de1dfe..feb168a74a07 100644 --- a/sc/source/ui/docshell/docsh5.cxx +++ b/sc/source/ui/docshell/docsh5.cxx @@ -511,13 +511,13 @@ void ScDocShell::DoConsolidate( const ScConsolidateParam& rParam, bool bRecord ) bool bErr = false; for (nPos=0; nPos<rParam.nDataAreaCount; nPos++) { - ScArea* pArea = rParam.ppDataAreas[nPos]; - nColSize = std::max( nColSize, SCCOL( pArea->nColEnd - pArea->nColStart + 1 ) ); - nRowSize = std::max( nRowSize, SCROW( pArea->nRowEnd - pArea->nRowStart + 1 ) ); + ScArea const & rArea = rParam.pDataAreas[nPos]; + nColSize = std::max( nColSize, SCCOL( rArea.nColEnd - rArea.nColStart + 1 ) ); + nRowSize = std::max( nRowSize, SCROW( rArea.nRowEnd - rArea.nRowStart + 1 ) ); // test if source data were moved if (rParam.bReferenceData) - if (pArea->nTab == rParam.nTab && pArea->nRowEnd >= rParam.nRow) + if (rArea.nTab == rParam.nTab && rArea.nRowEnd >= rParam.nRow) bErr = true; } @@ -546,17 +546,17 @@ void ScDocShell::DoConsolidate( const ScConsolidateParam& rParam, bool bRecord ) if ( rParam.bByCol || rParam.bByRow ) for (nPos=0; nPos<rParam.nDataAreaCount; nPos++) { - ScArea* pArea = rParam.ppDataAreas[nPos]; - aData.AddFields( &m_aDocument, pArea->nTab, pArea->nColStart, pArea->nRowStart, - pArea->nColEnd, pArea->nRowEnd ); + ScArea const & rArea = rParam.pDataAreas[nPos]; + aData.AddFields( &m_aDocument, rArea.nTab, rArea.nColStart, rArea.nRowStart, + rArea.nColEnd, rArea.nRowEnd ); } aData.DoneFields(); for (nPos=0; nPos<rParam.nDataAreaCount; nPos++) { - ScArea* pArea = rParam.ppDataAreas[nPos]; - aData.AddData( &m_aDocument, pArea->nTab, pArea->nColStart, pArea->nRowStart, - pArea->nColEnd, pArea->nRowEnd ); - aData.AddName( lcl_GetAreaName(&m_aDocument,pArea) ); + ScArea const & rArea = rParam.pDataAreas[nPos]; + aData.AddData( &m_aDocument, rArea.nTab, rArea.nColStart, rArea.nRowStart, + rArea.nColEnd, rArea.nRowEnd ); + aData.AddName( lcl_GetAreaName(&m_aDocument, &rArea) ); } aData.GetSize( nColSize, nRowSize ); diff --git a/sc/source/ui/unoobj/datauno.cxx b/sc/source/ui/unoobj/datauno.cxx index d67d0595521e..8bbc68bbdb83 100644 --- a/sc/source/ui/unoobj/datauno.cxx +++ b/sc/source/ui/unoobj/datauno.cxx @@ -843,22 +843,19 @@ uno::Sequence<table::CellRangeAddress> SAL_CALL ScConsolidationDescriptor::getSo { SolarMutexGuard aGuard; sal_uInt16 nCount = aParam.nDataAreaCount; - if (!aParam.ppDataAreas) + if (!aParam.pDataAreas) nCount = 0; table::CellRangeAddress aRange; uno::Sequence<table::CellRangeAddress> aSeq(nCount); table::CellRangeAddress* pAry = aSeq.getArray(); for (sal_uInt16 i=0; i<nCount; i++) { - ScArea* pArea = aParam.ppDataAreas[i]; - if (pArea) - { - aRange.Sheet = pArea->nTab; - aRange.StartColumn = pArea->nColStart; - aRange.StartRow = pArea->nRowStart; - aRange.EndColumn = pArea->nColEnd; - aRange.EndRow = pArea->nRowEnd; - } + ScArea const & rArea = aParam.pDataAreas[i]; + aRange.Sheet = rArea.nTab; + aRange.StartColumn = rArea.nColStart; + aRange.StartRow = rArea.nRowStart; + aRange.EndColumn = rArea.nColEnd; + aRange.EndRow = rArea.nRowEnd; pAry[i] = aRange; } return aSeq; @@ -872,17 +869,14 @@ void SAL_CALL ScConsolidationDescriptor::setSources( if (nCount) { const table::CellRangeAddress* pAry = aSources.getConstArray(); - std::unique_ptr<ScArea*[]> pNew(new ScArea*[nCount]); + std::unique_ptr<ScArea[]> pNew(new ScArea[nCount]); sal_uInt16 i; for (i=0; i<nCount; i++) - pNew[i] = new ScArea( pAry[i].Sheet, + pNew[i] = ScArea( pAry[i].Sheet, static_cast<SCCOL>(pAry[i].StartColumn), pAry[i].StartRow, static_cast<SCCOL>(pAry[i].EndColumn), pAry[i].EndRow ); - aParam.SetAreas( pNew.get(), nCount ); // copy everything - - for (i=0; i<nCount; i++) - delete pNew[i]; + aParam.SetAreas( std::move(pNew), nCount ); // copy everything } else aParam.ClearDataAreas(); |