Make PMatching a newtype for clarity.
[match/match.git] / program / PMInstance.hs
1 module PMInstance where
2 import Data.Array.IArray
3 import Data.Array.Unboxed
4 import ArrayStuff
5 import Formatter
6
7 type Wt = Double -- Can be any RealFrac.
8 widenInteger x = fromInteger (toInteger x)
9
10 data PMInstance = PMInstance
11         Int                 -- numReviewers
12         Int                 -- numProposals
13         (UArray Int Wt)     -- ! reviewer -> relative load
14         (UArray (Int, Int) Wt) -- ! (reviewer, proposal) -> pref
15         deriving Eq
16
17 instance Show PMInstance where
18         show (PMInstance numRvrs numProps loadA prefA) =
19                 let theRvrs = [0..numRvrs-1]; theProps = [0..numProps-1] in
20                 "Instance with " ++ show numRvrs ++ " reviewers and " ++ show numProps ++ " proposals:\n" ++ formatTable (
21                             (       ""              : map (\i -> "R#" ++ show i       ) theRvrs) :
22                             (       "RLoad"         : map (\i -> show (loadA ! i)     ) theRvrs) :
23                         map (\j -> ("P#" ++ show j) : map (\i -> show (prefA ! (i, j))) theRvrs) theProps
24                 )
25
26 newtype PMatching = PMatching [(Int, Int)]
27         deriving Show