diff options
Diffstat (limited to 'src/Storage.hs')
-rw-r--r-- | src/Storage.hs | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/src/Storage.hs b/src/Storage.hs index a97a5fc..75b452b 100644 --- a/src/Storage.hs +++ b/src/Storage.hs @@ -9,39 +9,39 @@ module Storage( -import qualified Control.Monad.Primitive as Prim +import Data.Int ( Int8 ) +import Preferences ( Preference ) import qualified Data.Vector.Unboxed.Mutable as Vec -import qualified Data.Int as Ints -data Store = Store { pointer :: Vec.MVector Prim.RealWorld Ints.Int8 - , sizeOfBallot :: Int} +data Store = Store { getPointer :: Vec.IOVector Int8 + , getBallotSize :: Int } createStore :: Int -> Int -> IO Store -createStore numberOfEntries ballotSize = do - v <- Vec.new (numberOfEntries * ballotSize) +createStore maxCapacity ballotSize = do + v <- Vec.new (maxCapacity * ballotSize) return (Store v ballotSize) -setPref :: Store -> Int -> Int -> Int -> IO () -setPref prefStore ballot position rank = do - let place = (ballot - 1) * (sizeOfBallot prefStore) + (position - 1) - Vec.write (pointer prefStore) place (fromIntegral rank) +setPref :: Store -> Int -> Preference -> IO () +setPref prefStore ballot (position,rank) = do + let place = (ballot - 1) * (getBallotSize prefStore) + (position - 1) + Vec.write (getPointer prefStore) place (fromIntegral rank) -checkPref :: Store -> Int -> Int -> Int -> IO Bool -checkPref prefStore ballot position rank = do - let place = (ballot - 1) * (sizeOfBallot prefStore) + (position - 1) - value <- Vec.read (pointer prefStore) place - return (value == (fromIntegral rank)) +checkPref :: Store -> Int -> Preference -> IO Bool +checkPref prefStore ballot (position,rank) = do + let place = (ballot - 1) * (getBallotSize prefStore) + (position - 1) + value <- Vec.read (getPointer prefStore) place + return (value == fromIntegral rank) |