Author: af
Date: Thu Jan 16 09:54:36 2014
New Revision: 1558727
URL: http://svn.apache.org/r1558727
Log:
123166: Made the update of maRowManualBreaks 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=1558727&r1=1558726&r2=1558727&view=diff
==============================================================================
--- openoffice/trunk/main/sc/source/core/data/table2.cxx (original)
+++ openoffice/trunk/main/sc/source/core/data/table2.cxx Thu Jan 16 09:54:36
2014
@@ -155,18 +155,24 @@ void ScTable::InsertRow( SCCOL nStartCol
if (!maRowManualBreaks.empty())
{
- std::set<SCROW>::reverse_iterator rit = maRowManualBreaks.rbegin();
- while (rit != maRowManualBreaks.rend())
+ std::vector<SCROW> aUpdatedBreaks;
+
+ while ( ! maRowManualBreaks.empty())
{
- SCROW nRow = *rit;
- if (nRow < nStartRow)
- break; // while
- else
- {
- maRowManualBreaks.erase( (++rit).base());
- maRowManualBreaks.insert( static_cast<SCROW>( nRow +
nSize));
- }
+ std::set<SCROW>::iterator aLast (--maRowManualBreaks.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<SCROW>(*aLast + nSize));
+ maRowManualBreaks.erase(aLast);
}
+
+ // Insert the updated break locations.
+ if ( ! aUpdatedBreaks.empty())
+ maRowManualBreaks.insert(aUpdatedBreaks.begin(),
aUpdatedBreaks.end());
}
}