lifo/src/lifo/queue.cr

61 lines
924 B
Crystal

module Lifo
class Queue(T) < LifoLike(T)
def initialize(capacity = -1)
super(capacity)
end
def enqueue(e : T) : Int32
if @capacity == -1 || size < @capacity
@data << e
size
else
raise OverflowError.new
end
end
def enqueue?(e : T) : Int32?
begin
enqueue(e)
rescue OverflowError
nil
end
end
def dequeue : T
begin
res = @data.first
@data.shift
rescue Enumerable::EmptyError
raise UnderflowError.new
end
res
end
def dequeue? : T?
begin
dequeue
rescue UnderflowError
nil
end
end
def peek : T
begin
@data.first
rescue IndexError
raise UnderflowError.new
end
end
def peek? : T?
begin
peek
rescue UnderflowError
nil
end
end
end
end