From 1e06ef1328880bf39a7e6d757678be619c21f0c1 Mon Sep 17 00:00:00 2001 From: S-H-GAMELINKS Date: Sat, 22 Oct 2022 18:26:53 +0900 Subject: Introduce rb_memsearch_with_char_size function --- re.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/re.c b/re.c index f52492245e..d66f389c6f 100644 --- a/re.c +++ b/re.c @@ -220,11 +220,16 @@ rb_memsearch_qs_utf8(const unsigned char *xs, long m, const unsigned char *ys, l return -1; } +enum char_size +{ + WCHAR_SIZE = 2, + QCHAR_SIZE = 4 +}; + static inline long -rb_memsearch_wchar(const unsigned char *xs, long m, const unsigned char *ys, long n) +rb_memsearch_with_char_size(const unsigned char *xs, long m, const unsigned char *ys, long n, enum char_size char_size) { const unsigned char *x = xs, x0 = *xs, *y = ys; - enum {char_size = 2}; for (n -= m; n >= 0; n -= char_size, y += char_size) { if (x0 == *y && memcmp(x+1, y+1, m-1) == 0) @@ -234,16 +239,15 @@ rb_memsearch_wchar(const unsigned char *xs, long m, const unsigned char *ys, lon } static inline long -rb_memsearch_qchar(const unsigned char *xs, long m, const unsigned char *ys, long n) +rb_memsearch_wchar(const unsigned char *xs, long m, const unsigned char *ys, long n) { - const unsigned char *x = xs, x0 = *xs, *y = ys; - enum {char_size = 4}; + return rb_memsearch_with_char_size(xs, m, ys, n, WCHAR_SIZE); +} - for (n -= m; n >= 0; n -= char_size, y += char_size) { - if (x0 == *y && memcmp(x+1, y+1, m-1) == 0) - return y - ys; - } - return -1; +static inline long +rb_memsearch_qchar(const unsigned char *xs, long m, const unsigned char *ys, long n) +{ + return rb_memsearch_with_char_size(xs, m, ys, n, QCHAR_SIZE); } long -- cgit v1.2.1