Module Shexp_bigstring.Bigstring
val create : int -> t
val length : t -> int
val blit : src:t -> src_pos:int -> dst:t -> dst_pos:int -> len:int -> unit
val blit_string_t : src:string -> src_pos:int -> dst:t -> dst_pos:int -> len:int -> unit
val blit_t_bytes : src:t -> src_pos:int -> dst:Stdlib.Bytes.t -> dst_pos:int -> len:int -> unit
val sub_string : t -> pos:int -> len:int -> string
val index : t -> pos:int -> len:int -> char:char -> int option
val rindex : t -> pos:int -> len:int -> char:char -> int option
val pos_len_ok : pos:int -> len:int -> length:int -> bool
Efficiently checks that the range denoted by
(pos, len)
is in the range0..length
.length
is assumed to be>= 0
.
val check_pos_len_exn : pos:int -> len:int -> length:int -> unit
Raises if
(pos, len)
denotes a range outside of0..length
.
val with_temporary : size:int -> f:(t -> 'a) -> 'a
Allocate a bigstring and pass it to
f
. The memory allocated for the bigstring is released as soon asf
returns. As such, the bigstring shouldn't be used afterf
returns.This is more efficient than waiting on the garbage collector to release the external memory.
type ('a, 'b) fold_temporary_result
=
|
Resize of
{
new_size : int;
state : 'a;
}
|
Continue of
{
state : 'a;
}
Same as
Resize
with the same size|
Return of 'b
val fold_temporary : size:int -> init:'a -> f:(t -> 'a -> ('a, 'b) fold_temporary_result) -> 'b
Same as
with_temporary
, but allow to resize the bigstring if needed.If
f
returnsResize { new_size; state }
, the bigstring will be resized to the given new size andf
will be called with the new bigstring andstate
. The contents of the bigstring up to the min of the old and new sizes is preserved.