Current section

Files

Jump to
workex lib priority.ex
Raw

lib/priority.ex

defmodule Workex.Priority do
defstruct elements: HashDict.new
def new, do: %__MODULE__{}
def empty?(%__MODULE__{elements: elements}), do: (Dict.size(elements) == 0)
def add(
%__MODULE__{elements: elements} = priority_rec,
priority,
element
) when is_number(priority) do
%__MODULE__{priority_rec |
elements: Dict.put(elements, priority, [element | (elements[priority] || [])])}
end
def to_list(%__MODULE__{elements: elements}) do
elements
|> Dict.to_list
|> Enum.sort(&(&1 > &2))
|> Stream.map(&(elem(&1, 1)))
|> Stream.map(&Enum.reverse/1)
|> Enum.concat
end
end