From 6c1b6ef7a5d849ccfcb8cbd163443f983f264857 Mon Sep 17 00:00:00 2001 From: ksss Date: Thu, 31 Dec 2015 17:52:22 +0900 Subject: Use memchr for performance ```ruby s = "b" str = ("a" * 100 + s) t = Time.now str.index(s) puts Time.now - t ``` before => 0.000788 after => 0.000508 --- ```ruby s = "b" str = ("a" * 100 * 1024 * 1024 + s) t = Time.now str.index(s) puts Time.now - t ``` before => 0.225474 after => 0.008658 --- src/string.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/string.c') diff --git a/src/string.c b/src/string.c index 6664eabd6..0d31a304f 100644 --- a/src/string.c +++ b/src/string.c @@ -352,12 +352,12 @@ mrb_memsearch(const void *x0, mrb_int m, const void *y0, mrb_int n) return 0; } else if (m == 1) { - const unsigned char *ys = y, *ye = ys + n; - for (; y < ye; ++y) { - if (*x == *y) - return y - ys; - } - return -1; + const unsigned char *ys = memchr(y, *x, n); + + if (ys) + return ys - y; + else + return -1; } return mrb_memsearch_qs((const unsigned char *)x0, m, (const unsigned char *)y0, n); } -- cgit v1.2.3