]> Savannah Git Hosting - gnulib.git/commitdiff
mbsncasecmp: Optimize.
authorBruno Haible <bruno@clisp.org>
Tue, 18 Jul 2023 11:36:00 +0000 (13:36 +0200)
committerBruno Haible <bruno@clisp.org>
Tue, 18 Jul 2023 11:36:00 +0000 (13:36 +0200)
* lib/mbsncasecmp.c: Include mbuiterf.h instead of mbuiter.h.
(mbsncasecmp): Use mbuif_* macros instead of mbui_* macros.
* modules/mbsncasecmp (Depends-on): Add mbuiterf. Remove mbuiter.

ChangeLog
lib/mbsncasecmp.c
modules/mbsncasecmp

index 92d747f4e7d525497d2762bc49efbb509cf7bc3c..f7a201f46e291958da413970c4ca3563daa82cf6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2023-07-18  Bruno Haible  <bruno@clisp.org>
 
+       mbsncasecmp: Optimize.
+       * lib/mbsncasecmp.c: Include mbuiterf.h instead of mbuiter.h.
+       (mbsncasecmp): Use mbuif_* macros instead of mbui_* macros.
+       * modules/mbsncasecmp (Depends-on): Add mbuiterf. Remove mbuiter.
+
        mbscasecmp: Optimize.
        * lib/mbscasecmp.c: Include mbuiterf.h instead of mbuiter.h.
        (mbscasecmp): Use mbuif_* macros instead of mbui_* macros.
index b2dcb81417c594881e8f039d4d0d089b2a6991d3..d7b71ad188fe0d3edfb1d79679dc66412d9813b9 100644 (file)
@@ -24,7 +24,7 @@
 #include <ctype.h>
 #include <limits.h>
 
-#include "mbuiter.h"
+#include "mbuiterf.h"
 
 #define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch))
 
@@ -46,15 +46,21 @@ mbsncasecmp (const char *s1, const char *s2, size_t n)
      most often already in the very few first characters.  */
   if (MB_CUR_MAX > 1)
     {
-      mbui_iterator_t iter1;
-      mbui_iterator_t iter2;
+      mbuif_state_t state1;
+      const char *iter1;
+      mbuif_init (state1);
+      iter1 = s1;
 
-      mbui_init (iter1, s1);
-      mbui_init (iter2, s2);
+      mbuif_state_t state2;
+      const char *iter2;
+      mbuif_init (state2);
+      iter2 = s2;
 
-      while (mbui_avail (iter1) && mbui_avail (iter2))
+      while (mbuif_avail (state1, iter1) && mbuif_avail (state2, iter2))
         {
-          int cmp = mb_casecmp (mbui_cur (iter1), mbui_cur (iter2));
+          mbchar_t cur1 = mbuif_next (state1, iter1);
+          mbchar_t cur2 = mbuif_next (state2, iter2);
+          int cmp = mb_casecmp (cur1, cur2);
 
           if (cmp != 0)
             return cmp;
@@ -62,13 +68,13 @@ mbsncasecmp (const char *s1, const char *s2, size_t n)
           if (--n == 0)
             return 0;
 
-          mbui_advance (iter1);
-          mbui_advance (iter2);
+          iter1 += mb_len (cur1);
+          iter2 += mb_len (cur2);
         }
-      if (mbui_avail (iter1))
+      if (mbuif_avail (state1, iter1))
         /* s2 terminated before s1 and n.  */
         return 1;
-      if (mbui_avail (iter2))
+      if (mbuif_avail (state2, iter2))
         /* s1 terminated before s2 and n.  */
         return -1;
       return 0;
index 6f4300d3b72a950fc96adcedf9c73f70c16c3d71..9d6e2af5ce34a66698cc9b59cd1b2863c406dec9 100644 (file)
@@ -5,7 +5,7 @@ Files:
 lib/mbsncasecmp.c
 
 Depends-on:
-mbuiter
+mbuiterf
 string
 
 configure.ac: