module Math.SetCover.Queue.BitPriorityQueue (Methods, methods) where
import qualified Math.SetCover.Queue as Queue
import Math.SetCover.Queue (SetId)
import qualified Math.SetCover.BitPriorityQueue as BitPQ
import qualified Math.SetCover.BitPosition as BitPos
import qualified Math.SetCover.BitSet as BitSet
import Data.Tuple.HT (mapFst)
type Methods bits = Queue.Methods (BitPQ.Queue bits SetId) (BitSet.Set bits)
methods :: BitPos.C bits => Methods bits
methods :: forall bits. C bits => Methods bits
methods =
Queue.Methods {
fromEnumMap :: EnumMap SetId (Set bits) -> Queue bits SetId
Queue.fromEnumMap = EnumMap SetId (Set bits) -> Queue bits SetId
forall e bits.
(Enum e, C bits) =>
EnumMap e (Set bits) -> Queue bits e
BitPQ.fromSets,
partition :: Queue bits SetId -> Set bits -> (EnumSet SetId, Queue bits SetId)
Queue.partition = ((Queue bits SetId -> EnumSet SetId)
-> (Queue bits SetId, Queue bits SetId)
-> (EnumSet SetId, Queue bits SetId)
forall a c b. (a -> c) -> (a, b) -> (c, b)
mapFst Queue bits SetId -> EnumSet SetId
forall e t. Enum e => Queue t e -> EnumSet e
BitPQ.elemUnions((Queue bits SetId, Queue bits SetId)
-> (EnumSet SetId, Queue bits SetId))
-> (Set bits -> (Queue bits SetId, Queue bits SetId))
-> Set bits
-> (EnumSet SetId, Queue bits SetId)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.) ((Set bits -> (Queue bits SetId, Queue bits SetId))
-> Set bits -> (EnumSet SetId, Queue bits SetId))
-> (Queue bits SetId
-> Set bits -> (Queue bits SetId, Queue bits SetId))
-> Queue bits SetId
-> Set bits
-> (EnumSet SetId, Queue bits SetId)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Queue bits SetId
-> Set bits -> (Queue bits SetId, Queue bits SetId)
forall bits e.
(C bits, Enum e) =>
Queue bits e -> Set bits -> (Queue bits e, Queue bits e)
BitPQ.partition,
difference :: Queue bits SetId -> EnumMap SetId (Set bits) -> Queue bits SetId
Queue.difference = \Queue bits SetId
q -> Queue bits SetId -> Queue bits SetId -> Queue bits SetId
forall bits e.
(C bits, Enum e) =>
Queue bits e -> Queue bits e -> Queue bits e
BitPQ.difference Queue bits SetId
q (Queue bits SetId -> Queue bits SetId)
-> (EnumMap SetId (Set bits) -> Queue bits SetId)
-> EnumMap SetId (Set bits)
-> Queue bits SetId
forall b c a. (b -> c) -> (a -> b) -> a -> c
. EnumMap SetId (Set bits) -> Queue bits SetId
forall e bits.
(Enum e, C bits) =>
EnumMap e (Set bits) -> Queue bits e
BitPQ.fromSets,
findMinValue :: Queue bits SetId -> Maybe (Set bits, EnumSet SetId)
Queue.findMinValue = Queue bits SetId -> Maybe (Set bits, EnumSet SetId)
forall bits e.
C bits =>
Queue bits e -> Maybe (Set bits, EnumSet e)
BitPQ.findMinValue,
null :: Queue bits SetId -> Bool
Queue.null = Queue bits SetId -> Bool
forall bits e. Queue bits e -> Bool
BitPQ.null
}