From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27862 invoked by alias); 10 Nov 2016 13:47:35 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 39906 Received: (qmail 19918 invoked from network); 10 Nov 2016 13:47:35 -0000 X-Qmail-Scanner-Diagnostics: from mailout1.w1.samsung.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(210.118.77.11):SA:0(-2.9/5.0):. Processed in 0.513487 secs); 10 Nov 2016 13:47:35 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=RP_MATCHES_RCVD autolearn=unavailable autolearn_force=no version=3.4.1 X-Envelope-From: p.stephenson@samsung.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: none (ns1.primenet.com.au: domain at samsung.com does not designate permitted sender hosts) X-AuditID: cbfec7f4-f791c6d000006eac-9e-58247a6dd0f3 Date: Thu, 10 Nov 2016 13:47:22 +0000 From: Peter Stephenson To: zsh-workers@zsh.org Subject: multibyte optimisations Message-id: <20161110134722.06e6dc51@pwslap01u.europe.root.pri> In-reply-to: <1478774232.2371010.783342705.69C81F52@webmail.messagingengine.com> Organization: Samsung Cambridge Solution Centre X-Mailer: Claws Mail 3.7.9 (GTK+ 2.22.0; i386-redhat-linux-gnu) MIME-version: 1.0 Content-type: text/plain; charset=UTF-8 Content-transfer-encoding: quoted-printable X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrJIsWRmVeSWpSXmKPExsWy7djPc7q5VSoRBtcmWFgcbH7I5MDoserg B6YAxigum5TUnMyy1CJ9uwSujPb9hgXThSs2rHrC2sC4n6+LkYNDQsBE4sk80y5GTiBTTOLC vfVsXYxcHEICSxkluhctY4ZwepkkZrXeY4GoMpE4vmUOI0RiGaPE55d72EESQgLTmCR+/fCC SJxhlHi+ZgoThHOWUeLr31XMIFUsAqoSrSv6mUBsNgFDiambZjOC2CIC4hJn154HWyEsoCDx 8sACZpD7eAXsJa4dVgIJcwoESGzd2gs2hl9AX+Lq309MEBfZS8y8cgZsDK+AoMSPyRCXMgto SmzdvZ4dwtaWePLuAivIPRIC/9kkmnacYIP4X1Zi0wFmCNNF4v8acYiRwhKvjm9hh7BlJDo7 DkKt6meUeNLtCzFmBqPE6TM72CAS1hJ9ty8yQuzik5i0bTrUTF6JjjYhiBIPiVsvpjFC2I4S c78fZ5nAqDgLydWzkFw9C8nVCxiZVzGKpJYW56anFpvoFSfmFpfmpesl5+duYgQmgNP/jn/Z wbj4mNUhRgEORiUe3g5N5Qgh1sSy4srcQ4wSHMxKIrxbKlQihHhTEiurUovy44tKc1KLDzFK c7AoifPuWXAlXEggPbEkNTs1tSC1CCbLxMEp1cC4hGPl4z+Lf/JuOdC1fWXqF61fPDMC7H+x Wr2fYs95QPb4+hsS1jsqdU12b9gTrFN61fXQURmxttZtCyeffnVSq1fRxN2qqW6bdb9z2xm1 U3ZLRBumNEodO2n4wEl76839u+Ln8PxXUcosOBC1vMUg8mDLDc4IrQQx07zVUyw9d3xZdyQ5 I99LiaU4I9FQi7moOBEADByKWvwCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrKIsWRmVeSWpSXmKPExsVy+t/xq7p5VSoRBpMOCFocbH7I5MDoserg B6YAxig3m4zUxJTUIoXUvOT8lMy8dFul0BA3XQslhbzE3FRbpQhd35AgJYWyxJxSIM/IAA04 OAe4Byvp2yW4ZbTvNyyYLlyxYdUT1gbG/XxdjJwcEgImEse3zGGEsMUkLtxbz9bFyMUhJLCE UeLf/bmMEM4MJonmH7ehMucYJbYfmwPlnGWUWNS+jwmkn0VAVaJ1RT+YzSZgKDF102ywuSIC 4hJn155nAbGFBRQkXh5YwNzFyMHBK2Avce2wEkiYUyBAYuvWXmaImUsZJdaumcYMkuAX0Je4 +vcTE8R99hIzr5wBm8krICjxY/I9sJnMAuoSk+YtYoawtSWevLvACmILAcVv3N3NPoFReBaS lllIWmYhaVnAyLyKUSS1tDg3PbfYUK84Mbe4NC9dLzk/dxMjMIq2Hfu5eQfjpY3BhxgFOBiV eHg7NJUjhFgTy4orcw8xSnAwK4nwbqlQiRDiTUmsrEotyo8vKs1JLT7EaAoMmInMUqLJ+cAI zyuJNzQxNLc0NDK2sDA3MlIS5y35cCVcSCA9sSQ1OzW1ILUIpo+Jg1OqgbHZLyk9Oeda2yw1 ha3ue2pfFye+NSku5pD75e215N5akfxr38za3llb1jvIv0kS0ph8RmSJjKZXbv6vBLbnateS Ul7zJanXPnyl8n8VX2UGh+ay5yJndkoqCbv9T+feb7LJsf94wPZvj14tesdlKN5dPefFGebp uaH5i3jXaf5pqnS8u2ivjBJLcUaioRZzUXEiAIBUefe4AgAA X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20161110134725eucas1p2463da6e54a0e0ae591e4cc48f5e773d0 X-Msg-Generator: CA X-Sender-IP: 182.198.249.179 X-Local-Sender: =?UTF-8?B?UGV0ZXIgU3RlcGhlbnNvbhtTQ1NDLURhdGEgUGxhbmUb?= =?UTF-8?B?7IK87ISx7KCE7J6QG1ByaW5jaXBhbCBFbmdpbmVlciwgU29mdHdhcmU=?= X-Global-Sender: =?UTF-8?B?UGV0ZXIgU3RlcGhlbnNvbhtTQ1NDLURhdGEgUGxhbmUbU2Ft?= =?UTF-8?B?c3VuZyBFbGVjdHJvbmljcxtQcmluY2lwYWwgRW5naW5lZXIsIFNvZnR3YXJl?= X-Sender-Code: =?UTF-8?B?QzEwG0VIURtDMTBDRDA1Q0QwNTAwNTg=?= CMS-TYPE: 201P X-HopCount: 7 X-CMS-RootMailID: 20161110103845epcas3p3e7cabeffae723219daafa8d3e6b32f12 X-RootMTR: 20161110103845epcas3p3e7cabeffae723219daafa8d3e6b32f12 References: <1478774232.2371010.783342705.69C81F52@webmail.messagingengine.com> On Thu, 10 Nov 2016 02:37:12 -0800 Sebastian Gniazdowski wrote: > Other pointed functions seem to be very valid / expected =E2=80=93=C2=A0m= ultibyte > functions. They can be optimized if a courageous decision will be made = =E2=80=93 > to do what charnext / pattern.c does: >=20 > if (!(patglobflags & GF_MULTIBYTE) || !(STOUC(*x) & 0x80)) > return x + 1; >=20 > I.e. to optimize for ASCII as subset of UTF-8 also when calling > MB_METACHARLEN, not only for MB_METASTRLEN (recent change). These look straightforward and along the same lines as what we already do. pws diff --git a/Src/utils.c b/Src/utils.c index 3d535b8..cceaf4c 100644 --- a/Src/utils.c +++ b/Src/utils.c @@ -84,7 +84,15 @@ set_widearray(char *mb_array, Widechar_array wca) =20 mb_charinit(); while (*mb_array) { - int mblen =3D mb_metacharlenconv(mb_array, &wci); + int mblen; + + if (STOUC(*mb_array) <=3D 0x7f) { + mb_array++; + *wcptr++ =3D (wchar_t)*mb_array; + continue; + } + + mblen =3D mb_metacharlenconv(mb_array, &wci); =20 if (!mblen) break; @@ -5249,6 +5257,12 @@ mb_metacharlenconv_r(const char *s, wint_t *wcp, mbs= tate_t *mbsp) const char *ptr; wchar_t wc; =20 + if (STOUC(*s) <=3D 0x7f) { + if (wcp) + *wcp =3D (wint_t)*s; + return 1; + } + for (ptr =3D s; *ptr; ) { if (*ptr =3D=3D Meta) { inchar =3D *++ptr ^ 32; @@ -5301,7 +5315,7 @@ mb_metacharlenconv_r(const char *s, wint_t *wcp, mbst= ate_t *mbsp) mod_export int mb_metacharlenconv(const char *s, wint_t *wcp) { - if (!isset(MULTIBYTE)) { + if (!isset(MULTIBYTE) || STOUC(*s) <=3D 0x7f) { /* treat as single byte, possibly metafied */ if (wcp) *wcp =3D (wint_t)(*s =3D=3D Meta ? s[1] ^ 32 : *s); @@ -5442,6 +5456,12 @@ mb_charlenconv_r(const char *s, int slen, wint_t *wc= p, mbstate_t *mbsp) const char *ptr; wchar_t wc; =20 + if (slen && STOUC(*s) <=3D 0x7f) { + if (wcp) + *wcp =3D (wint_t)*s; + return 1; + } + for (ptr =3D s; slen; ) { inchar =3D *ptr; ptr++; @@ -5477,7 +5497,7 @@ mb_charlenconv_r(const char *s, int slen, wint_t *wcp= , mbstate_t *mbsp) mod_export int mb_charlenconv(const char *s, int slen, wint_t *wcp) { - if (!isset(MULTIBYTE)) { + if (!isset(MULTIBYTE) || STOUC(*s) <=3D 0x7f) { if (wcp) *wcp =3D (wint_t)*s; return 1;