Module Ordered_collection_common

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
val get_pos_len_exn : ?pos:int -> ?len:int -> length:int -> int * int
get_pos_len and get_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: * * 0 <= pos <= length * 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