From cf7c3e9b9a8d589f2f31b92af1a9b24825359a90 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Tue, 18 Jul 2023 12:21:46 +0200 Subject: [PATCH] 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. --- ChangeLog | 5 +++++ lib/mbmemcasecmp.c | 31 ++++++++++++++++++++----------- modules/mbmemcasecmp | 2 +- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index a71e01cdbf..62479a2f6d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2023-07-18 Bruno Haible + 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 #include -#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: -- 2.39.5