From 8d9d6ad81916045d199acf1cd9ddc107ffd87544 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Tue, 18 Jul 2023 13:43:38 +0200 Subject: [PATCH] mbspbrk: Optimize. * lib/mbspbrk.c: Include mbuiterf.h instead of mbuiter.h. (mbspbrk): Use mbuif_* macros instead of mbui_* macros. * modules/mbspbrk (Depends-on): Add mbuiterf. Remove mbuiter. --- ChangeLog | 5 +++++ lib/mbspbrk.c | 33 +++++++++++++++++++-------------- modules/mbspbrk | 2 +- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index ec0fa50d61..31ab6508b0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2023-07-18 Bruno Haible + mbspbrk: Optimize. + * lib/mbspbrk.c: Include mbuiterf.h instead of mbuiter.h. + (mbspbrk): Use mbuif_* macros instead of mbui_* macros. + * modules/mbspbrk (Depends-on): Add mbuiterf. Remove mbuiter. + mbspcasecmp: Optimize. * lib/mbspcasecmp.c: Include mbuiterf.h instead of mbuiter.h. (mbspcasecmp): Use mbuif_* macros instead of mbui_* macros. diff --git a/lib/mbspbrk.c b/lib/mbspbrk.c index 6132ec1489..9482eb00cb 100644 --- a/lib/mbspbrk.c +++ b/lib/mbspbrk.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 pointer to it, or NULL if none @@ -36,25 +36,30 @@ mbspbrk (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))) - return (char *) mbui_cur_ptr (iter); + if (mbschr (accept, *iter)) + return (char *) iter; } 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))) - return (char *) mbui_cur_ptr (iter); + 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)) + return (char *) iter; + aiter += mb_len (acur); + } } + iter += mb_len (cur); } return NULL; } diff --git a/modules/mbspbrk b/modules/mbspbrk index 2841721312..158f55caa8 100644 --- a/modules/mbspbrk +++ b/modules/mbspbrk @@ -5,7 +5,7 @@ Files: lib/mbspbrk.c Depends-on: -mbuiter +mbuiterf string mbschr strpbrk -- 2.39.5