Current section
Files
Jump to
Current section
Files
lib/protocols/enumerable.ex
defimpl Enumerable, for: Yaq do
@moduledoc false
@impl true
def count(%Yaq{} = q), do: {:ok, Yaq.size(q)}
@impl true
def member?(_enum, _term), do: {:error, __MODULE__}
@impl true
def reduce(%Yaq{}, {:halt, acc}, _fun), do: {:halted, acc}
def reduce(%Yaq{} = enum, {:cont, acc}, fun) do
case Yaq.size(enum) do
0 ->
{:done, acc}
_ ->
{term, q} = Yaq.dequeue(enum)
reduce(q, fun.(term, acc), fun)
end
end
@impl true
def slice(_enum), do: {:error, __MODULE__}
end