qex v0.5.0 Qex

A :queue wrapper with improvements in API and addition of Protocol implementations

Protocols

Inspect, Collectable and Enumerable are implemented

iex> inspect Qex.new
"#Qex<[]>"

iex> Enum.count Qex.new(1..5)
5

iex> Enum.empty? Qex.new
true

iex> Enum.map Qex.new([1, 2, 3]), &(&1 + 1)
[2, 3, 4]

iex> inspect Enum.into(1..5, %Qex{})
"#Qex<[1, 2, 3, 4, 5]>"

Link to this section Summary

Functions

Retun the first item in the queue, raise if it’s empty

Return the first item in the queue in {:value, term} tuple, return :empty if the queue is empty

Join two queues together

Retun the last item in the queue, raise if it’s empty

Return the last item in the queue in {:value, term} tuple, return :empty if the queue is empty

Create a new queue from a range

Get and remove an element from the front of the queue

Get and remove an element from the back of the queue

Add an element to the back of the queue

Add an element to the front of the queue

Reverse a queue

Split a queue into two, the front n items are put in the first queue

Link to this section Types

Link to this opaque t() (opaque)
t()
Link to this opaque t(type) (opaque)
t(type)

Link to this section Functions

Link to this function first!(qex)
first!(t()) :: term() | no_return()

Retun the first item in the queue, raise if it’s empty

iex> q1 = Qex.new 1..3
iex> Qex.first!(q1)
1
Link to this function first(qex)
first(t()) :: {:value, term()} | :empty

Return the first item in the queue in {:value, term} tuple, return :empty if the queue is empty

iex> q1 = Qex.new 1..3
iex> Qex.first(q1)
{:value, 1}
iex> q2 = Qex.new []
iex> Qex.first(q2)
:empty
Link to this function join(qex1, qex2)
join(t(), t()) :: t()

Join two queues together

iex> q1 = Qex.new 1..3
iex> q2 = Qex.new 4..5
iex> Enum.to_list Qex.join(q1, q2)
[1, 2, 3, 4, 5]
Link to this function last!(qex)
last!(t()) :: term() | no_return()

Retun the last item in the queue, raise if it’s empty

iex> q1 = Qex.new 1..3
iex> Qex.last!(q1)
3
Link to this function last(qex)
last(t()) :: {:value, term()} | :empty

Return the last item in the queue in {:value, term} tuple, return :empty if the queue is empty

iex> q1 = Qex.new 1..3
iex> Qex.last(q1)
{:value, 3}
iex> q2 = Qex.new []
iex> Qex.last(q2)
:empty
Link to this function new(init_data \\ [])
new([term()] | Range.t()) :: t()

Create a new queue from a range

iex> inspect Qex.new(1..3)
"#Qex<[1, 2, 3]>"

Create a new queue from a list

iex> inspect Qex.new([1, 2, 3])
"#Qex<[1, 2, 3]>"
Link to this function pop!(qex)
pop!(t()) :: {term(), t()} | no_return()
Link to this function pop(qex)
pop(t()) :: {{:value, term()}, t()} | {:empty, t()}

Get and remove an element from the front of the queue

iex> q = Qex.new([:front, :mid])
iex> {{:value, item}, _q} = Qex.pop(q)
iex> item
:front

iex> q = Qex.new
iex> {empty, _q} = Qex.pop(q)
iex> empty
:empty
Link to this function pop_back!(qex)
pop_back!(t()) :: {term(), t()} | no_return()
Link to this function pop_back(qex)
pop_back(t()) :: {{:value, term()}, t()} | {:empty, t()}

Get and remove an element from the back of the queue

iex> q = Qex.new([:mid, :back])
iex> {{:value, item}, _q} = Qex.pop_back(q)
iex> item
:back

iex> q = Qex.new
iex> {empty, _q} = Qex.pop_back(q)
iex> empty
:empty
Link to this function push(qex, item)
push(t(), term()) :: t()

Add an element to the back of the queue

iex> q = Qex.new([:mid])
iex> Enum.to_list Qex.push(q, :back)
[:mid, :back]
Link to this function push_front(qex, item)
push_front(t(), term()) :: t()

Add an element to the front of the queue

iex> q = Qex.new([:mid])
iex> Enum.to_list Qex.push_front(q, :front)
[:front, :mid]
Link to this function reverse(qex)
reverse(t()) :: t()

Reverse a queue

iex> q = Qex.new(1..3)
iex> Enum.to_list q
[1, 2, 3]
iex> Enum.to_list Qex.reverse(q)
[3, 2, 1]
Link to this function split(qex, n)
split(t(), pos_integer()) :: {t(), t()}

Split a queue into two, the front n items are put in the first queue

iex> q = Qex.new 1..5
iex> {q1, q2} = Qex.split(q, 3)
iex> Enum.to_list q1
[1, 2, 3]
iex> Enum.to_list q2
[4, 5]