From 7d9ac83b3026a8f308c6be15ac512a22fba20442 Mon Sep 17 00:00:00 2001 From: Ekaitz Zarraga Date: Mon, 11 Aug 2025 23:36:48 +0200 Subject: piece-table: optimization: grow piece when possible --- src/piece-table.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/piece-table.c b/src/piece-table.c index c6e2375..ba88103 100644 --- a/src/piece-table.c +++ b/src/piece-table.c @@ -280,6 +280,19 @@ piece_table_insert (piece_table *pt, size_t pos, char *in, size_t len) pt->cached_offset -= pt->cached->length; } + /* Optimization! + * Add in the end of the buffer, and the end of the piece: enlarge + */ + if ( pt->add.len != 0 && + start->buffer == &pt->add && + pt->cached_offset + start->length == pos && + pt->add.len == start->start + start->length ) { + pt->length += len; + start->length += len; + return; + } + + /* Make a new piece and insert it */ new = piece_buffer_bump(pt->pieces); new->buffer = &pt->add; -- cgit v1.2.3