From: Lars Ingebrigtsen <larsi@gnus.org>
To: "Mattias Engdegård" <mattiase@acm.org>
Cc: 43598@debbugs.gnu.org
Subject: bug#43598: replace-in-string: finishing touches
Date: Sun, 27 Sep 2020 00:44:38 +0200 [thread overview]
Message-ID: <87pn68b1k9.fsf@gnus.org> (raw)
In-Reply-To: <2CFAAACA-2FD3-44C2-B12E-E49DAA968115@acm.org> ("Mattias Engdegård"'s message of "Fri, 25 Sep 2020 12:42:06 +0200")
Mattias Engdegård <mattiase@acm.org> writes:
> We should also consider the optimisations:
> - If SCHARS(needle)>SCHARS(haystack) then no match is possible.
I've now done this.
> - If either needle or haystack is all-ASCII (all bytes in 0..127),
> then we can use memmem without conversion.
I thought that surely there's be a function like that in Emacs, but I
can't find it?
Instead there's code like
&& (STRING_MULTIBYTE (string)
? (chars == bytes) : string_ascii_p (string))
[...]
/* Whether STRING only contains chars in the 0..127 range. */
static bool
string_ascii_p (Lisp_Object string)
{
ptrdiff_t nbytes = SBYTES (string);
for (ptrdiff_t i = 0; i < nbytes; i++)
if (SREF (string, i) > 127)
return false;
return true;
}
and
unsigned char *p = SDATA (name);
while (*p && ASCII_CHAR_P (*p))
p++;
sprinkled around the code base.
Would it make sense to add a new utility function that does the right
thing for both multibyte and unibyte strings? (The multibyte case is
just chars == bytes, but the unibyte case would be a loop.)
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
next prev parent reply other threads:[~2020-09-26 22:44 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-24 20:52 bug#43598: replace-in-string: finishing touches Mattias Engdegård
2020-09-24 21:12 ` Lars Ingebrigtsen
2020-09-24 21:19 ` Lars Ingebrigtsen
2020-09-24 23:18 ` Lars Ingebrigtsen
2020-09-25 9:21 ` Eli Zaretskii
2020-09-25 10:09 ` Lars Ingebrigtsen
2020-09-24 23:54 ` Lars Ingebrigtsen
2020-09-25 10:42 ` Mattias Engdegård
2020-09-25 11:11 ` Lars Ingebrigtsen
2020-09-25 11:22 ` Mattias Engdegård
2020-09-25 11:32 ` Lars Ingebrigtsen
2020-09-27 0:03 ` Lars Ingebrigtsen
2020-09-27 0:34 ` Lars Ingebrigtsen
2020-09-27 8:45 ` Mattias Engdegård
2020-09-28 3:41 ` Richard Stallman
2020-09-28 9:40 ` Mattias Engdegård
2020-09-29 3:29 ` Richard Stallman
2020-09-29 4:12 ` Eli Zaretskii
2020-09-27 11:12 ` Mattias Engdegård
2020-09-27 11:48 ` Lars Ingebrigtsen
2020-09-27 11:57 ` Mattias Engdegård
2020-09-27 12:02 ` Lars Ingebrigtsen
2020-09-27 16:14 ` Mattias Engdegård
2020-09-27 16:19 ` Eli Zaretskii
2020-09-27 16:41 ` Lars Ingebrigtsen
2020-09-27 16:48 ` Eli Zaretskii
2020-09-26 22:44 ` Lars Ingebrigtsen [this message]
2020-09-26 22:25 ` Lars Ingebrigtsen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87pn68b1k9.fsf@gnus.org \
--to=larsi@gnus.org \
--cc=43598@debbugs.gnu.org \
--cc=mattiase@acm.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).