From: Bruno Haible <bruno@clisp.org> Date: Tue, 18 Jul 2023 10:21:46 +0000 (+0200) Subject: mbmemcasecmp: Optimize. X-Git-Tag: v1.0~1078 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=cf7c3e9b9a8d589f2f31b92af1a9b24825359a90;p=gnulib.git mbmemcasecmp: Optimize. * lib/mbmemcasecmp.c: Include mbiterf.h instead of mbiter.h. (mbmemcasecmp): Use mbif_* macros instead of mbi_* macros. * modules/mbmemcasecmp (Depends-on): Add mbiterf. Remove mbiter. --- diff --git a/ChangeLog b/ChangeLog index a71e01cdbf..62479a2f6d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2023-07-18 Bruno Haible <bruno@clisp.org> + mbmemcasecmp: Optimize. + * lib/mbmemcasecmp.c: Include mbiterf.h instead of mbiter.h. + (mbmemcasecmp): Use mbif_* macros instead of mbi_* macros. + * modules/mbmemcasecmp (Depends-on): Add mbiterf. Remove mbiter. + mbsnlen: Optimize. * lib/mbsnlen.c: Include mbiterf.h instead of mbiter.h. (mbsnlen): Use mbif_* macros instead of mbi_* macros. diff --git a/lib/mbmemcasecmp.c b/lib/mbmemcasecmp.c index d79879866d..e53ffd99ae 100644 --- a/lib/mbmemcasecmp.c +++ b/lib/mbmemcasecmp.c @@ -25,7 +25,7 @@ #include <limits.h> #include <stdlib.h> -#include "mbiter.h" +#include "mbiterf.h" #define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) @@ -37,26 +37,35 @@ mbmemcasecmp (const char *s1, size_t n1, const char *s2, size_t n2) if (MB_CUR_MAX > 1) { - mbi_iterator_t iter1; - mbi_iterator_t iter2; + const char *s1_end = s1 + n1; + mbif_state_t state1; + const char *iter1; + mbif_init (state1); + iter1 = s1; - mbi_init (iter1, s1, n1); - mbi_init (iter2, s2, n2); + const char *s2_end = s2 + n2; + mbif_state_t state2; + const char *iter2; + mbif_init (state2); + iter2 = s2; - while (mbi_avail (iter1) && mbi_avail (iter2)) + while (mbif_avail (state1, iter1, s1_end) + && mbif_avail (state2, iter2, s2_end)) { - int cmp = mb_casecmp (mbi_cur (iter1), mbi_cur (iter2)); + mbchar_t cur1 = mbif_next (state1, iter1, s1_end); + mbchar_t cur2 = mbif_next (state2, iter2, s2_end); + int cmp = mb_casecmp (cur1, cur2); if (cmp != 0) return cmp; - mbi_advance (iter1); - mbi_advance (iter2); + iter1 += mb_len (cur1); + iter2 += mb_len (cur2); } - if (mbi_avail (iter1)) + if (mbif_avail (state1, iter1, s1_end)) /* s2 terminated before s1. */ return 1; - if (mbi_avail (iter2)) + if (mbif_avail (state2, iter2, s2_end)) /* s1 terminated before s2. */ return -1; return 0; diff --git a/modules/mbmemcasecmp b/modules/mbmemcasecmp index 52db8d34ee..0034893cd0 100644 --- a/modules/mbmemcasecmp +++ b/modules/mbmemcasecmp @@ -6,7 +6,7 @@ lib/mbmemcasecmp.h lib/mbmemcasecmp.c Depends-on: -mbiter +mbiterf configure.ac: