From 201b1e7bac1fbbbc9c3ea65f947c36104a7f1b18 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Tue, 18 Jul 2023 12:23:12 +0200 Subject: [PATCH] trim: Optimize. * lib/trim.c: Include mbiterf.h instead of mbiter.h. (trim2): Use mbif_* macros instead of mbi_* macros. * modules/trim (Depends-on): Add mbiterf. Remove mbiter. --- ChangeLog | 5 +++++ lib/trim.c | 47 ++++++++++++++++++++++++++++++----------------- modules/trim | 2 +- 3 files changed, 36 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 62479a2f6d..af0f128722 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2023-07-18 Bruno Haible + trim: Optimize. + * lib/trim.c: Include mbiterf.h instead of mbiter.h. + (trim2): Use mbif_* macros instead of mbi_* macros. + * modules/trim (Depends-on): Add mbiterf. Remove mbiter. + mbmemcasecmp: Optimize. * lib/mbmemcasecmp.c: Include mbiterf.h instead of mbiter.h. (mbmemcasecmp): Use mbif_* macros instead of mbi_* macros. diff --git a/lib/trim.c b/lib/trim.c index d33dd13a5c..23ee5a2e2d 100644 --- a/lib/trim.c +++ b/lib/trim.c @@ -27,7 +27,7 @@ #include #include "mbchar.h" -#include "mbiter.h" +#include "mbiterf.h" #include "xalloc.h" char * @@ -42,17 +42,23 @@ trim2 (const char *s, int how) if (MB_CUR_MAX > 1) { - mbi_iterator_t i; - /* Trim leading whitespaces. */ if (how != TRIM_TRAILING) { - mbi_init (i, d, strlen (d)); + const char *d_end = d + strlen (d); + mbif_state_t state; + char *iter; + for (mbif_init (state), iter = d; mbif_avail (state, iter, d_end); ) + { + mbchar_t cur = mbif_next (state, iter, d_end); - for (; mbi_avail (i) && mb_isspace (mbi_cur (i)); mbi_advance (i)) - ; + if (!mb_isspace (cur)) + break; - memmove (d, mbi_cur_ptr (i), strlen (mbi_cur_ptr (i)) + 1); + iter += mb_len (cur); + } + + memmove (d, iter, strlen (iter) + 1); } /* Trim trailing whitespaces. */ @@ -60,16 +66,23 @@ trim2 (const char *s, int how) { char *start_of_spaces = NULL; - mbi_init (i, d, strlen (d)); - - for (; mbi_avail (i); mbi_advance (i)) - if (mb_isspace (mbi_cur (i))) - { - if (start_of_spaces == NULL) - start_of_spaces = (char *) mbi_cur_ptr (i); - } - else - start_of_spaces = NULL; + const char *d_end = d + strlen (d); + mbif_state_t state; + char *iter; + for (mbif_init (state), iter = d; mbif_avail (state, iter, d_end); ) + { + mbchar_t cur = mbif_next (state, iter, d_end); + + if (mb_isspace (cur)) + { + if (start_of_spaces == NULL) + start_of_spaces = iter; + } + else + start_of_spaces = NULL; + + iter += mb_len (cur); + } if (start_of_spaces != NULL) *start_of_spaces = '\0'; diff --git a/modules/trim b/modules/trim index 2de4d6fb01..90f553076a 100644 --- a/modules/trim +++ b/modules/trim @@ -8,7 +8,7 @@ lib/trim.c Depends-on: xalloc mbchar -mbiter +mbiterf memmove strdup -- 2.39.5