Packages
poolex
1.4.0
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.0
1.5.0-rc.0
1.4.2
1.4.1
1.4.0
1.3.0
1.2.1
1.2.0
1.1.0
1.0.0
1.0.0-rc.0
0.10.0
0.9.0
0.9.0-rc.2
0.9.0-rc.1
0.9.0-rc.0
0.8.0
0.8.0-rc.1
0.8.0-rc.0
0.7.6
0.7.5
0.7.4
retired
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.1
0.5.0
0.4.0
0.3.1
retired
0.3.0
retired
0.2.2
0.2.1
0.2.0
0.1.1
0.1.0
The library for managing pools of workers.
Current section
Files
Jump to
Current section
Files
lib/poolex/callers/impl/erlang_queue.ex
defmodule Poolex.Callers.Impl.ErlangQueue do
@moduledoc """
Callers queue (FIFO) implementation based on `:erlang.queue`.
"""
@behaviour Poolex.Callers.Behaviour
@impl true
def init do
:queue.new()
end
@impl true
def add(state, caller) do
:queue.in(caller, state)
end
@impl true
def empty?(state) do
:queue.is_empty(state)
end
@impl true
def pop(state) do
case :queue.out(state) do
{{:value, caller}, new_state} -> {caller, new_state}
_ -> :empty
end
end
@impl true
def remove_by_pid(state, caller_pid) do
:queue.filter(fn %Poolex.Caller{from: {pid, _tag}} -> pid != caller_pid end, state)
end
@impl true
def remove_by_reference(state, caller_reference) do
:queue.filter(
fn %Poolex.Caller{reference: reference} -> reference != caller_reference end,
state
)
end
@impl true
def to_list(state) do
:queue.to_list(state)
end
end