sc/inc/chartpos.hxx | 10 +- sc/source/core/tool/chartpos.cxx | 161 +++++++++++++++++++-------------------- 2 files changed, 88 insertions(+), 83 deletions(-)
New commits: commit 6b170f3d0aa519c6fd4e3ee92421f5a87ab511e3 Author: Ivan Timofeev <timofeev....@gmail.com> Date: Wed Mar 28 21:06:03 2012 +0400 WaE: declaration of 'it' shadows a previous local diff --git a/sc/source/core/tool/chartpos.cxx b/sc/source/core/tool/chartpos.cxx index 7ab9e43..78ea6e7 100644 --- a/sc/source/core/tool/chartpos.cxx +++ b/sc/source/core/tool/chartpos.cxx @@ -409,8 +409,7 @@ void ScChartPositioner::CreatePositionMap() sal_uLong nInsRow = (bNoGlue ? nNoGlueRow : nRow1); for ( nRow = nRow1; nRow <= nRow2; nRow++, nInsRow++ ) { - RowMap::const_iterator it = pCol->find( nInsRow ); - if ( it == pCol->end() ) + if ( pCol->find( nInsRow ) == pCol->end() ) { pCol->insert( RowMap::value_type( nInsRow, new ScAddress( nCol, nRow, nTab ) ) ); } commit 82e0247c7a36aedf7ecf55488360f9abeb89726a Author: Ivan Timofeev <timofeev....@gmail.com> Date: Wed Mar 28 21:03:17 2012 +0400 remove the wrongly placed semicolon diff --git a/sc/source/core/tool/chartpos.cxx b/sc/source/core/tool/chartpos.cxx index 0d963f1..7ab9e43 100644 --- a/sc/source/core/tool/chartpos.cxx +++ b/sc/source/core/tool/chartpos.cxx @@ -565,7 +565,7 @@ ScChartPositionMap::ScChartPositionMap( SCCOL nChartCols, SCROW nChartRows, ppData[ nIndex ] = pPosIter->second; ++pPosIter; } - for ( ; nRow < nRowCount; nRow++, nIndex++ ) ; + for ( ; nRow < nRowCount; nRow++, nIndex++ ) ppData[ nIndex ] = NULL; ++pColIter; commit 8affd7e908fe695c548da702cafe76a8b031fdef Author: Ivan Timofeev <timofeev....@gmail.com> Date: Wed Mar 28 18:54:13 2012 +0400 this iterator should point to where the insert should start to search diff --git a/sc/source/core/tool/chartpos.cxx b/sc/source/core/tool/chartpos.cxx index cdc27f6..0d963f1 100644 --- a/sc/source/core/tool/chartpos.cxx +++ b/sc/source/core/tool/chartpos.cxx @@ -399,7 +399,7 @@ void ScChartPositioner::CreatePositionMap() if ( it == pCols->end() ) { pCol = new RowMap; - pCols->insert(it, ColumnMap::value_type( nInsCol, pCol ) ); + pCols->insert( ColumnMap::value_type( nInsCol, pCol ) ); } else pCol = it->second; @@ -412,7 +412,7 @@ void ScChartPositioner::CreatePositionMap() RowMap::const_iterator it = pCol->find( nInsRow ); if ( it == pCol->end() ) { - pCol->insert(it, RowMap::value_type( nInsRow, new ScAddress( nCol, nRow, nTab ) ) ); + pCol->insert( RowMap::value_type( nInsRow, new ScAddress( nCol, nRow, nTab ) ) ); } } } commit 8627b0a297d6a2b7461bb53da2f434c397cb2603 Author: Ivan Timofeev <timofeev....@gmail.com> Date: Tue Mar 27 23:03:03 2012 +0400 there was Table::Insert, let's use map::insert as a replacement diff --git a/sc/source/core/tool/chartpos.cxx b/sc/source/core/tool/chartpos.cxx index bae4802..cdc27f6 100644 --- a/sc/source/core/tool/chartpos.cxx +++ b/sc/source/core/tool/chartpos.cxx @@ -475,7 +475,7 @@ void ScChartPositioner::CreatePositionMap() { sal_uLong nKey = it1->first; for (ColumnMap::const_iterator it2 = ++pCols->begin(); it2 != pCols->end(); ++it2 ) - (*it2->second)[ nKey ] = NULL; // keine Daten + it2->second->insert( RowMap::value_type( nKey, NULL )); // keine Daten } } } commit d976045c9d0296d2418687e0049ee49f9ebeded5 Author: Ivan Timofeev <timofeev....@gmail.com> Date: Tue Mar 27 22:34:48 2012 +0400 if/else branches contain same code diff --git a/sc/source/core/tool/chartpos.cxx b/sc/source/core/tool/chartpos.cxx index cd3a4c9..bae4802 100644 --- a/sc/source/core/tool/chartpos.cxx +++ b/sc/source/core/tool/chartpos.cxx @@ -395,28 +395,15 @@ void ScChartPositioner::CreatePositionMap() for ( nCol = nCol1; nCol <= nCol2; ++nCol, ++nInsCol ) { RowMap* pCol = NULL; - if ( bNoGlue || eGlue == SC_CHARTGLUE_ROWS ) - { // meistens gleiche Cols - ColumnMap::const_iterator it = pCols->find( nInsCol ); - if ( it == pCols->end() ) - { - pCol = new RowMap; - pCols->insert(it, ColumnMap::value_type( nInsCol, pCol ) ); - } - else - pCol = it->second; + ColumnMap::const_iterator it = pCols->find( nInsCol ); + if ( it == pCols->end() ) + { + pCol = new RowMap; + pCols->insert(it, ColumnMap::value_type( nInsCol, pCol ) ); } else - { // meistens neue Cols - ColumnMap::const_iterator it = pCols->find( nInsCol ); - if ( it == pCols->end() ) - { - pCol = new RowMap; - pCols->insert(it, ColumnMap::value_type( nInsCol, pCol ) ); - } - else - pCol = it->second; - } + pCol = it->second; + // bei anderer Tabelle wurde bereits neuer ColKey erzeugt, // die Zeilen muessen fuer's Dummy fuellen gleich sein! sal_uLong nInsRow = (bNoGlue ? nNoGlueRow : nRow1); commit 154d071ddbdeab99014a3a60540c02da86299850 Author: Ivan Timofeev <timofeev....@gmail.com> Date: Tue Mar 27 22:03:28 2012 +0400 prevent potential crashes diff --git a/sc/source/core/tool/chartpos.cxx b/sc/source/core/tool/chartpos.cxx index 9ad37a3..cd3a4c9 100644 --- a/sc/source/core/tool/chartpos.cxx +++ b/sc/source/core/tool/chartpos.cxx @@ -526,18 +526,22 @@ ScChartPositionMap::ScChartPositionMap( SCCOL nChartCols, SCROW nChartRows, ++pPos1Iter; if ( nColAdd ) { // eigenstaendig - for ( SCROW nRow = 0; nRow < nRowCount; nRow++ ) + SCROW nRow = 0; + for ( ; nRow < nRowCount && pPos1Iter != pCol1->end(); nRow++ ) { ppRowHeader[ nRow ] = pPos1Iter->second; ++pPos1Iter; } + for ( ; nRow < nRowCount; nRow++ ) + ppRowHeader[ nRow ] = NULL; } else { // Kopie SCROW nRow = 0; for ( ; nRow < nRowCount && pPos1Iter != pCol1->end(); nRow++ ) { - ppRowHeader[ nRow ] = new ScAddress( *pPos1Iter->second ); + ppRowHeader[ nRow ] = pPos1Iter->second ? + new ScAddress( *pPos1Iter->second ) : NULL; ++pPos1Iter; } for ( ; nRow < nRowCount; nRow++ ) @@ -556,15 +560,17 @@ ScChartPositionMap::ScChartPositionMap( SCCOL nChartCols, SCROW nChartRows, { RowMap* pCol2 = pColIter->second; RowMap::const_iterator pPosIter = pCol2->begin(); - if ( nRowAdd ) + if ( pPosIter != pCol2->end() ) { - ppColHeader[ nCol ] = pPosIter->second; // eigenstaendig - ++pPosIter; + if ( nRowAdd ) + { + ppColHeader[ nCol ] = pPosIter->second; // eigenstaendig + ++pPosIter; + } + else + ppColHeader[ nCol ] = pPosIter->second ? + new ScAddress( *pPosIter->second ) : NULL; } - else if ( pPosIter != pCol2->end() ) - ppColHeader[ nCol ] = new ScAddress( *pPosIter->second ); - else - ppColHeader[ nCol ] = NULL; SCROW nRow = 0; for ( ; nRow < nRowCount && pPosIter != pCol2->end(); nRow++, nIndex++ ) commit 3fb86cd30c394dcbade425a516bf9bf477a5b5d0 Author: Ivan Timofeev <timofeev....@gmail.com> Date: Tue Mar 27 21:04:50 2012 +0400 do not touch first column diff --git a/sc/source/core/tool/chartpos.cxx b/sc/source/core/tool/chartpos.cxx index 5d96cc0..9ad37a3 100644 --- a/sc/source/core/tool/chartpos.cxx +++ b/sc/source/core/tool/chartpos.cxx @@ -487,7 +487,7 @@ void ScChartPositioner::CreatePositionMap() for ( sal_uLong n = 0; n < nCount; n++, ++it1 ) { sal_uLong nKey = it1->first; - for (ColumnMap::const_iterator it2 = pCols->begin(); it2 != pCols->end(); ++it2 ) + for (ColumnMap::const_iterator it2 = ++pCols->begin(); it2 != pCols->end(); ++it2 ) (*it2->second)[ nKey ] = NULL; // keine Daten } } commit a3d473683887bebeae34443eeb4b0d603b6d6de6 Author: Ivan Timofeev <timofeev....@gmail.com> Date: Tue Mar 27 20:04:28 2012 +0400 remove unused include diff --git a/sc/source/core/tool/chartpos.cxx b/sc/source/core/tool/chartpos.cxx index fc10975..5d96cc0 100644 --- a/sc/source/core/tool/chartpos.cxx +++ b/sc/source/core/tool/chartpos.cxx @@ -29,8 +29,6 @@ // INCLUDE --------------------------------------------------------------- -#include <tools/table.hxx> - #include "chartpos.hxx" #include "document.hxx" #include "rechead.hxx" commit bfa76fc1a392452250022568d0ae326c13393d6b Author: Noel Grandin <n...@peralex.com> Date: Wed Mar 14 14:58:48 2012 +0200 Convert tools/table.hxx to std::map in ScChartPositionMap class in SC module Along the way, simplify the ScChartPositioner::CreatePositionMap method, it was using a unnecessarily complicated approach to allocating new objects. diff --git a/sc/inc/chartpos.hxx b/sc/inc/chartpos.hxx index 4d3dccb..7d81427 100644 --- a/sc/inc/chartpos.hxx +++ b/sc/inc/chartpos.hxx @@ -32,10 +32,14 @@ // ----------------------------------------------------------------------- #include "rangelst.hxx" - +#include <map> class ScAddress; -class Table; + +// map of row number to ScAddress* +typedef std::map<sal_uLong, ScAddress*> RowMap; +// map of column number to RowMap* +typedef std::map<sal_uLong, RowMap*> ColumnMap; class ScChartPositionMap { @@ -51,7 +55,7 @@ class ScChartPositionMap ScChartPositionMap( SCCOL nChartCols, SCROW nChartRows, SCCOL nColAdd, // header columns SCROW nRowAdd, // header rows - Table& rCols // table with col tables with address* + ColumnMap& rCols // table with col tables with address* ); ~ScChartPositionMap(); //! deletes all ScAddress* diff --git a/sc/source/core/tool/chartpos.cxx b/sc/source/core/tool/chartpos.cxx index 5b7617a..fc10975 100644 --- a/sc/source/core/tool/chartpos.cxx +++ b/sc/source/core/tool/chartpos.cxx @@ -382,12 +382,8 @@ void ScChartPositioner::CreatePositionMap() GlueState(); - sal_Bool bNoGlue = (eGlue == SC_CHARTGLUE_NONE); - Table* pCols = new Table; - Table* pNewRowTable = new Table; - ScAddress* pNewAddress = new ScAddress; - Table* pCol; - ScAddress* pPos; + const sal_Bool bNoGlue = (eGlue == SC_CHARTGLUE_NONE); + ColumnMap* pCols = new ColumnMap; SCROW nNoGlueRow = 0; for ( size_t i = 0, nRanges = aRangeListRef->size(); i < nRanges; ++i ) { @@ -400,34 +396,38 @@ void ScChartPositioner::CreatePositionMap() static_cast<sal_uLong>(nCol1)); for ( nCol = nCol1; nCol <= nCol2; ++nCol, ++nInsCol ) { + RowMap* pCol = NULL; if ( bNoGlue || eGlue == SC_CHARTGLUE_ROWS ) { // meistens gleiche Cols - if ( (pCol = (Table*) pCols->Get( nInsCol ))==NULL ) + ColumnMap::const_iterator it = pCols->find( nInsCol ); + if ( it == pCols->end() ) { - pCols->Insert( nInsCol, pNewRowTable ); - pCol = pNewRowTable; - pNewRowTable = new Table; + pCol = new RowMap; + pCols->insert(it, ColumnMap::value_type( nInsCol, pCol ) ); } + else + pCol = it->second; } else { // meistens neue Cols - if ( pCols->Insert( nInsCol, pNewRowTable ) ) + ColumnMap::const_iterator it = pCols->find( nInsCol ); + if ( it == pCols->end() ) { - pCol = pNewRowTable; - pNewRowTable = new Table; + pCol = new RowMap; + pCols->insert(it, ColumnMap::value_type( nInsCol, pCol ) ); } else - pCol = (Table*) pCols->Get( nInsCol ); + pCol = it->second; } // bei anderer Tabelle wurde bereits neuer ColKey erzeugt, // die Zeilen muessen fuer's Dummy fuellen gleich sein! sal_uLong nInsRow = (bNoGlue ? nNoGlueRow : nRow1); for ( nRow = nRow1; nRow <= nRow2; nRow++, nInsRow++ ) { - if ( pCol->Insert( nInsRow, pNewAddress ) ) + RowMap::const_iterator it = pCol->find( nInsRow ); + if ( it == pCol->end() ) { - pNewAddress->Set( nCol, nRow, nTab ); - pNewAddress = new ScAddress; + pCol->insert(it, RowMap::value_type( nInsRow, new ScAddress( nCol, nRow, nTab ) ) ); } } } @@ -435,16 +435,15 @@ void ScChartPositioner::CreatePositionMap() // bei NoGlue werden zusammengehoerige Tabellen als ColGlue dargestellt nNoGlueRow += nRow2 - nRow1 + 1; } - delete pNewAddress; - delete pNewRowTable; // Anzahl der Daten - nColCount = static_cast< SCSIZE >( pCols->Count()); - if ( (pCol = (Table*) pCols->First())!=NULL ) + nColCount = static_cast< SCSIZE >( pCols->size()); + if ( !pCols->empty() ) { + RowMap* pCol = pCols->begin()->second; if ( bDummyUpperLeft ) - pCol->Insert( 0, (void*)0 ); // Dummy fuer Beschriftung - nRowCount = static_cast< SCSIZE >( pCol->Count()); + (*pCol)[ 0 ] = NULL; // Dummy fuer Beschriftung + nRowCount = static_cast< SCSIZE >( pCol->size()); } else nRowCount = 0; @@ -455,25 +454,27 @@ void ScChartPositioner::CreatePositionMap() if ( nColCount==0 || nRowCount==0 ) { // einen Eintrag ohne Daten erzeugen - if ( pCols->Count() > 0 ) - pCol = (Table*) pCols->First(); + RowMap* pCol; + if ( !pCols->empty() ) + pCol = pCols->begin()->second; else { - pCol = new Table; - pCols->Insert( 0, pCol ); + pCol = new RowMap; + (*pCols)[ 0 ] = pCol; } nColCount = 1; - if ( pCol->Count() > 0 ) + if ( !pCol->empty() ) { // kann ja eigentlich nicht sein, wenn nColCount==0 || nRowCount==0 - pPos = (ScAddress*) pCol->First(); + ScAddress* pPos = pCol->begin()->second; if ( pPos ) { + sal_uLong nCurrentKey = pCol->begin()->first; delete pPos; - pCol->Replace( pCol->GetCurKey(), (void*)0 ); + (*pCol)[ nCurrentKey ] = NULL; } } else - pCol->Insert( 0, (void*)0 ); + (*pCol)[ 0 ] = NULL; nRowCount = 1; nColAdd = 0; nRowAdd = 0; @@ -482,15 +483,14 @@ void ScChartPositioner::CreatePositionMap() { if ( bNoGlue ) { // Luecken mit Dummies fuellen, erste Spalte ist Master - Table* pFirstCol = (Table*) pCols->First(); - sal_uLong nCount = pFirstCol->Count(); - pFirstCol->First(); - for ( sal_uLong n = 0; n < nCount; n++, pFirstCol->Next() ) + RowMap* pFirstCol = pCols->begin()->second; + sal_uLong nCount = pFirstCol->size(); + RowMap::const_iterator it1 = pFirstCol->begin(); + for ( sal_uLong n = 0; n < nCount; n++, ++it1 ) { - sal_uLong nKey = pFirstCol->GetCurKey(); - pCols->First(); - while ( (pCol = (Table*) pCols->Next())!=NULL ) - pCol->Insert( nKey, (void*)0 ); // keine Daten + sal_uLong nKey = it1->first; + for (ColumnMap::const_iterator it2 = pCols->begin(); it2 != pCols->end(); ++it2 ) + (*it2->second)[ nKey ] = NULL; // keine Daten } } } @@ -499,16 +499,16 @@ void ScChartPositioner::CreatePositionMap() static_cast<SCCOL>(nColAdd), static_cast<SCROW>(nRowAdd), *pCols ); // Aufraeumen - for ( pCol = (Table*) pCols->First(); pCol; pCol = (Table*) pCols->Next() ) + for (ColumnMap::const_iterator it = pCols->begin(); it != pCols->end(); ++it ) { //! nur Tables loeschen, nicht die ScAddress* - delete pCol; + delete it->second; } delete pCols; } ScChartPositionMap::ScChartPositionMap( SCCOL nChartCols, SCROW nChartRows, - SCCOL nColAdd, SCROW nRowAdd, Table& rCols ) : + SCCOL nColAdd, SCROW nRowAdd, ColumnMap& rCols ) : ppData( new ScAddress* [ nChartCols * nChartRows ] ), ppColHeader( new ScAddress* [ nChartCols ] ), ppRowHeader( new ScAddress* [ nChartRows ] ), @@ -518,64 +518,75 @@ ScChartPositionMap::ScChartPositionMap( SCCOL nChartCols, SCROW nChartRows, { OSL_ENSURE( nColCount && nRowCount, "ScChartPositionMap without dimension" ); - ScAddress* pPos; - SCCOL nCol; - SCROW nRow; - - Table* pCol = (Table*) rCols.First(); + ColumnMap::const_iterator pColIter = rCols.begin(); + RowMap* pCol1 = pColIter->second; + RowMap::const_iterator pPos1Iter; // Zeilen-Header - pPos = (ScAddress*) pCol->First(); + pPos1Iter = pCol1->begin(); if ( nRowAdd ) - pPos = (ScAddress*) pCol->Next(); + ++pPos1Iter; if ( nColAdd ) { // eigenstaendig - for ( nRow = 0; nRow < nRowCount; nRow++ ) + for ( SCROW nRow = 0; nRow < nRowCount; nRow++ ) { - ppRowHeader[ nRow ] = pPos; - pPos = (ScAddress*) pCol->Next(); + ppRowHeader[ nRow ] = pPos1Iter->second; + ++pPos1Iter; } } else { // Kopie - for ( nRow = 0; nRow < nRowCount; nRow++ ) + SCROW nRow = 0; + for ( ; nRow < nRowCount && pPos1Iter != pCol1->end(); nRow++ ) { - ppRowHeader[ nRow ] = ( pPos ? new ScAddress( *pPos ) : NULL ); - pPos = (ScAddress*) pCol->Next(); + ppRowHeader[ nRow ] = new ScAddress( *pPos1Iter->second ); + ++pPos1Iter; } + for ( ; nRow < nRowCount; nRow++ ) + ppRowHeader[ nRow ] = NULL; } if ( nColAdd ) - pCol = (Table*) rCols.Next(); + { + ++pColIter; + } // Daten spaltenweise und Spalten-Header sal_uLong nIndex = 0; - for ( nCol = 0; nCol < nColCount; nCol++ ) + for ( SCCOL nCol = 0; nCol < nColCount; nCol++ ) { - if ( pCol ) + if ( pColIter != rCols.end() ) { - pPos = (ScAddress*) pCol->First(); + RowMap* pCol2 = pColIter->second; + RowMap::const_iterator pPosIter = pCol2->begin(); if ( nRowAdd ) { - ppColHeader[ nCol ] = pPos; // eigenstaendig - pPos = (ScAddress*) pCol->Next(); + ppColHeader[ nCol ] = pPosIter->second; // eigenstaendig + ++pPosIter; } + else if ( pPosIter != pCol2->end() ) + ppColHeader[ nCol ] = new ScAddress( *pPosIter->second ); else - ppColHeader[ nCol ] = ( pPos ? new ScAddress( *pPos ) : NULL ); - for ( nRow = 0; nRow < nRowCount; nRow++, nIndex++ ) + ppColHeader[ nCol ] = NULL; + + SCROW nRow = 0; + for ( ; nRow < nRowCount && pPosIter != pCol2->end(); nRow++, nIndex++ ) { - ppData[ nIndex ] = pPos; - pPos = (ScAddress*) pCol->Next(); + ppData[ nIndex ] = pPosIter->second; + ++pPosIter; } + for ( ; nRow < nRowCount; nRow++, nIndex++ ) ; + ppData[ nIndex ] = NULL; + + ++pColIter; } else { ppColHeader[ nCol ] = NULL; - for ( nRow = 0; nRow < nRowCount; nRow++, nIndex++ ) + for ( SCROW nRow = 0; nRow < nRowCount; nRow++, nIndex++ ) { ppData[ nIndex ] = NULL; } } - pCol = (Table*) rCols.Next(); } } _______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits