]> Savannah Git Hosting - gnulib.git/commitdiff
mbscspn: Optimize.
authorBruno Haible <bruno@clisp.org>
Tue, 18 Jul 2023 11:44:39 +0000 (13:44 +0200)
committerBruno Haible <bruno@clisp.org>
Tue, 18 Jul 2023 11:44:39 +0000 (13:44 +0200)
* 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.

ChangeLog
lib/mbscspn.c
modules/mbscspn

index 31ab6508b059a4891f6c4232ad8d6fa30aa13c28..daf69036420567a5a722f703c95a88c02fedfdd4 100644 (file)
--- 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.
index 9cb0f451baf106a1ec1a553fd0ee6c9e9d56b5d5..f67a557f4b15027f3351afbf134faf84a3a9313d 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
    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);
index 76f5748f12971156b7e03408a9a3088d46a3fb30..c730f907a7b6a0d2791d58911035a749a6c0b63d 100644 (file)
@@ -5,7 +5,7 @@ Files:
 lib/mbscspn.c
 
 Depends-on:
-mbuiter
+mbuiterf
 string
 mbschr
 strcspn