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

ChangeLog
lib/mbsspn.c
modules/mbsspn

index daf69036420567a5a722f703c95a88c02fedfdd4..2b7028c0b0f047cc8c512e0e2de20a46ee07ef36 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2023-07-18  Bruno Haible  <bruno@clisp.org>
 
+       mbsspn: Optimize.
+       * lib/mbsspn.c: Include mbuiterf.h instead of mbuiter.h.
+       (mbsspn): Use mbuif_* macros instead of mbui_* macros.
+       * modules/mbsspn (Depends-on): Add mbuiterf. Remove mbuiter.
+
        mbscspn: Optimize.
        * lib/mbscspn.c: Include mbuiterf.h instead of mbuiter.h.
        (mbscspn): Use mbuif_* macros instead of mbui_* macros.
index ee41181f7d76a8da71593b54316f69cd7a163694..5e3832b72c80f18300f32b80c787c19a9046a3fa 100644 (file)
@@ -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
    not in the character string REJECT.  Return the number of bytes from the
@@ -38,13 +38,16 @@ mbsspn (const char *string, const char *reject)
 
       if (MB_CUR_MAX > 1)
         {
-          mbui_iterator_t iter;
-
-          for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter))
-            if (!(mb_len (mbui_cur (iter)) == 1
-                  && (unsigned char) * mbui_cur_ptr (iter) == uc))
-              break;
-          return mbui_cur_ptr (iter) - string;
+          mbuif_state_t state;
+          const char *iter;
+          for (mbuif_init (state), iter = string; mbuif_avail (state, iter); )
+            {
+              mbchar_t cur = mbuif_next (state, iter);
+              if (!(mb_len (cur) == 1 && (unsigned char) *iter == uc))
+                break;
+              iter += mb_len (cur);
+            }
+          return iter - string;
         }
       else
         {
@@ -59,30 +62,34 @@ mbsspn (const char *string, const char *reject)
   /* 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 (reject, * mbui_cur_ptr (iter)) == NULL)
+              if (mbschr (reject, *iter) == NULL)
                 goto found;
             }
           else
             {
-              mbui_iterator_t aiter;
-
-              for (mbui_init (aiter, reject);; mbui_advance (aiter))
+              mbuif_state_t astate;
+              const char *aiter;
+              for (mbuif_init (astate), aiter = reject; ; )
                 {
-                  if (!mbui_avail (aiter))
+                  if (!mbuif_avail (astate, aiter))
                     goto found;
-                  if (mb_equal (mbui_cur (aiter), mbui_cur (iter)))
+                  mbchar_t acur = mbuif_next (astate, aiter);
+                  if (mb_equal (acur, cur))
                     break;
+                  aiter += mb_len (acur);
                 }
             }
+          iter += mb_len (cur);
         }
      found:
-      return mbui_cur_ptr (iter) - string;
+      return iter - string;
     }
   else
     return strspn (string, reject);
index 5cc407299e35f89c8edaaa6f913a5df52b7e9897..25cfd3f59f36e4701b4c06a298d9cf8402af264d 100644 (file)
@@ -5,7 +5,7 @@ Files:
 lib/mbsspn.c
 
 Depends-on:
-mbuiter
+mbuiterf
 string
 mbschr