mirror of
https://github.com/c-cube/moonpool.git
synced 2025-12-06 19:25:35 -05:00
add Bb_queue.to_{iter,gen,seq}
This commit is contained in:
parent
2800a3e0a6
commit
f90773a99a
2 changed files with 39 additions and 0 deletions
|
|
@ -93,3 +93,26 @@ let size (self : _ t) : int =
|
||||||
let n = Queue.length self.q in
|
let n = Queue.length self.q in
|
||||||
Mutex.unlock self.mutex;
|
Mutex.unlock self.mutex;
|
||||||
n
|
n
|
||||||
|
|
||||||
|
type 'a gen = unit -> 'a option
|
||||||
|
type 'a iter = ('a -> unit) -> unit
|
||||||
|
|
||||||
|
let to_iter self k =
|
||||||
|
try
|
||||||
|
while true do
|
||||||
|
let x = pop self in
|
||||||
|
k x
|
||||||
|
done
|
||||||
|
with Closed -> ()
|
||||||
|
|
||||||
|
let to_gen self : _ gen =
|
||||||
|
fun () ->
|
||||||
|
match pop self with
|
||||||
|
| exception Closed -> None
|
||||||
|
| x -> Some x
|
||||||
|
|
||||||
|
let rec to_seq self : _ Seq.t =
|
||||||
|
fun () ->
|
||||||
|
match pop self with
|
||||||
|
| exception Closed -> Seq.Nil
|
||||||
|
| x -> Seq.Cons (x, to_seq self)
|
||||||
|
|
|
||||||
|
|
@ -34,3 +34,19 @@ val try_push : 'a t -> 'a -> bool
|
||||||
|
|
||||||
val close : _ t -> unit
|
val close : _ t -> unit
|
||||||
(** Close the queue, meaning there won't be any more [push] allowed. *)
|
(** Close the queue, meaning there won't be any more [push] allowed. *)
|
||||||
|
|
||||||
|
type 'a gen = unit -> 'a option
|
||||||
|
type 'a iter = ('a -> unit) -> unit
|
||||||
|
|
||||||
|
val to_iter : 'a t -> 'a iter
|
||||||
|
(** [to_iter q] returns an iterator over all items in the queue.
|
||||||
|
This might not terminate if [q] is never closed.
|
||||||
|
@since NEXT_RELEASE *)
|
||||||
|
|
||||||
|
val to_gen : 'a t -> 'a gen
|
||||||
|
(** [to_gen q] returns a generator from the queue.
|
||||||
|
@since NEXT_RELEASE *)
|
||||||
|
|
||||||
|
val to_seq : 'a t -> 'a Seq.t
|
||||||
|
(** [to_gen q] returns a (transient) sequence from the queue.
|
||||||
|
@since NEXT_RELEASE *)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue