module Ordered_collection_common:sig
..end
normalize length_fun thing_with_length i
is just i
, unless
i
is negative, in which case it's length_fun thing_with_length + i
.
This is used by various python-style slice functions.val normalize : length_fun:('a -> int) -> 'a -> int -> int
val slice : length_fun:('a -> int) ->
sub_fun:('a -> pos:int -> len:int -> 'a) -> 'a -> int -> int -> 'a
get_pos_len
, get_pos_len_exn
, and validate_pos_len_exn
are intended to be used
by functions that take a sequence (array, string, bigstring, ...) and an optional
pos
and len
specifying a subrange of the sequence. Such functions should call
get_pos_len
with the length of the sequence and the optional pos
and len
, and it
will return the pos
and len
specifying the range, where the default pos
is zero
and the default len
is to go to the end of the sequence.
It should be the case that:
pos >= 0 && len >= 0 && pos + len <= length
Note that this allows pos = length
and len = 0
, i.e. an empty subrange
at the end of the sequence.
get_pos_len
returns (pos', len')
specifying a subrange where:
pos' = match pos with None -> 0 | Some i -> i len' = match len with None -> length - pos | Some i -> i
val get_pos_len : ?pos:int -> ?len:int -> length:int -> (int * int, string) Result.t
val get_pos_len_exn : ?pos:int -> ?len:int -> length:int -> int * int
val check_pos_len_exn : pos:int -> len:int -> length:int -> unit
check_pos_len_exn ~pos ~len ~length
raises unless
pos >= 0 && len >= 0 && pos + len <= length
.