From 52b5d9c2c026825e6f385ffa8b1ad0fb081c301f Mon Sep 17 00:00:00 2001 From: Arne Goedeke <el@laramies.com> Date: Fri, 17 May 2013 19:49:55 +0200 Subject: [PATCH] string_to_utf8: use macros to access string. much faster for long 7bit strings --- src/builtin_functions.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/builtin_functions.c b/src/builtin_functions.c index 3960436e88..4a69af7cca 100644 --- a/src/builtin_functions.c +++ b/src/builtin_functions.c @@ -1949,13 +1949,14 @@ PMOD_EXPORT void f_string_to_utf8(INT32 args) struct pike_string *out; ptrdiff_t i,j; INT_TYPE extended = 0; + PCHARP src; get_all_args("string_to_utf8", args, "%W.%i", &in, &extended); len = in->len; - for(i=0; i < in->len; i++) { - unsigned INT32 c = index_shared_string(in, i); + for(i=0,src=MKPCHARP_STR(in); i < in->len; INC_PCHARP(src,1),i++) { + unsigned INT32 c = EXTRACT_PCHARP(src); if (c & ~0x7f) { /* 8bit or more. */ len++; @@ -2001,8 +2002,8 @@ PMOD_EXPORT void f_string_to_utf8(INT32 args) } out = begin_shared_string(len); - for(i=j=0; i < in->len; i++) { - unsigned INT32 c = index_shared_string(in, i); + for(i=j=0,src=MKPCHARP_STR(in); i < in->len; INC_PCHARP(src,1),i++) { + unsigned INT32 c = EXTRACT_PCHARP(src); if (!(c & ~0x7f)) { /* 7bit */ out->str[j++] = c; -- GitLab