From 13be1527c0e5a5c13d73e73af8c1bc7df0a2f603 Mon Sep 17 00:00:00 2001 From: Luboš Luňák Date: Tue, 23 Feb 2021 13:54:10 +0100 Subject: delete from mdds in reverse order (tdf#139820) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is a more elegant solution from Noel, compared to my previous commit. Deleting in reverse order means the underlying std::vector used by mdds does not have possible to-be-deleted items to move around that forward order would have. Change-Id: I31f0774e302308bcb70595cb899c977ee5966c7e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111395 Tested-by: Jenkins Reviewed-by: Luboš Luňák --- sc/source/core/data/column3.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx index 14d1ebdc09c4..edf99f02bef5 100644 --- a/sc/source/core/data/column3.cxx +++ b/sc/source/core/data/column3.cxx @@ -978,7 +978,8 @@ void ScColumn::DeleteCells( aFunc.getSpans().getSpans(aSpans); // Delete the cells for real. - std::for_each(aSpans.begin(), aSpans.end(), EmptyCells(rBlockPos, *this)); + // tdf#139820: Deleting in reverse order is more efficient. + std::for_each(aSpans.rbegin(), aSpans.rend(), EmptyCells(rBlockPos, *this)); CellStorageModified(); aFunc.getSpans().swap(rDeleted); -- cgit v1.2.3