diff --git a/src/core/CCVector.ml b/src/core/CCVector.ml index 792d178e..a93ab7b8 100644 --- a/src/core/CCVector.ml +++ b/src/core/CCVector.ml @@ -586,6 +586,21 @@ let rev v = rev (create ()) |> to_list = [] *) +let rev_iter f v = + for i = v.size-1 downto 0 do + f v.vec.(i) + done + +(*$T + let v = of_list [1;2;3] in (fun f->rev_iter f v) |> Sequence.to_list = [3;2;1] +*) + +(*$Q + Q.(list int) (fun l -> \ + let v = of_list l in \ + (fun f->rev_iter f v) |> Sequence.to_list = List.rev l) +*) + let size v = v.size let length v = v.size diff --git a/src/core/CCVector.mli b/src/core/CCVector.mli index deec25fd..d1b00c06 100644 --- a/src/core/CCVector.mli +++ b/src/core/CCVector.mli @@ -228,6 +228,10 @@ val rev : ('a,_) t -> ('a, 'mut) t val rev' : ('a, rw) t -> unit (** Reverse the vector in place *) +val rev_iter : ('a -> unit) -> ('a,_) t -> unit +(** [rev_iter f a] is the same as [iter f (rev a)], only more efficient. + @since NEXT_RELEASE *) + val size : ('a,_) t -> int (** number of elements in vector *)