From 76333f2c89b3dfbbbfdc47fed6590d3f64d1d835 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(-) (limited to 'src') 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