View Source Qex (Qex v0.5.1)
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]>"
Summary
Functions
Return the first item in the queue in {:value, term} tuple, return :empty if the queue is empty
Retun the first item in the queue, raise if it's empty
Join two queues together
Return the last item in the queue in {:value, term} tuple, return :empty if the queue is empty
Retun the last item in the queue, raise if it's 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
Types
@opaque t()
@opaque t(type)
Functions
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
Retun the first item in the queue, raise if it's empty
iex> q1 = Qex.new 1..3
iex> Qex.first!(q1)
1
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]
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
Retun the last item in the queue, raise if it's empty
iex> q1 = Qex.new 1..3
iex> Qex.last!(q1)
3
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]>"
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
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
Add an element to the back of the queue
iex> q = Qex.new([:mid])
iex> Enum.to_list Qex.push(q, :back)
[:mid, :back]
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]
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]
@spec 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]