From 6e99f1c8e8517a9468c001780ede909f2f364d08 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Thu, 8 Oct 2015 12:01:18 +0200 Subject: [PATCH] add `CCVector.to_seq_rev` --- src/core/CCVector.ml | 10 ++++++++++ src/core/CCVector.mli | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/src/core/CCVector.ml b/src/core/CCVector.ml index 60f68286..2745f2b6 100644 --- a/src/core/CCVector.ml +++ b/src/core/CCVector.ml @@ -531,6 +531,16 @@ let of_seq ?(init=create ()) seq = let to_seq v k = iter k v +let to_seq_rev v k = + for i = v.size - 1 downto 0 do + k (Array.unsafe_get v.vec i) + done + +(*$Q + Q.(list int) (fun l -> \ + let v= of_list l in v |> to_seq_rev |> Sequence.to_rev_list = l) +*) + let slice_seq v start len = assert (start >= 0 && len >= 0); fun k -> diff --git a/src/core/CCVector.mli b/src/core/CCVector.mli index 79cc9798..3c5976f8 100644 --- a/src/core/CCVector.mli +++ b/src/core/CCVector.mli @@ -225,6 +225,11 @@ val of_seq : ?init:('a,rw) t -> 'a sequence -> ('a, rw) t val to_seq : ('a,_) t -> 'a sequence +val to_seq_rev : ('a, _) t -> 'a sequence +(** [to_seq_rev v] returns the sequence of elements of [v] in reverse order, + that is, the last elements of [v] are iterated on first. + @since NEXT_RELEASE *) + val slice : ('a,rw) t -> ('a array * int * int) (** Vector as an array slice. By doing it we expose the internal array, so be careful! *)