mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 03:05:28 -05:00
add CCDeque.{filter,filter_map}
This commit is contained in:
parent
f5acacd139
commit
a0d8fe46ec
2 changed files with 25 additions and 0 deletions
|
|
@ -411,6 +411,23 @@ let filter_in_place (d:_ t) f : unit =
|
|||
(filter_in_place q f; to_list q) = (List.filter f l))
|
||||
*)
|
||||
|
||||
let filter f q =
|
||||
let q' = create() in
|
||||
iter (fun x -> if f x then push_back q' x) q;
|
||||
q'
|
||||
|
||||
(*$Q
|
||||
Q.(list small_nat) (fun l -> \
|
||||
let f = fun x -> x mod 2=0 in \
|
||||
let q = filter f (of_list l) in \
|
||||
(to_list q) = (List.filter f l))
|
||||
*)
|
||||
|
||||
let filter_map f q =
|
||||
let q' = create() in
|
||||
iter (fun x -> match f x with None -> () | Some y -> push_back q' y) q;
|
||||
q'
|
||||
|
||||
let rec gen_iter_ f g = match g() with
|
||||
| None -> ()
|
||||
| Some x -> f x; gen_iter_ f g
|
||||
|
|
|
|||
|
|
@ -123,6 +123,14 @@ val to_rev_list : 'a t -> 'a list
|
|||
(** Efficient conversion to list, in reverse order.
|
||||
@since 0.13 *)
|
||||
|
||||
val filter : ('a -> bool) -> 'a t -> 'a t
|
||||
(** Filter into a new copy.
|
||||
@since NEXT_RELEASE *)
|
||||
|
||||
val filter_map : ('a -> 'b option) -> 'a t -> 'b t
|
||||
(** Filter map into a new copy
|
||||
@since NEXT_RELEASE *)
|
||||
|
||||
val filter_in_place : 'a t -> ('a -> bool) -> unit
|
||||
(** Keep only elements that satisfy the predicate.
|
||||
@since NEXT_RELEASE *)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue