diff options
author | S-H-GAMELINKS <[email protected]> | 2022-10-22 18:26:53 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <[email protected]> | 2022-10-23 17:38:59 +0900 |
commit | 1e06ef1328880bf39a7e6d757678be619c21f0c1 (patch) | |
tree | 897161510a307d24e56eedb94a957034dc58cbfb /re.c | |
parent | 86450d03a8c1570571c20452578cb923060e1d1f (diff) |
Introduce rb_memsearch_with_char_size function
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/6616
Diffstat (limited to 're.c')
-rw-r--r-- | re.c | 24 |
1 files changed, 14 insertions, 10 deletions
@@ -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 |