From bc0a9edd47dad7a0bf7df26941a0d870c0c3d0ad Mon Sep 17 00:00:00 2001 From: Jed Barber Date: Mon, 9 Jan 2017 19:53:06 +1100 Subject: Cleaning things up, splitting code into more modules --- src/Storage.hs | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'src/Storage.hs') 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) -- cgit