From e5f0fad791b6de839d1b62c8b0a1ac624b8a2025 Mon Sep 17 00:00:00 2001 From: Neil Date: Fri, 17 May 2019 09:02:10 +1000 Subject: Backport: Optimize InsertLines and DeleteLines for ContractionState if no folds contracted. Backport of changeset 7500:c4db961b46ab. --- doc/ScintillaHistory.html | 4 ++++ src/ContractionState.cxx | 16 ++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/doc/ScintillaHistory.html b/doc/ScintillaHistory.html index c1e9f5fc9..d3eae6697 100644 --- a/doc/ScintillaHistory.html +++ b/doc/ScintillaHistory.html @@ -554,6 +554,10 @@ Feature #1280.
  • + Improved performance of line folding code on large files when no folds are contracted. + This improves the time taken to open or close large files. +
  • +
  • Fix bug where changing identifier sets in lexers preserved previous identifiers.
  • diff --git a/src/ContractionState.cxx b/src/ContractionState.cxx index 47f345ada..ebbf9aefe 100644 --- a/src/ContractionState.cxx +++ b/src/ContractionState.cxx @@ -209,16 +209,24 @@ Sci::Line ContractionState::DocFromDisplay(Sci::Line lineDisplay) const { template void ContractionState::InsertLines(Sci::Line lineDoc, Sci::Line lineCount) { - for (Sci::Line l = 0; l < lineCount; l++) { - InsertLine(lineDoc + l); + if (OneToOne()) { + linesInDocument += static_cast(lineCount); + } else { + for (Sci::Line l = 0; l < lineCount; l++) { + InsertLine(lineDoc + l); + } } Check(); } template void ContractionState::DeleteLines(Sci::Line lineDoc, Sci::Line lineCount) { - for (Sci::Line l = 0; l < lineCount; l++) { - DeleteLine(lineDoc); + if (OneToOne()) { + linesInDocument -= static_cast(lineCount); + } else { + for (Sci::Line l = 0; l < lineCount; l++) { + DeleteLine(lineDoc); + } } Check(); } -- cgit v1.2.3