Author: af
Date: Mon Jan 20 14:11:17 2014
New Revision: 1559703
URL: http://svn.apache.org/r1559703
Log:
124033: Made the update of maColManualBreaks more conservative.
Modified:
openoffice/trunk/main/sc/source/core/data/table2.cxx
Modified: openoffice/trunk/main/sc/source/core/data/table2.cxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/sc/source/core/data/table2.cxx?rev=1559703&r1=1559702&r2=1559703&view=diff
==============================================================================
--- openoffice/trunk/main/sc/source/core/data/table2.cxx (original)
+++ openoffice/trunk/main/sc/source/core/data/table2.cxx Mon Jan 20 14:11:17
2014
@@ -267,18 +267,24 @@ void ScTable::InsertCol( SCCOL nStartCol
if (!maColManualBreaks.empty())
{
- std::set<SCCOL>::reverse_iterator rit = maColManualBreaks.rbegin();
- while (rit != maColManualBreaks.rend())
+ std::vector<SCCOL> aUpdatedBreaks;
+
+ while ( ! maColManualBreaks.empty())
{
- SCCOL nCol = *rit;
- if (nCol < nStartCol)
- break; // while
- else
- {
- maColManualBreaks.erase( (++rit).base());
- maColManualBreaks.insert( static_cast<SCCOL>( nCol +
nSize));
- }
+ std::set<SCCOL>::iterator aLast (--maColManualBreaks.end());
+
+ // Check if there are more entries that have to be processed.
+ if (*aLast < nStartRow)
+ break;
+
+ // Remember the updated break location and erase the entry.
+ aUpdatedBreaks.push_back(static_cast<SCCOL>(*aLast + nSize));
+ maColManualBreaks.erase(aLast);
}
+
+ // Insert the updated break locations.
+ if ( ! aUpdatedBreaks.empty())
+ maColManualBreaks.insert(aUpdatedBreaks.begin(),
aUpdatedBreaks.end());
}
}