]> git.ipfire.org Git - thirdparty/gnulib.git/commitdiff
unigbrk/u*-grapheme-breaks: Tiny optimization.
authorBruno Haible <bruno@clisp.org>
Sun, 18 May 2025 23:52:59 +0000 (01:52 +0200)
committerBruno Haible <bruno@clisp.org>
Sun, 18 May 2025 23:52:59 +0000 (01:52 +0200)
* lib/unigbrk/u-grapheme-breaks.h (FUNC): Exploit the fact that n > 0.

ChangeLog
lib/unigbrk/u-grapheme-breaks.h

index 32a3bb93a3c3e60eb576b2bef699ac501c24938c..f9eecbc588f54af3c8c82b55e1d10f1135f25862 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2025-05-18  Bruno Haible  <bruno@clisp.org>
+
+       unigbrk/u*-grapheme-breaks: Tiny optimization.
+       * lib/unigbrk/u-grapheme-breaks.h (FUNC): Exploit the fact that n > 0.
+
 2025-05-17  Bruno Haible  <bruno@clisp.org>
 
        cosh: Add more tests.
index 4066c9e6bb2aff67add8ae62fa73ed077b1c6fc6..30d5853a4551065aaa565864a324ff7abe2a7568 100644 (file)
@@ -1,6 +1,5 @@
 /* Grapheme cluster break function.
    Copyright (C) 2010-2025 Free Software Foundation, Inc.
-   Written by Ben Pfaff <blp@cs.stanford.edu>, 2010.
 
    This file is free software.
    It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+".
@@ -23,6 +22,8 @@
    License and of the GNU General Public License along with this
    program.  If not, see <https://www.gnu.org/licenses/>.  */
 
+/* Written by Ben Pfaff, Daiki Ueno, Bruno Haible.  */
+
 /* This file implements section 3 "Grapheme Cluster Boundaries"
    of Unicode Standard Annex #29 <https://www.unicode.org/reports/tr29/>.  */
 
@@ -61,8 +62,9 @@ FUNC (const UNIT *s, size_t n, char *p)
       /* Don't break inside multibyte characters.  */
       memset (p, 0, n);
 
-      while (s < s_end)
+      do
         {
+          /* Invariant: Here s < s_end.  */
           ucs4_t uc;
           int count = U_MBTOUC (&uc, s, s_end - s);
           int prop = uc_graphemeclusterbreak_property (uc);
@@ -157,5 +159,6 @@ FUNC (const UNIT *s, size_t n, char *p)
           s += count;
           p += count;
         }
+      while (s < s_end);
     }
 }