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