From: Bruno Haible <bruno@clisp.org> Date: Tue, 18 Jul 2023 11:44:39 +0000 (+0200) Subject: mbscspn: Optimize. X-Git-Tag: v1.0~1065 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=eaa7397e70adeafce4afff9269ad5c438a584e2c;p=gnulib.git mbscspn: Optimize. * lib/mbscspn.c: Include mbuiterf.h instead of mbuiter.h. (mbscspn): Use mbuif_* macros instead of mbui_* macros. * modules/mbscspn (Depends-on): Add mbuiterf. Remove mbuiter. --- diff --git a/ChangeLog b/ChangeLog index 31ab6508b0..daf6903642 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2023-07-18 Bruno Haible <bruno@clisp.org> + mbscspn: Optimize. + * lib/mbscspn.c: Include mbuiterf.h instead of mbuiter.h. + (mbscspn): Use mbuif_* macros instead of mbui_* macros. + * modules/mbscspn (Depends-on): Add mbuiterf. Remove mbuiter. + mbspbrk: Optimize. * lib/mbspbrk.c: Include mbuiterf.h instead of mbuiter.h. (mbspbrk): Use mbuif_* macros instead of mbui_* macros. diff --git a/lib/mbscspn.c b/lib/mbscspn.c index 9cb0f451ba..f67a557f4b 100644 --- a/lib/mbscspn.c +++ b/lib/mbscspn.c @@ -20,7 +20,7 @@ /* Specification. */ #include <string.h> -#include "mbuiter.h" +#include "mbuiterf.h" /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the number of bytes from the @@ -40,28 +40,33 @@ mbscspn (const char *string, const char *accept) /* General case. */ if (MB_CUR_MAX > 1) { - mbui_iterator_t iter; - - for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter)) + mbuif_state_t state; + const char *iter; + for (mbuif_init (state), iter = string; mbuif_avail (state, iter); ) { - if (mb_len (mbui_cur (iter)) == 1) + mbchar_t cur = mbuif_next (state, iter); + if (mb_len (cur) == 1) { - if (mbschr (accept, * mbui_cur_ptr (iter))) + if (mbschr (accept, *iter)) goto found; } else { - mbui_iterator_t aiter; - - for (mbui_init (aiter, accept); - mbui_avail (aiter); - mbui_advance (aiter)) - if (mb_equal (mbui_cur (aiter), mbui_cur (iter))) - goto found; + mbuif_state_t astate; + const char *aiter; + for (mbuif_init (astate), aiter = accept; + mbuif_avail (astate, aiter); ) + { + mbchar_t acur = mbuif_next (astate, aiter); + if (mb_equal (acur, cur)) + goto found; + aiter += mb_len (acur); + } } + iter += mb_len (cur); } found: - return mbui_cur_ptr (iter) - string; + return iter - string; } else return strcspn (string, accept); diff --git a/modules/mbscspn b/modules/mbscspn index 76f5748f12..c730f907a7 100644 --- a/modules/mbscspn +++ b/modules/mbscspn @@ -5,7 +5,7 @@ Files: lib/mbscspn.c Depends-on: -mbuiter +mbuiterf string mbschr strcspn