From fbd053967c814697ad21fde2dc8e95f7a4683302 Mon Sep 17 00:00:00 2001 From: joe Date: Thu, 20 Jul 2017 00:01:29 -0400 Subject: Update MinMaxPSQ to use HashPSQ. --- src/Data/MinMaxPSQ.hs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'src/Data/MinMaxPSQ.hs') diff --git a/src/Data/MinMaxPSQ.hs b/src/Data/MinMaxPSQ.hs index 96937604..f41da4a4 100644 --- a/src/Data/MinMaxPSQ.hs +++ b/src/Data/MinMaxPSQ.hs @@ -17,48 +17,48 @@ null (MinMaxPSQ nq xq) = PSQ.null nq size :: MinMaxPSQ k p -> Int size (MinMaxPSQ nq xq) = PSQ.size nq -toList :: (Ord k, Ord p) => MinMaxPSQ k p -> [Binding k p] +toList :: (PSQKey k, Ord p) => MinMaxPSQ k p -> [Binding k p] toList (MinMaxPSQ nq xq) = PSQ.toList nq -fromList :: (Ord k, Ord p) => [Binding k p] -> MinMaxPSQ k p +fromList :: (PSQKey k, Ord p) => [Binding k p] -> MinMaxPSQ k p fromList kps = MinMaxPSQ (PSQ.fromList kps) (PSQ.fromList $ map (\(k :-> p) -> (k :-> Down p)) kps) -findMin :: (Ord k, Ord p) => MinMaxPSQ k p -> Maybe (Binding k p) +findMin :: (PSQKey k, Ord p) => MinMaxPSQ k p -> Maybe (Binding k p) findMin (MinMaxPSQ nq xq) = PSQ.findMin nq -findMax :: (Ord k, Ord p) => MinMaxPSQ k p -> Maybe (Binding k p) +findMax :: (PSQKey k, Ord p) => MinMaxPSQ k p -> Maybe (Binding k p) findMax (MinMaxPSQ nq xq) = fmap (\(k :-> Down p) -> k :-> p) $ PSQ.findMin xq -insert :: (Ord k, Ord p) => k -> p -> MinMaxPSQ k p -> MinMaxPSQ k p +insert :: (PSQKey k, Ord p) => k -> p -> MinMaxPSQ k p -> MinMaxPSQ k p insert k p (MinMaxPSQ nq xq) = MinMaxPSQ (PSQ.insert k p nq) (PSQ.insert k (Down p) xq) -delete :: (Ord k, Ord p) => k -> MinMaxPSQ k p -> MinMaxPSQ k p +delete :: (PSQKey k, Ord p) => k -> MinMaxPSQ k p -> MinMaxPSQ k p delete k (MinMaxPSQ nq xq) = MinMaxPSQ (PSQ.delete k nq) (PSQ.delete k xq) -deleteMin :: (Ord k, Ord p) => MinMaxPSQ k p -> MinMaxPSQ k p +deleteMin :: (PSQKey k, Ord p) => MinMaxPSQ k p -> MinMaxPSQ k p deleteMin (MinMaxPSQ nq xq) = case PSQ.minView nq of Just (k :-> _, nq') -> MinMaxPSQ nq' (PSQ.delete k xq) Nothing -> MinMaxPSQ nq xq -deleteMax :: (Ord k, Ord p) => MinMaxPSQ k p -> MinMaxPSQ k p +deleteMax :: (PSQKey k, Ord p) => MinMaxPSQ k p -> MinMaxPSQ k p deleteMax (MinMaxPSQ nq xq) = case PSQ.minView xq of Just (k :-> _, xq') -> MinMaxPSQ (PSQ.delete k nq) xq' Nothing -> MinMaxPSQ nq xq -minView :: (Ord k, Ord p) => MinMaxPSQ k p -> Maybe (Binding k p, MinMaxPSQ k p) +minView :: (PSQKey k, Ord p) => MinMaxPSQ k p -> Maybe (Binding k p, MinMaxPSQ k p) minView (MinMaxPSQ nq xq) = fmap (\(k :-> p, nq') -> (k :-> p, MinMaxPSQ nq' (PSQ.delete k xq))) $ PSQ.minView nq -maxView :: (Ord k, Ord p) => MinMaxPSQ k p -> Maybe (Binding k p, MinMaxPSQ k p) +maxView :: (PSQKey k, Ord p) => MinMaxPSQ k p -> Maybe (Binding k p, MinMaxPSQ k p) maxView (MinMaxPSQ nq xq) = fmap (\(k :-> Down p, xq') -> (k :-> p, MinMaxPSQ (PSQ.delete k nq) xq')) $ PSQ.minView xq -insertTake :: (Ord k, Ord p) => Int -> k -> p -> MinMaxPSQ k p -> MinMaxPSQ k p +insertTake :: (PSQKey k, Ord p) => Int -> k -> p -> MinMaxPSQ k p -> MinMaxPSQ k p insertTake n k p q = take n $ insert k p q -take :: (Ord k, Ord p) => Int -> MinMaxPSQ k p -> MinMaxPSQ k p +take :: (PSQKey k, Ord p) => Int -> MinMaxPSQ k p -> MinMaxPSQ k p take !n !q | (size q <= n) = q | null q = q | otherwise = take n $ deleteMax q -- cgit v1.2.3