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.
Differences from the standard module:
enqueue
replaces push
and add
, and takes the queue first.
dequeue
replaces pop
and take
, and returns an option rather than raising
Empty
.
dequeue_exn
is available if you want to raise Empty
.
iter
and fold
take labeled arguments.
blit_transfer
replaces transfer
but is markedly different; see below.
Checks whether the provided element is there, using polymorphic compare if equal
is not provided
fold t ~init ~f
returns f (... f (f (f init e1) e2) e3 ...) en
, where e1..en
are the elements of t
Returns true
if and only if there exists an element for which the provided
function evaluates to true
. This is a short-circuiting operation.
Returns true
if and only if the provided function evaluates to true
for all
elements. This is a short-circuiting operation.
Returns the number of elements for which the provided function evaluates to true.
Returns as an option
the first element for which f
evaluates to true.
Returns the first evaluation of f
that returns Some
, and returns None
if there
is no such element.
Returns a minimum (resp maximum) element from the collection using the provided
cmp
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
.
Create an empty queue.
Create a queue with one element.
enqueue t a
adds a
to the end of t
.
enqueue_all t list
adds all elements in list
to t
in order of list
.
dequeue t
removes and returns the front element of t
, if any.
peek t
returns but does not remove the front element of t
, if any.
last t
returns the most recently enqueued element in t
, if any.
of_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).
filter_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
.
get 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.
Returns the current length of the backing array.
set_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
.