]> git.wincent.com - wikitext.git/commitdiff
Abandon plan to eliminate ALLOC_N in _Wikitext_encode_link_target
authorWincent Colaiuta <win@wincent.com>
Tue, 12 May 2009 20:48:52 +0000 (22:48 +0200)
committerWincent Colaiuta <win@wincent.com>
Tue, 12 May 2009 20:54:19 +0000 (22:54 +0200)
It's not worth trying to eliminate this ALLOC_N because we are
writing the encoded output back to the input buffer. If we have
to use any percent escapes then we would need to do a potentially
expensive memmove operation each time we insert an escape.

(Although note, in the case where we eat leading whitespace we would
not need a memmove for that because we are effectively doing a
manual move anyway).

We could potentially add a special case which overwrote in-place
only if there were no percent escapes (ie. which only did the ALLOC_N
on seeing a percent escape, and only if there were not enough leading
whitespace to compensate for the extra characters required by the
escape) but I am not sure if it will be worth the extra complexity.

Signed-off-by: Wincent Colaiuta <win@wincent.com>
ext/parser.c

index bee02bb6f9b9adb37774597c1f3e219274002a90..27dfd3974f70e8a0d58f69a3d08fdc2a7aae53aa 100644 (file)
@@ -883,8 +883,6 @@ static void _Wikitext_encode_link_target(parser_t *parser)
         dest_len = non_space - dest_ptr;
     else
         dest_len = dest - dest_ptr;
         dest_len = non_space - dest_ptr;
     else
         dest_len = dest - dest_ptr;
-
-    // TOOD: try to avoid this copy by working directly inside link_target buffer
     str_clear(parser->link_target);
     str_append(parser->link_target, dest_ptr, dest_len);
     free(dest_ptr);
     str_clear(parser->link_target);
     str_append(parser->link_target, dest_ptr, dest_len);
     free(dest_ptr);