Revision 71e13e48

b/Ganeti/HTools/PeerMap.hs
8 8
-}
9 9

  
10 10
module Ganeti.HTools.PeerMap
11
    (
12
     PeerMap,
13
     Key,
14
     Elem,
15
     empty,
16
     create,
17
     accumArray,
18
     Ganeti.HTools.PeerMap.find,
19
     add,
20
     remove,
21
     maxElem
11
    ( PeerMap
12
    , Key
13
    , Elem
14
    , empty
15
    , accumArray
16
    , Ganeti.HTools.PeerMap.find
17
    , add
18
    , remove
19
    , maxElem
22 20
    ) where
23 21

  
24 22
import Data.Maybe (fromMaybe)
......
32 30
type Elem = Int
33 31
type PeerMap = [(Key, Elem)]
34 32

  
33
-- | Create a new empty map
35 34
empty :: PeerMap
36 35
empty = []
37 36

  
38
create :: Key -> PeerMap
39
create _ = []
40

  
41 37
-- | Our reverse-compare function
42 38
pmCompare :: (Key, Elem) -> (Key, Elem) -> Ordering
43 39
pmCompare a b = (compare `on` snd) b a
......
64 60
find k c = fromMaybe 0 $ lookup k c
65 61

  
66 62
add :: Key -> Elem -> PeerMap -> PeerMap
67
add k v c = addWith (\_ n -> n) k v c
63
add k v c = addWith (flip const) k v c
68 64

  
69 65
remove :: Key -> PeerMap -> PeerMap
70 66
remove k c = case c of
......
72 68
               (x@(x', _)):xs -> if k == x' then xs
73 69
                            else x:(remove k xs)
74 70

  
75
to_list :: PeerMap -> [Elem]
76
to_list c = snd $ unzip c
77

  
71
-- | Find the maximum element. Since this is a sorted list, we just
72
-- get the first one
78 73
maxElem :: PeerMap -> Elem
79
maxElem c = case c of
80
              [] -> 0
81
              (_, v):_ -> v
74
maxElem c = if null c then 0 else snd . head $ c

Also available in: Unified diff