Packages

Skewheaps are fun, weird, priority queues that self-balance over time.

Current section

Files

Jump to
skewheap lib skewheap collectable.ex
Raw

lib/skewheap/collectable.ex

# Stolen from: https://gitlab.com/jimsy/heap/-/blob/main/lib/heap/collectable.ex
defimpl Collectable, for: Skewheap do
@moduledoc """
Implements `Collectable` for `Skewheap`.
"""
@doc """
Collect an enumerable into a skew heap.
## Examples
iex> 1..500 |> Enum.shuffle() |> Enum.into(Skewheap.new()) |> Skewheap.peek()
1
"""
@spec into(Skewheap.skewheap) :: {term(), (term(), Collectable.command() -> Skewheap.skewheap | term())}
def into(skewheap) do
{skewheap,
fn s, {:cont, v} -> Skewheap.put(s, v)
s, :done -> s
_, :halt -> :ok
end}
end
end