summaryrefslogtreecommitdiff
path: root/src/Data/MinMaxPSQ.hs
diff options
context:
space:
mode:
authorjoe <joe@jerkface.net>2017-07-20 00:01:29 -0400
committerjoe <joe@jerkface.net>2017-07-20 00:01:29 -0400
commitfbd053967c814697ad21fde2dc8e95f7a4683302 (patch)
tree5aa07550819aedb74c4a806bd4fc3147d5cb4da4 /src/Data/MinMaxPSQ.hs
parentb3c832ebd86281bfaa4fe6bb88aaacacbed0eadc (diff)
Update MinMaxPSQ to use HashPSQ.
Diffstat (limited to 'src/Data/MinMaxPSQ.hs')
-rw-r--r--src/Data/MinMaxPSQ.hs24
1 files changed, 12 insertions, 12 deletions
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
17size :: MinMaxPSQ k p -> Int 17size :: MinMaxPSQ k p -> Int
18size (MinMaxPSQ nq xq) = PSQ.size nq 18size (MinMaxPSQ nq xq) = PSQ.size nq
19 19
20toList :: (Ord k, Ord p) => MinMaxPSQ k p -> [Binding k p] 20toList :: (PSQKey k, Ord p) => MinMaxPSQ k p -> [Binding k p]
21toList (MinMaxPSQ nq xq) = PSQ.toList nq 21toList (MinMaxPSQ nq xq) = PSQ.toList nq
22 22
23fromList :: (Ord k, Ord p) => [Binding k p] -> MinMaxPSQ k p 23fromList :: (PSQKey k, Ord p) => [Binding k p] -> MinMaxPSQ k p
24fromList kps = MinMaxPSQ (PSQ.fromList kps) 24fromList kps = MinMaxPSQ (PSQ.fromList kps)
25 (PSQ.fromList $ map (\(k :-> p) -> (k :-> Down p)) kps) 25 (PSQ.fromList $ map (\(k :-> p) -> (k :-> Down p)) kps)
26 26
27findMin :: (Ord k, Ord p) => MinMaxPSQ k p -> Maybe (Binding k p) 27findMin :: (PSQKey k, Ord p) => MinMaxPSQ k p -> Maybe (Binding k p)
28findMin (MinMaxPSQ nq xq) = PSQ.findMin nq 28findMin (MinMaxPSQ nq xq) = PSQ.findMin nq
29 29
30findMax :: (Ord k, Ord p) => MinMaxPSQ k p -> Maybe (Binding k p) 30findMax :: (PSQKey k, Ord p) => MinMaxPSQ k p -> Maybe (Binding k p)
31findMax (MinMaxPSQ nq xq) = fmap (\(k :-> Down p) -> k :-> p) $ PSQ.findMin xq 31findMax (MinMaxPSQ nq xq) = fmap (\(k :-> Down p) -> k :-> p) $ PSQ.findMin xq
32 32
33insert :: (Ord k, Ord p) => k -> p -> MinMaxPSQ k p -> MinMaxPSQ k p 33insert :: (PSQKey k, Ord p) => k -> p -> MinMaxPSQ k p -> MinMaxPSQ k p
34insert k p (MinMaxPSQ nq xq) = MinMaxPSQ (PSQ.insert k p nq) 34insert k p (MinMaxPSQ nq xq) = MinMaxPSQ (PSQ.insert k p nq)
35 (PSQ.insert k (Down p) xq) 35 (PSQ.insert k (Down p) xq)
36 36
37delete :: (Ord k, Ord p) => k -> MinMaxPSQ k p -> MinMaxPSQ k p 37delete :: (PSQKey k, Ord p) => k -> MinMaxPSQ k p -> MinMaxPSQ k p
38delete k (MinMaxPSQ nq xq) = MinMaxPSQ (PSQ.delete k nq) (PSQ.delete k xq) 38delete k (MinMaxPSQ nq xq) = MinMaxPSQ (PSQ.delete k nq) (PSQ.delete k xq)
39 39
40deleteMin :: (Ord k, Ord p) => MinMaxPSQ k p -> MinMaxPSQ k p 40deleteMin :: (PSQKey k, Ord p) => MinMaxPSQ k p -> MinMaxPSQ k p
41deleteMin (MinMaxPSQ nq xq) = case PSQ.minView nq of 41deleteMin (MinMaxPSQ nq xq) = case PSQ.minView nq of
42 Just (k :-> _, nq') -> MinMaxPSQ nq' (PSQ.delete k xq) 42 Just (k :-> _, nq') -> MinMaxPSQ nq' (PSQ.delete k xq)
43 Nothing -> MinMaxPSQ nq xq 43 Nothing -> MinMaxPSQ nq xq
44 44
45deleteMax :: (Ord k, Ord p) => MinMaxPSQ k p -> MinMaxPSQ k p 45deleteMax :: (PSQKey k, Ord p) => MinMaxPSQ k p -> MinMaxPSQ k p
46deleteMax (MinMaxPSQ nq xq) = case PSQ.minView xq of 46deleteMax (MinMaxPSQ nq xq) = case PSQ.minView xq of
47 Just (k :-> _, xq') -> MinMaxPSQ (PSQ.delete k nq) xq' 47 Just (k :-> _, xq') -> MinMaxPSQ (PSQ.delete k nq) xq'
48 Nothing -> MinMaxPSQ nq xq 48 Nothing -> MinMaxPSQ nq xq
49 49
50minView :: (Ord k, Ord p) => MinMaxPSQ k p -> Maybe (Binding k p, MinMaxPSQ k p) 50minView :: (PSQKey k, Ord p) => MinMaxPSQ k p -> Maybe (Binding k p, MinMaxPSQ k p)
51minView (MinMaxPSQ nq xq) = fmap (\(k :-> p, nq') -> (k :-> p, MinMaxPSQ nq' (PSQ.delete k xq))) 51minView (MinMaxPSQ nq xq) = fmap (\(k :-> p, nq') -> (k :-> p, MinMaxPSQ nq' (PSQ.delete k xq)))
52 $ PSQ.minView nq 52 $ PSQ.minView nq
53 53
54maxView :: (Ord k, Ord p) => MinMaxPSQ k p -> Maybe (Binding k p, MinMaxPSQ k p) 54maxView :: (PSQKey k, Ord p) => MinMaxPSQ k p -> Maybe (Binding k p, MinMaxPSQ k p)
55maxView (MinMaxPSQ nq xq) = fmap (\(k :-> Down p, xq') -> (k :-> p, MinMaxPSQ (PSQ.delete k nq) xq')) 55maxView (MinMaxPSQ nq xq) = fmap (\(k :-> Down p, xq') -> (k :-> p, MinMaxPSQ (PSQ.delete k nq) xq'))
56 $ PSQ.minView xq 56 $ PSQ.minView xq
57 57
58insertTake :: (Ord k, Ord p) => Int -> k -> p -> MinMaxPSQ k p -> MinMaxPSQ k p 58insertTake :: (PSQKey k, Ord p) => Int -> k -> p -> MinMaxPSQ k p -> MinMaxPSQ k p
59insertTake n k p q = take n $ insert k p q 59insertTake n k p q = take n $ insert k p q
60 60
61take :: (Ord k, Ord p) => Int -> MinMaxPSQ k p -> MinMaxPSQ k p 61take :: (PSQKey k, Ord p) => Int -> MinMaxPSQ k p -> MinMaxPSQ k p
62take !n !q | (size q <= n) = q 62take !n !q | (size q <= n) = q
63 | null q = q 63 | null q = q
64 | otherwise = take n $ deleteMax q 64 | otherwise = take n $ deleteMax q