Check suffix and prefix without allocation

Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
This commit is contained in:
Rudi Grinberg 2018-05-27 01:23:55 +07:00
parent 88e71c3432
commit 89b0e397f7
1 changed files with 10 additions and 3 deletions

View File

@ -29,17 +29,24 @@ let break s ~pos =
let is_empty s = length s = 0
let rec check_prefix s ~prefix len i =
i = len || s.[i] = prefix.[i] && check_prefix s ~prefix len (i + 1)
let rec check_suffix s ~suffix suffix_len offset i =
i = suffix_len ||
s.[offset + i] = suffix.[i] &&
check_suffix s ~suffix suffix_len offset (i + 1)
let is_prefix s ~prefix =
let len = length s in
let prefix_len = length prefix in
len >= prefix_len &&
sub s ~pos:0 ~len:prefix_len = prefix
len >= prefix_len && (check_prefix s ~prefix prefix_len 0)
let is_suffix s ~suffix =
let len = length s in
let suffix_len = length suffix in
len >= suffix_len &&
sub s ~pos:(len - suffix_len) ~len:suffix_len = suffix
(check_suffix s ~suffix suffix_len (len - suffix_len) 0)
let drop_prefix s ~prefix =
if is_prefix s ~prefix then