import Base
import ./binary_heap.bend as K
import ./types/binary_heap.bend as E
# Single-threaded queue API; storage and algorithms are shared with binary_heap.
def new(~A: Data) -> K.Heap:
K.new(~A)
def qsize(~A: Data, h: K.Heap) -> K.Heap & Nat:
K.length(~A, h)
def put(~A: Data, ~cmp: A -> A -> Cmp, h: K.Heap, x: A) -> K.Heap:
K.push(~A, ~cmp, h, x)
def peek(~A: Data, h: K.Heap) -> K.Heap & Result<&2, &2, E.Error, A>:
K.peek(~A, h)
def get(~A: Data, ~cmp: A -> A -> Cmp, h: K.Heap) -> K.Heap & Result<&2, &2, E.Error, A>:
K.pop(~A, ~cmp, h)
def from_list(~A: Data, ~cmp: A -> A -> Cmp, xs: List<&2, A>) -> K.Heap:
K.from_list(~A, ~cmp, xs)
def to_sorted_list(~A: Data, ~cmp: A -> A -> Cmp, h: K.Heap) -> K.Heap & List<&2, A>:
K.to_sorted_list(~A, ~cmp, h)