-module(gleamy@priority_queue). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([new/1, pop/1, peek/1, push/2, is_empty/1, count/1, reorder/2, from_list/2, to_list/1]). -file("/home/julian/projects/gleamy_structures/src/gleamy/priority_queue.gleam", 14). -spec new(fun((HNN, HNN) -> gleam@order:order())) -> gleamy@pairing_heap:heap(HNN). new(Compare) -> gleamy@pairing_heap:new(Compare). -file("/home/julian/projects/gleamy_structures/src/gleamy/priority_queue.gleam", 20). -spec pop(gleamy@pairing_heap:heap(HNP)) -> {ok, {HNP, gleamy@pairing_heap:heap(HNP)}} | {error, nil}. pop(Queue) -> gleamy@pairing_heap:delete_min(Queue). -file("/home/julian/projects/gleamy_structures/src/gleamy/priority_queue.gleam", 25). -spec peek(gleamy@pairing_heap:heap(HNU)) -> {ok, HNU} | {error, nil}. peek(Queue) -> gleamy@pairing_heap:find_min(Queue). -file("/home/julian/projects/gleamy_structures/src/gleamy/priority_queue.gleam", 30). -spec push(gleamy@pairing_heap:heap(HNY), HNY) -> gleamy@pairing_heap:heap(HNY). push(Queue, Item) -> gleamy@pairing_heap:insert(Queue, Item). -file("/home/julian/projects/gleamy_structures/src/gleamy/priority_queue.gleam", 35). -spec is_empty(gleamy@pairing_heap:heap(any())) -> boolean(). is_empty(Queue) -> case gleamy@pairing_heap:find_min(Queue) of {ok, _} -> false; {error, _} -> true end. -file("/home/julian/projects/gleamy_structures/src/gleamy/priority_queue.gleam", 44). -spec count(gleamy@pairing_heap:heap(any())) -> integer(). count(Queue) -> case gleamy@pairing_heap:delete_min(Queue) of {ok, {_, Q}} -> count(Q) + 1; {error, _} -> 0 end. -file("/home/julian/projects/gleamy_structures/src/gleamy/priority_queue.gleam", 52). -spec reorder( gleamy@pairing_heap:heap(HOF), fun((HOF, HOF) -> gleam@order:order()) ) -> gleamy@pairing_heap:heap(HOF). reorder(Queue, Compare) -> case gleamy@pairing_heap:delete_min(Queue) of {ok, {X, Q}} -> gleamy@pairing_heap:insert(reorder(Q, Compare), X); {error, _} -> gleamy@pairing_heap:new(Compare) end. -file("/home/julian/projects/gleamy_structures/src/gleamy/priority_queue.gleam", 60). -spec from_list(list(HOI), fun((HOI, HOI) -> gleam@order:order())) -> gleamy@pairing_heap:heap(HOI). from_list(List, Compare) -> gleam@list:fold(List, new(Compare), fun gleamy@pairing_heap:insert/2). -file("/home/julian/projects/gleamy_structures/src/gleamy/priority_queue.gleam", 65). -spec to_list(gleamy@pairing_heap:heap(HOL)) -> list(HOL). to_list(Queue) -> case gleamy@pairing_heap:delete_min(Queue) of {ok, {X, Q}} -> [X | to_list(Q)]; {error, _} -> [] end.