Current section

Files

Jump to
datastructures lib data queue.ex
Raw

lib/data/queue.ex

# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
# Version 2, December 2004
#
# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
# TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
#
# 0. You just DO WHAT THE FUCK YOU WANT TO.
defprotocol Data.Queue do
@type v :: any
@spec enq(t, v) :: t
def enq(self, value)
@spec deq(t) :: { v, t }
@spec deq(t, v) :: { v, t }
def deq(self, default \\ nil)
@spec deq!(t) :: { v, t } | no_return
def deq!(self)
end
defimpl Data.Queue, for: List do
def new do
[]
end
def new(enum) do
Data.to_list(enum)
end
def enq(list, value) do
list ++ [value]
end
def deq(self, default \\ nil)
def deq([], default) do
{ default, [] }
end
def deq([head | rest], _) do
{ head, rest }
end
def deq!([]) do
raise Data.Error.Empty
end
def deq!(self) do
deq(self)
end
end