fix(vector): make sure Vector.to_{seq,gen} captures the length initially

This commit is contained in:
Simon Cruanes 2023-03-13 13:38:04 -04:00
parent 83009aac10
commit 503c61f72b
No known key found for this signature in database
GPG key ID: EBFFF6F283F3A2B4

View file

@ -582,22 +582,24 @@ let to_iter_rev v k =
done
let to_seq v =
let { size; vec } = v in
let rec aux i () =
if i >= size v then
if i >= size then
Seq.Nil
else
Seq.Cons (v.vec.(i), aux (i + 1))
Seq.Cons (vec.(i), aux (i + 1))
in
aux 0
let to_seq_rev v =
let { size; vec } = v in
let rec aux i () =
if i < 0 || i > size v then
if i < 0 then
Seq.Nil
else
Seq.Cons (v.vec.(i), aux (i - 1))
Seq.Cons (vec.(i), aux (i - 1))
in
aux (size v - 1)
aux (size - 1)
let slice_iter v start len =
assert (start >= 0 && len >= 0);
@ -655,10 +657,11 @@ let of_gen ?(init = create ()) g =
aux g
let to_gen v =
let { size; vec } = v in
let i = ref 0 in
fun () ->
if !i < v.size then (
let x = v.vec.(!i) in
if !i < size then (
let x = vec.(!i) in
incr i;
Some x
) else