include String
let empty = ""
let of_string = copy
let to_string = copy
let sub_string = sub
let blit_string = blit
let unsafe_to_string : t -> string = fun s -> s
let unsafe_of_string : string -> t = fun s -> s
let extend s left right =
(* length of the final string *)
let dstlen = left + length s + right in
(* length of the included portion of the input string *)
let srclen = min 0 left + length s + min 0 right in
let t = create dstlen in
if srclen > 0 then blit s (max 0 (-left)) t (max 0 left) srclen;
t
let init len f =
let s = create len in
for i = 0 to len - 1 do
set s i (f i);
done;
s
let mapi f input =
let output = create (length input) in
for i = 0 to length input - 1 do
output.[i] <- f i input.[i];
done;
output
let cat = (^)