Perf: update the line index in place; renderers read only visible rows
- PieceTable::Insert/Delete adjust a valid line index directly (shift later line starts, add or drop starts for inserted or deleted newlines) instead of invalidating it, which forced a byte-by-byte rescan of the whole buffer on the next line query. On a 38 MB, 1M-line buffer, insert + line query drops from 14.7 ms to 0.28 ms. - The terminal and ImGui renderers fetch only the rows they draw (Nrows + GetLineString) instead of Buffer::Rows(), which rebuilt a string for every line of the file on the first frame after each edit. Qt's line-count uses switch to Nrows(). ImGuiRenderer.cc was syntax-checked with g++ and clang++ against the vendored ImGui headers; the GUI targets could not be built here (no SDL2 or Qt6). Audit findings P1, P2. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015rcVQiiWyTzoNrsvLSaAfB
This commit is contained in:
@@ -175,6 +175,12 @@ private:
|
||||
// Line index support (rebuilt lazily on demand)
|
||||
void InvalidateLineIndex() const;
|
||||
|
||||
// Keep a valid line index in step with an edit instead of rescanning the
|
||||
// whole buffer on the next query. No-ops if the index is already dirty.
|
||||
void lineIndexOnInsert(std::size_t offset, const char *text, std::size_t len) const;
|
||||
|
||||
void lineIndexOnDelete(std::size_t offset, std::size_t len) const;
|
||||
|
||||
void RebuildLineIndex() const;
|
||||
|
||||
// Underlying storages
|
||||
|
||||
Reference in New Issue
Block a user