From 9555f8f21b9f1780de307c19da268ef63f7c2ae9 Mon Sep 17 00:00:00 2001 From: antirez Date: Wed, 14 Mar 2012 10:13:23 +0100 Subject: [PATCH] sds.c new function sdsRemoveFreeSpace(). The new function is used in order to resize the string allocation so that only the minimal allocation possible is used, removing all the free space at the end of the string normally used to improve efficiency of concatenation operations. --- src/sds.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/sds.c b/src/sds.c index 092a431e..82d12e23 100644 --- a/src/sds.c +++ b/src/sds.c @@ -111,6 +111,18 @@ sds sdsMakeRoomFor(sds s, size_t addlen) { return newsh->buf; } +/* Reallocate the sds string so that it has no free space at the end. The + * contained string remains not altered, but next concatenation operations + * will require a reallocation. */ +sds sdsRemoveFreeSpace(sds s) { + struct sdshdr *sh; + + sh = (void*) (s-(sizeof(struct sdshdr))); + sh = zrealloc(sh, sizeof(struct sdshdr)+sh->len+1); + sh->free = 0; + return sh->buf; +} + /* Increment the sds length and decrements the left free space at the * end of the string accordingly to 'incr'. Also set the null term * in the new end of the string. -- 2.45.2