From: Bruno Haible <bruno@clisp.org>
Date: Tue, 18 Jul 2023 11:44:39 +0000 (+0200)
Subject: mbscspn: Optimize.
X-Git-Tag: v1.0~1065
X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=eaa7397e70adeafce4afff9269ad5c438a584e2c;p=gnulib.git

mbscspn: Optimize.

* lib/mbscspn.c: Include mbuiterf.h instead of mbuiter.h.
(mbscspn): Use mbuif_* macros instead of mbui_* macros.
* modules/mbscspn (Depends-on): Add mbuiterf. Remove mbuiter.
---

diff --git a/ChangeLog b/ChangeLog
index 31ab6508b0..daf6903642 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2023-07-18  Bruno Haible  <bruno@clisp.org>
 
+	mbscspn: Optimize.
+	* lib/mbscspn.c: Include mbuiterf.h instead of mbuiter.h.
+	(mbscspn): Use mbuif_* macros instead of mbui_* macros.
+	* modules/mbscspn (Depends-on): Add mbuiterf. Remove mbuiter.
+
 	mbspbrk: Optimize.
 	* lib/mbspbrk.c: Include mbuiterf.h instead of mbuiter.h.
 	(mbspbrk): Use mbuif_* macros instead of mbui_* macros.
diff --git a/lib/mbscspn.c b/lib/mbscspn.c
index 9cb0f451ba..f67a557f4b 100644
--- a/lib/mbscspn.c
+++ b/lib/mbscspn.c
@@ -20,7 +20,7 @@
 /* Specification.  */
 #include <string.h>
 
-#include "mbuiter.h"
+#include "mbuiterf.h"
 
 /* Find the first occurrence in the character string STRING of any character
    in the character string ACCEPT.  Return the number of bytes from the
@@ -40,28 +40,33 @@ mbscspn (const char *string, const char *accept)
   /* General case.  */
   if (MB_CUR_MAX > 1)
     {
-      mbui_iterator_t iter;
-
-      for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter))
+      mbuif_state_t state;
+      const char *iter;
+      for (mbuif_init (state), iter = string; mbuif_avail (state, iter); )
         {
-          if (mb_len (mbui_cur (iter)) == 1)
+          mbchar_t cur = mbuif_next (state, iter);
+          if (mb_len (cur) == 1)
             {
-              if (mbschr (accept, * mbui_cur_ptr (iter)))
+              if (mbschr (accept, *iter))
                 goto found;
             }
           else
             {
-              mbui_iterator_t aiter;
-
-              for (mbui_init (aiter, accept);
-                   mbui_avail (aiter);
-                   mbui_advance (aiter))
-                if (mb_equal (mbui_cur (aiter), mbui_cur (iter)))
-                  goto found;
+              mbuif_state_t astate;
+              const char *aiter;
+              for (mbuif_init (astate), aiter = accept;
+                   mbuif_avail (astate, aiter); )
+                {
+                  mbchar_t acur = mbuif_next (astate, aiter);
+                  if (mb_equal (acur, cur))
+                    goto found;
+                  aiter += mb_len (acur);
+                }
             }
+          iter += mb_len (cur);
         }
      found:
-      return mbui_cur_ptr (iter) - string;
+      return iter - string;
     }
   else
     return strcspn (string, accept);
diff --git a/modules/mbscspn b/modules/mbscspn
index 76f5748f12..c730f907a7 100644
--- a/modules/mbscspn
+++ b/modules/mbscspn
@@ -5,7 +5,7 @@ Files:
 lib/mbscspn.c
 
 Depends-on:
-mbuiter
+mbuiterf
 string
 mbschr
 strcspn