From 1a38daeb81db11ef2acd57690aad36b4ce3fe3da Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 30 May 2015 00:38:20 +0200 Subject: Simplify oversizing of strbufs Always add 50% on top of target size. No need for a loop. --- src/buffer.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'src/buffer.c') diff --git a/src/buffer.c b/src/buffer.c index 78d0a00..8ec38b0 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -42,18 +42,15 @@ void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) return; if (buf->asize == 0) { - new_size = target_size; new_ptr = NULL; } else { - new_size = buf->asize; new_ptr = buf->ptr; } - /* grow the buffer size by 1.5, until it's big enough - * to fit our target size */ - while (new_size < target_size) - // TODO: Check for overflow. - new_size = (new_size << 1) - (new_size >> 1); + /* Oversize the buffer by 50% to guarantee amortized linear time + * complexity on append operations. */ + // TODO: Check for overflow. + new_size = target_size + target_size / 2; /* round allocation up to multiple of 8 */ // TODO: Check for overflow. -- cgit v1.2.3