From eaa7397e70adeafce4afff9269ad5c438a584e2c Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Tue, 18 Jul 2023 13:44:39 +0200 Subject: [PATCH] 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. --- ChangeLog | 5 +++++ lib/mbscspn.c | 33 +++++++++++++++++++-------------- modules/mbscspn | 2 +- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 31ab6508b0..daf6903642 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2023-07-18 Bruno Haible + 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 -#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 -- 2.39.5