A queue implemented with an array.
The implementation will grow the array as necessary. The array will
never automatically be shrunk, but the size can be interrogated and set
with capacity and set_capacity.
Iteration functions (iter, fold, map, concat_map, filter,
filter_map, filter_inplace, and some functions from Container.S1)
will raise if the queue is modified during iteration.
Also see Linked_queue, which has different performance characteristics.
module type S = Base__.Queue_intf.Sinclude S with type a S.t := a tinclude sig ... endval t_of_sexp : (Base.Sexp.t ‑> 'a) ‑> Base.Sexp.t ‑> 'a tval sexp_of_t : ('a ‑> Base.Sexp.t) ‑> 'a t ‑> Base.Sexp.tinclude Base.Indexed_container.S1 with type a t := a tinclude Base.Container.S1val mem : 'a t ‑> 'a ‑> equal:('a ‑> 'a ‑> bool) ‑> boolChecks whether the provided element is there, using equal.
val length : 'a t ‑> intval is_empty : 'a t ‑> boolval iter : 'a t ‑> f:('a ‑> unit) ‑> unitval fold : 'a t ‑> init:'accum ‑> f:('accum ‑> 'a ‑> 'accum) ‑> 'accumfold t ~init ~f returns f (... f (f (f init e1) e2) e3 ...) en, where e1..en
are the elements of t
val fold_result : 'a t ‑> init:'accum ‑> f:('accum ‑> 'a ‑> ('accum, 'e) Base.Result.t) ‑> ('accum, 'e) Base.Result.tfold_result t ~init ~f is a short-circuiting version of fold that runs in the
Result monad. If f returns an Error _, that value is returned without any
additional invocations of f.
val fold_until : 'a t ‑> init:'accum ‑> f:('accum ‑> 'a ‑> ('accum, 'final) Base__.Container_intf.Continue_or_stop.t) ‑> finish:('accum ‑> 'final) ‑> 'finalfold_until t ~init ~f ~finish is a short-circuiting version of fold. If f
returns Stop _ the computation ceases and results in that value. If f returns
Continue _, the fold will proceed. If f never returns Stop _, the final result
is computed by finish.
val exists : 'a t ‑> f:('a ‑> bool) ‑> boolReturns true if and only if there exists an element for which the provided
function evaluates to true. This is a short-circuiting operation.
val for_all : 'a t ‑> f:('a ‑> bool) ‑> boolReturns true if and only if the provided function evaluates to true for all
elements. This is a short-circuiting operation.
val count : 'a t ‑> f:('a ‑> bool) ‑> intReturns the number of elements for which the provided function evaluates to true.
val sum : (module Base.Commutative_group.S with type t = 'sum) ‑> 'a t ‑> f:('a ‑> 'sum) ‑> 'sumReturns the sum of f i for all i in the container.
val find : 'a t ‑> f:('a ‑> bool) ‑> 'a optionReturns as an option the first element for which f evaluates to true.
val find_map : 'a t ‑> f:('a ‑> 'b option) ‑> 'b optionReturns the first evaluation of f that returns Some, and returns None if there
is no such element.
val to_list : 'a t ‑> 'a listval to_array : 'a t ‑> 'a arrayval min_elt : 'a t ‑> compare:('a ‑> 'a ‑> int) ‑> 'a optionReturns a minimum (resp maximum) element from the collection using the provided
compare function, or None if the collection is empty. In case of a tie, the first
element encountered while traversing the collection is returned. The implementation
uses fold so it has the same complexity as fold.
val max_elt : 'a t ‑> compare:('a ‑> 'a ‑> int) ‑> 'a optionThese are all like their equivalents in Container except that an index starting at
0 is added as the first argument to f.
val foldi : ('a t, 'a, _) Base__.Indexed_container_intf.foldival iteri : ('a t, 'a) Base__.Indexed_container_intf.iterival existsi : 'a t ‑> f:(int ‑> 'a ‑> bool) ‑> boolval for_alli : 'a t ‑> f:(int ‑> 'a ‑> bool) ‑> boolval counti : 'a t ‑> f:(int ‑> 'a ‑> bool) ‑> intval findi : 'a t ‑> f:(int ‑> 'a ‑> bool) ‑> (int * 'a) optionval find_mapi : 'a t ‑> f:(int ‑> 'a ‑> 'b option) ‑> 'b optionval of_list : 'a list ‑> 'a tof_list list returns a queue t with the elements of list in the same order as
the elements of list (i.e. the first element of t is the first element of the
list).
val of_array : 'a array ‑> 'a tval enqueue_all : 'a t ‑> 'a list ‑> unitenqueue_all t list adds all elements in list to t in order of list.
val dequeue_exn : 'a t ‑> 'aval peek_exn : 'a t ‑> 'aval filter_inplace : 'a t ‑> f:('a ‑> bool) ‑> unitfilter_inplace t ~f removes all elements of t that don't satisfy f. If f
raises, t is unchanged. This is inplace in that it modifies t; however, it uses
space linear in the final length of t.
val filteri_inplace : 'a t ‑> f:(int ‑> 'a ‑> bool) ‑> unitinclude Base.Equal.S1 with type a t := a tval equal : 'a Base.Equal.equal ‑> 'a t Base.Equal.equalinclude Base.Invariant.S1 with type a t := a tval invariant : 'a Base__.Invariant_intf.inv ‑> 'a t Base__.Invariant_intf.invval last_exn : 'a t ‑> 'aTransfers up to len elements from the front of src to the end of dst, removing
them from src. It is an error if len < 0.
Aside from a call to set_capacity dst if needed, runs in O(len) time
val get : 'a t ‑> int ‑> 'aget t i returns the i'th element in t, where the 0'th element is at the front of
t and the length t - 1 element is at the back.
val set : 'a t ‑> int ‑> 'a ‑> unitval set_capacity : _ t ‑> int ‑> unitset_capacity t c sets the capacity of t's backing array to at least max c (length
t). If t's capacity changes, then this involves allocating a new backing array and
copying the queue elements over. set_capacity may decrease the capacity of t, if
c < capacity t.