From 734741819ffb01a79faa13abe15462acb9054f37 Mon Sep 17 00:00:00 2001 From: nyamatongwe Date: Sat, 3 Aug 2002 02:52:17 +0000 Subject: Changed LineVector to use an exponential allocation strategy which minimises the memory allocated for short files but avoids excessive copying for huge files. 23 Meg file load changes from 17 seconds to 3. --- src/CellBuffer.cxx | 3 +++ src/CellBuffer.h | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/CellBuffer.cxx b/src/CellBuffer.cxx index b67da81c9..420dee6ff 100644 --- a/src/CellBuffer.cxx +++ b/src/CellBuffer.cxx @@ -125,6 +125,7 @@ LineVector::LineVector() { levels = 0; sizeLevels = 0; handleCurrent = 1; + growSize = 1000; Init(); } @@ -199,6 +200,8 @@ void LineVector::ClearLevels() { void LineVector::InsertValue(int pos, int value) { //Platform::DebugPrintf("InsertValue[%d] = %d\n", pos, value); if ((lines + 2) >= size) { + if (growSize * 6 < size) + growSize *= 2; Expand(size + growSize); if (levels) { ExpandLevels(size + growSize); diff --git a/src/CellBuffer.h b/src/CellBuffer.h index b5c90f57a..5cfcbfe1f 100644 --- a/src/CellBuffer.h +++ b/src/CellBuffer.h @@ -53,7 +53,7 @@ struct LineData { */ class LineVector { public: - enum { growSize = 4000 }; + int growSize; int lines; LineData *linesData; int size; -- cgit v1.2.3