From 9d0a1d84965796fde621b9e53ad38e42578bdcb0 Mon Sep 17 00:00:00 2001 From: Petr Makhnev <51853996+i582@users.noreply.github.com> Date: Fri, 19 May 2023 22:24:23 +0400 Subject: [PATCH] builtin: speed up string methods with vmemcpy instead of `for` loop for copying data (#18211) --- vlib/builtin/string.v | 27 ++++----------------------- 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/vlib/builtin/string.v b/vlib/builtin/string.v index 7c4450313f..f47330bd00 100644 --- a/vlib/builtin/string.v +++ b/vlib/builtin/string.v @@ -1051,12 +1051,8 @@ pub fn (s string) substr(start int, end int) string { str: unsafe { malloc_noscan(len + 1) } len: len } - for i in 0 .. len { - unsafe { - res.str[i] = s.str[start + i] - } - } unsafe { + vmemcpy(res.str, s.str + start, len) res.str[len] = 0 } return res @@ -1077,12 +1073,8 @@ pub fn (s string) substr_with_check(start int, end int) !string { str: unsafe { malloc_noscan(len + 1) } len: len } - for i in 0 .. len { - unsafe { - res.str[i] = s.str[start + i] - } - } unsafe { + vmemcpy(res.str, s.str + start, len) res.str[len] = 0 } return res @@ -1114,14 +1106,7 @@ pub fn (s string) substr_ni(_start int, _end int) string { } if start > s.len || end < start { - mut res := string{ - str: unsafe { malloc_noscan(1) } - len: 0 - } - unsafe { - res.str[0] = 0 - } - return res + return '' } len := end - start @@ -1131,12 +1116,8 @@ pub fn (s string) substr_ni(_start int, _end int) string { str: unsafe { malloc_noscan(len + 1) } len: len } - for i in 0 .. len { - unsafe { - res.str[i] = s.str[start + i] - } - } unsafe { + vmemcpy(res.str, s.str + start, len) res.str[len] = 0 } return res