]> Savannah Git Hosting - gnulib.git/commitdiff
mbmemcasecmp: Optimize.
authorBruno Haible <bruno@clisp.org>
Tue, 18 Jul 2023 10:21:46 +0000 (12:21 +0200)
committerBruno Haible <bruno@clisp.org>
Tue, 18 Jul 2023 10:21:46 +0000 (12:21 +0200)
* 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
lib/mbmemcasecmp.c
modules/mbmemcasecmp

index a71e01cdbf6adf5484c74ee253bb17db5a6a5268..62479a2f6d5402d6b849081caf21485011e5f260 100644 (file)
--- 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.
index d79879866d10c2446db05bb22f41733eeb2a9dd4..e53ffd99aec8ae74762e8415ec79af0e5775350a 100644 (file)
@@ -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;
index 52db8d34eedb542532c38af7a5a58e244bc1183d..0034893cd0de86935c11b533c6b519f9dbd92b6f 100644 (file)
@@ -6,7 +6,7 @@ lib/mbmemcasecmp.h
 lib/mbmemcasecmp.c
 
 Depends-on:
-mbiter
+mbiterf
 
 configure.ac: