[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#43598: replace-in-string: finishing touches
From: |
Lars Ingebrigtsen |
Subject: |
bug#43598: replace-in-string: finishing touches |
Date: |
Sun, 27 Sep 2020 13:48:12 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) |
Mattias Engdegård <mattiase@acm.org> writes:
> Here are some minor optimisations:
>
> - Do the fast all-ASCII test (bytes == chars) before iterating through
> the bytes to check for non-ASCII chars.
[...]
> - if (STRING_MULTIBYTE (string))
> - return SBYTES (string) == SCHARS (string);
[...]
> - if (STRING_MULTIBYTE (haystack) == STRING_MULTIBYTE (needle)
> - || string_ascii_p (needle)
> - || string_ascii_p (haystack))
> + /* We can do a direct byte-string search if both strings have the
> + same multibyteness, or if at least one of them consists of ASCII
> + characters only. */
> + if (STRING_MULTIBYTE (haystack)
> + ? (STRING_MULTIBYTE (needle)
> + || SCHARS (haystack) == SBYTES (haystack) || string_ascii_p
> (needle))
> + : (!STRING_MULTIBYTE (needle)
> + || SCHARS (needle) == SBYTES (needle) || string_ascii_p (haystack)))
Didn't you just move the STRING_MULTIBYTE bits of the test from the
string_ascii_p function and open-code it into Fstring_search function
here? I'm not sure how that's an optimisation?
> + ptrdiff_t nbytes = SBYTES (needle);
> + for (ptrdiff_t i = 0; i < nbytes; i++)
> + {
> + int c = SREF (needle, i);
> + if (CHAR_BYTE8_HEAD_P (c))
> + i++; /* Skip raw byte. */
> + else if (!ASCII_CHAR_P (c))
> + return Qnil; /* Found a char that can't be in the haystack. */
> + }
Looks good.
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
- bug#43598: replace-in-string: finishing touches, (continued)
- bug#43598: replace-in-string: finishing touches, Mattias Engdegård, 2020/09/25
- bug#43598: replace-in-string: finishing touches, Lars Ingebrigtsen, 2020/09/25
- bug#43598: replace-in-string: finishing touches, Lars Ingebrigtsen, 2020/09/26
- bug#43598: replace-in-string: finishing touches, Lars Ingebrigtsen, 2020/09/26
- bug#43598: replace-in-string: finishing touches, Mattias Engdegård, 2020/09/27
- bug#43598: replace-in-string: finishing touches, Richard Stallman, 2020/09/27
- bug#43598: replace-in-string: finishing touches, Mattias Engdegård, 2020/09/28
- bug#43598: replace-in-string: finishing touches, Richard Stallman, 2020/09/28
- bug#43598: replace-in-string: finishing touches, Eli Zaretskii, 2020/09/29
- bug#43598: replace-in-string: finishing touches, Mattias Engdegård, 2020/09/27
- bug#43598: replace-in-string: finishing touches,
Lars Ingebrigtsen <=
- bug#43598: replace-in-string: finishing touches, Mattias Engdegård, 2020/09/27
- bug#43598: replace-in-string: finishing touches, Lars Ingebrigtsen, 2020/09/27
- bug#43598: replace-in-string: finishing touches, Mattias Engdegård, 2020/09/27
- bug#43598: replace-in-string: finishing touches, Eli Zaretskii, 2020/09/27
- bug#43598: replace-in-string: finishing touches, Lars Ingebrigtsen, 2020/09/27
- bug#43598: replace-in-string: finishing touches, Eli Zaretskii, 2020/09/27
- bug#43598: replace-in-string: finishing touches, Lars Ingebrigtsen, 2020/09/26
bug#43598: replace-in-string: finishing touches, Lars Ingebrigtsen, 2020/09/26