qex v0.1.0 Qex

A minimal FIFO queue implementation for Elixir

A primitive queue data structure that doesn’t spawn a separate process

Protocols

Inspect and Enumerable are implemented

Examples

iex> q = Qex.new([1, 2, 3])
iex> Enum.count(q)
3
iex> Enum.sum(q)
6
iex> inspect(q)
"<#Qex[1, 2, 3]>"
iex> {_item, q} = Qex.pop(q)
{1, %Qex{in_list: [], out_list: [2, 3]}}
iex> Enum.count(q)
2
iex> q = Qex.push(q, 4)
%Qex{in_list: [4], out_list: [2, 3]}
iex> Enum.count(q)
3
iex> {_item, q} = Qex.pop(q)
{2, %Qex{in_list: [4], out_list: [3]}}
iex> {_item, q} = Qex.pop(q)
{3, %Qex{in_list: [4], out_list: []}}
iex> {_item, q} = Qex.pop(q)
{4, %Qex{in_list: [], out_list: []}}
iex> Enum.count(q)
0
iex> Enum.sum(q)
0
iex> inspect(q)
"<#Qex[]>"

Summary

Types

t()
t

Functions

new(list \\ [])
new([term]) :: t

Examples

iex> Qex.new
%Qex{in_list: [], out_list: []}

iex> Qex.new([1,2,3])
%Qex{in_list: [], out_list: [1, 2, 3]}
pop(q, default \\ nil)
pop(t, term) :: {term, t}

Examples

iex> Qex.new |> Qex.pop
{nil, %Qex{in_list: [], out_list: []}}

iex> Qex.new([1,2,3]) |> Qex.pop
{1, %Qex{in_list: [], out_list: [2, 3]}}

iex> q = Qex.new([2,3])
iex> {_item, q} = Qex.pop(q)
{2, %Qex{in_list: [], out_list: [3]}}
iex> {_item, q} = Qex.pop(q)
{3, %Qex{in_list: [], out_list: []}}
iex> {_item, _q} = Qex.pop(q)
{nil, %Qex{in_list: [], out_list: []}}

iex> %Qex{in_list: [1, 2], out_list: []} |> Qex.pop
{2, %Qex{in_list: [], out_list: [1]}}
push(q, item)
push(t, term) :: t

Examples

iex> Qex.new |> Qex.push(1)
%Qex{in_list: [1], out_list: []}

iex> Qex.new([1, 2, 3]) |> Qex.push(4)
%Qex{in_list: [4], out_list: [1, 2, 3]}

iex> Qex.new |> Qex.push(1) |> Enum.count
1

iex> Qex.new([1,2,3]) |> Qex.push(4) |> Enum.count
4