mirror of
https://github.com/wanderer-industries/wanderer
synced 2025-12-12 10:45:54 +00:00
94 lines
1.9 KiB
Elixir
94 lines
1.9 KiB
Elixir
defmodule WandererApp.Queue do
|
|
@moduledoc false
|
|
|
|
def new(queue_name, items), do: queue_name |> _update(Qex.new(items))
|
|
|
|
def join(queue_name, items),
|
|
do:
|
|
queue_name
|
|
|> _insert_or_update(Qex.new(items), fn queue ->
|
|
Qex.join(queue, Qex.new(items))
|
|
end)
|
|
|
|
def push_uniq(queue_name, item) do
|
|
case Enum.member?(queue_name |> to_list!, item) do
|
|
false ->
|
|
queue_name
|
|
|> _insert_or_update(Qex.new([item]), fn queue ->
|
|
Qex.push(queue, item)
|
|
end)
|
|
|
|
_ ->
|
|
:ok
|
|
end
|
|
end
|
|
|
|
def push(queue_name, item),
|
|
do:
|
|
queue_name
|
|
|> _insert_or_update(Qex.new([item]), fn queue ->
|
|
Qex.push(queue, item)
|
|
end)
|
|
|
|
def push_front(queue_name, item),
|
|
do:
|
|
queue_name
|
|
|> _insert_or_update(Qex.new([item]), fn queue ->
|
|
Qex.push_front(queue, item)
|
|
end)
|
|
|
|
def next(queue_name) do
|
|
{{:value, item}, _q} =
|
|
queue_name
|
|
|> _lookup!()
|
|
|> Qex.pop()
|
|
|
|
{:ok, item}
|
|
end
|
|
|
|
def pop(queue_name) do
|
|
{{:value, item}, queue} =
|
|
queue_name
|
|
|> _lookup!()
|
|
|> Qex.pop()
|
|
|
|
queue_name
|
|
|> _update(queue)
|
|
|
|
{:ok, item}
|
|
end
|
|
|
|
def to_list(queue_name),
|
|
do:
|
|
{:ok,
|
|
queue_name
|
|
|> _lookup!()
|
|
|> Enum.to_list()}
|
|
|
|
def to_list!(queue_name),
|
|
do:
|
|
queue_name
|
|
|> _lookup!()
|
|
|> Enum.to_list()
|
|
|
|
def empty?(queue_name) when is_binary(queue_name) or is_atom(queue_name),
|
|
do:
|
|
queue_name
|
|
|> _lookup!()
|
|
|> Enum.empty?()
|
|
|
|
def clear(queue_name),
|
|
do:
|
|
queue_name
|
|
|> _update(Qex.new())
|
|
|
|
def _insert_or_update(queue_name, queue, update_fn),
|
|
do: WandererApp.Cache.insert_or_update(queue_name, queue, update_fn)
|
|
|
|
def _lookup!(queue_name),
|
|
do: WandererApp.Cache.lookup!(queue_name, Qex.new())
|
|
|
|
def _update(queue_name, queue),
|
|
do: WandererApp.Cache.insert(queue_name, queue)
|
|
end
|