From 3c76b58750a5e5220484f1376eb087b97a2a4015 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Tue, 18 Jul 2023 13:46:29 +0200 Subject: [PATCH] mbsspn: Optimize. * lib/mbsspn.c: Include mbuiterf.h instead of mbuiter.h. (mbsspn): Use mbuif_* macros instead of mbui_* macros. * modules/mbsspn (Depends-on): Add mbuiterf. Remove mbuiter. --- ChangeLog | 5 +++++ lib/mbsspn.c | 45 ++++++++++++++++++++++++++------------------- modules/mbsspn | 2 +- 3 files changed, 32 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index daf6903642..2b7028c0b0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2023-07-18 Bruno Haible + mbsspn: Optimize. + * lib/mbsspn.c: Include mbuiterf.h instead of mbuiter.h. + (mbsspn): Use mbuif_* macros instead of mbui_* macros. + * modules/mbsspn (Depends-on): Add mbuiterf. Remove mbuiter. + mbscspn: Optimize. * lib/mbscspn.c: Include mbuiterf.h instead of mbuiter.h. (mbscspn): Use mbuif_* macros instead of mbui_* macros. diff --git a/lib/mbsspn.c b/lib/mbsspn.c index ee41181f7d..5e3832b72c 100644 --- a/lib/mbsspn.c +++ b/lib/mbsspn.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 not in the character string REJECT. Return the number of bytes from the @@ -38,13 +38,16 @@ mbsspn (const char *string, const char *reject) if (MB_CUR_MAX > 1) { - mbui_iterator_t iter; - - for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter)) - if (!(mb_len (mbui_cur (iter)) == 1 - && (unsigned char) * mbui_cur_ptr (iter) == uc)) - break; - return mbui_cur_ptr (iter) - string; + mbuif_state_t state; + const char *iter; + for (mbuif_init (state), iter = string; mbuif_avail (state, iter); ) + { + mbchar_t cur = mbuif_next (state, iter); + if (!(mb_len (cur) == 1 && (unsigned char) *iter == uc)) + break; + iter += mb_len (cur); + } + return iter - string; } else { @@ -59,30 +62,34 @@ mbsspn (const char *string, const char *reject) /* 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 (reject, * mbui_cur_ptr (iter)) == NULL) + if (mbschr (reject, *iter) == NULL) goto found; } else { - mbui_iterator_t aiter; - - for (mbui_init (aiter, reject);; mbui_advance (aiter)) + mbuif_state_t astate; + const char *aiter; + for (mbuif_init (astate), aiter = reject; ; ) { - if (!mbui_avail (aiter)) + if (!mbuif_avail (astate, aiter)) goto found; - if (mb_equal (mbui_cur (aiter), mbui_cur (iter))) + mbchar_t acur = mbuif_next (astate, aiter); + if (mb_equal (acur, cur)) break; + aiter += mb_len (acur); } } + iter += mb_len (cur); } found: - return mbui_cur_ptr (iter) - string; + return iter - string; } else return strspn (string, reject); diff --git a/modules/mbsspn b/modules/mbsspn index 5cc407299e..25cfd3f59f 100644 --- a/modules/mbsspn +++ b/modules/mbsspn @@ -5,7 +5,7 @@ Files: lib/mbsspn.c Depends-on: -mbuiter +mbuiterf string mbschr -- 2.39.5