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: