Signed-off-by: David Scott <dave.scott@eu.citrix.com>
let find_a_nonzero = wrap _find_a_nonzero
let find_a_zero = wrap _find_a_zero
+type substring = {
+ buf: string;
+ offset: int;
+ len: int
+}
+
let fold_over_nonzeros x len roundup f initial =
let rec inner acc offset =
if offset = len then acc
| None -> len
| Some e -> e in
let e = min len (roundup e) in
- inner (f acc (s, e - s)) e in
+ inner (f acc { buf = x; offset = s; len = e - s }) e in
inner initial 0
strictly the first nonzero. *)
val find_a_nonzero: string -> int -> int -> int option
+type substring = {
+ buf: string;
+ offset: int;
+ len: int
+}
+
(** [fold_over_nonzeros buf len roundup f initial] folds [f] over all
(start, length) pairs of non-zero data in string [buf] up to [len].
The end offset of each pair is rounded up with [roundup] (e.g. to
potential block boudaries. *)
-val fold_over_nonzeros: string -> int -> (int -> int) -> ('a -> int * int -> 'a) -> 'a -> 'a
+val fold_over_nonzeros: string -> int -> (int -> int) -> ('a -> substring -> 'a) -> 'a -> 'a