From: Bruno Haible Date: Tue, 18 Jul 2023 11:27:44 +0000 (+0200) Subject: mbslen: Optimize. X-Git-Tag: v1.0~1073 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=1a81b69f648002b5b8e85f1bc57d3a8995a860fd;p=gnulib.git mbslen: Optimize. * lib/mbslen.c: Include mbuiterf.h instead of mbuiter.h. (mbslen): Use mbuif_* macros instead of mbui_* macros. * modules/mbslen (Depends-on): Add mbuiterf. Remove mbuiter. --- diff --git a/ChangeLog b/ChangeLog index 6380a3cbc0..d1b135958c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2023-07-18 Bruno Haible + mbslen: Optimize. + * lib/mbslen.c: Include mbuiterf.h instead of mbuiter.h. + (mbslen): Use mbuif_* macros instead of mbui_* macros. + * modules/mbslen (Depends-on): Add mbuiterf. Remove mbuiter. + mbuiterf: Add a benchmark. * tests/bench-mbuiterf.c: New file, based on tests/bench-mbuiter.c. * modules/mbuiterf-bench-tests: New file, based on diff --git a/lib/mbslen.c b/lib/mbslen.c index 54c20be02f..18642f55e9 100644 --- a/lib/mbslen.c +++ b/lib/mbslen.c @@ -22,7 +22,7 @@ #include -#include "mbuiter.h" +#include "mbuiterf.h" /* Return the number of multibyte characters in the character string STRING. */ size_t @@ -30,12 +30,16 @@ mbslen (const char *string) { if (MB_CUR_MAX > 1) { - size_t count; - mbui_iterator_t iter; - - count = 0; - for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter)) - count++; + size_t count = 0; + + mbuif_state_t state; + const char *iter; + for (mbuif_init (state), iter = string; mbuif_avail (state, iter); ) + { + mbchar_t cur = mbuif_next (state, iter); + count++; + iter += mb_len (cur); + } return count; } diff --git a/modules/mbslen b/modules/mbslen index 55993aa59c..6b6c6078e5 100644 --- a/modules/mbslen +++ b/modules/mbslen @@ -6,7 +6,7 @@ lib/mbslen.c m4/mbslen.m4 Depends-on: -mbuiter +mbuiterf string configure.ac: