summaryrefslogtreecommitdiff
path: root/src/Storage.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Storage.hs')
-rw-r--r--src/Storage.hs30
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)