emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] trunk r113465: (decode_coding_utf_8): Add simple loop for


From: Richard M. Stallman
Subject: [Emacs-diffs] trunk r113465: (decode_coding_utf_8): Add simple loop for fast processing of ASCII characters.
Date: Fri, 19 Jul 2013 16:19:53 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 113465
revision-id: address@hidden
parent: address@hidden
committer: Richard Stallman <address@hidden>
branch nick: trunk
timestamp: Fri 2013-07-19 12:15:51 -0400
message:
  (decode_coding_utf_8): Add simple loop for fast processing of ASCII 
characters.
modified:
  src/ChangeLog                  changelog-20091113204419-o5vbwnq5f7feedwu-1438
  src/coding.c                   coding.c-20091113204419-o5vbwnq5f7feedwu-1077
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2013-07-19 14:34:56 +0000
+++ b/src/ChangeLog     2013-07-19 16:15:51 +0000
@@ -1,3 +1,8 @@
+2013-07-19  Richard Stallman  <address@hidden>
+
+       * coding.c (decode_coding_utf_8): Add simple loop for fast
+       processing of ASCII characters.
+
 2013-07-19  Paul Eggert  <address@hidden>
 
        * conf_post.h (RE_TRANSLATE_P) [emacs]: Remove obsolete optimization.

=== modified file 'src/coding.c'
--- a/src/coding.c      2013-07-16 21:35:45 +0000
+++ b/src/coding.c      2013-07-19 16:15:51 +0000
@@ -1363,6 +1363,45 @@
          break;
        }
 
+      /* In the simple case, rapidly handle ordinary characters */
+      if (multibytep && ! eol_dos
+         && charbuf < charbuf_end - 6 && src < src_end - 6)
+       {
+         while (charbuf < charbuf_end - 6 && src < src_end - 6)
+           {
+             c1 = *src;
+             if (c1 & 0x80)
+               break;
+             src++;
+             consumed_chars++;
+             *charbuf++ = c1;
+
+             c1 = *src;
+             if (c1 & 0x80)
+               break;
+             src++;
+             consumed_chars++;
+             *charbuf++ = c1;
+
+             c1 = *src;
+             if (c1 & 0x80)
+               break;
+             src++;
+             consumed_chars++;
+             *charbuf++ = c1;
+
+             c1 = *src;
+             if (c1 & 0x80)
+               break;
+             src++;
+             consumed_chars++;
+             *charbuf++ = c1;
+           }
+         /* If we handled at least one character, restart the main loop.  */
+         if (src != src_base)
+           continue;
+       }
+
       if (byte_after_cr >= 0)
        c1 = byte_after_cr, byte_after_cr = -1;
       else


reply via email to

[Prev in Thread] Current Thread [Next in Thread]