]> Savannah Git Hosting - gnulib.git/commitdiff
trim: Optimize.
authorBruno Haible <bruno@clisp.org>
Tue, 18 Jul 2023 10:23:12 +0000 (12:23 +0200)
committerBruno Haible <bruno@clisp.org>
Tue, 18 Jul 2023 10:23:12 +0000 (12:23 +0200)
* lib/trim.c: Include mbiterf.h instead of mbiter.h.
(trim2): Use mbif_* macros instead of mbi_* macros.
* modules/trim (Depends-on): Add mbiterf. Remove mbiter.

ChangeLog
lib/trim.c
modules/trim

index 62479a2f6d5402d6b849081caf21485011e5f260..af0f128722df6307350080459fc55dd68cee7ca9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2023-07-18  Bruno Haible  <bruno@clisp.org>
 
+       trim: Optimize.
+       * lib/trim.c: Include mbiterf.h instead of mbiter.h.
+       (trim2): Use mbif_* macros instead of mbi_* macros.
+       * modules/trim (Depends-on): Add mbiterf. Remove mbiter.
+
        mbmemcasecmp: Optimize.
        * lib/mbmemcasecmp.c: Include mbiterf.h instead of mbiter.h.
        (mbmemcasecmp): Use mbif_* macros instead of mbi_* macros.
index d33dd13a5c1e09a6f90035323f840a8df3c421e0..23ee5a2e2d05fc46f2c028252d4def58440c4f31 100644 (file)
@@ -27,7 +27,7 @@
 #include <stdlib.h>
 
 #include "mbchar.h"
-#include "mbiter.h"
+#include "mbiterf.h"
 #include "xalloc.h"
 
 char *
@@ -42,17 +42,23 @@ trim2 (const char *s, int how)
 
   if (MB_CUR_MAX > 1)
     {
-      mbi_iterator_t i;
-
       /* Trim leading whitespaces. */
       if (how != TRIM_TRAILING)
         {
-          mbi_init (i, d, strlen (d));
+          const char *d_end = d + strlen (d);
+          mbif_state_t state;
+          char *iter;
+          for (mbif_init (state), iter = d; mbif_avail (state, iter, d_end); )
+            {
+              mbchar_t cur = mbif_next (state, iter, d_end);
 
-          for (; mbi_avail (i) && mb_isspace (mbi_cur (i)); mbi_advance (i))
-            ;
+              if (!mb_isspace (cur))
+                break;
 
-          memmove (d, mbi_cur_ptr (i), strlen (mbi_cur_ptr (i)) + 1);
+              iter += mb_len (cur);
+            }
+
+          memmove (d, iter, strlen (iter) + 1);
         }
 
       /* Trim trailing whitespaces. */
@@ -60,16 +66,23 @@ trim2 (const char *s, int how)
         {
           char *start_of_spaces = NULL;
 
-          mbi_init (i, d, strlen (d));
-
-          for (; mbi_avail (i); mbi_advance (i))
-            if (mb_isspace (mbi_cur (i)))
-              {
-                if (start_of_spaces == NULL)
-                  start_of_spaces = (char *) mbi_cur_ptr (i);
-              }
-            else
-              start_of_spaces = NULL;
+          const char *d_end = d + strlen (d);
+          mbif_state_t state;
+          char *iter;
+          for (mbif_init (state), iter = d; mbif_avail (state, iter, d_end); )
+            {
+              mbchar_t cur = mbif_next (state, iter, d_end);
+
+              if (mb_isspace (cur))
+                {
+                  if (start_of_spaces == NULL)
+                    start_of_spaces = iter;
+                }
+              else
+                start_of_spaces = NULL;
+
+              iter += mb_len (cur);
+            }
 
           if (start_of_spaces != NULL)
             *start_of_spaces = '\0';
index 2de4d6fb011c801be39bff554275981fc00764ff..90f553076a4895a381ffce744e3ce26be347f1c4 100644 (file)
@@ -8,7 +8,7 @@ lib/trim.c
 Depends-on:
 xalloc
 mbchar
-mbiter
+mbiterf
 memmove
 strdup