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());
         }
        }
 


Reply via email to