Skip to content

Commit b91d1bd

Browse files
Saizanbolt12
authored andcommitted
use HashPSQ for RunQueue
1 parent afd375e commit b91d1bd

File tree

3 files changed

+14
-6
lines changed

3 files changed

+14
-6
lines changed

io-sim/io-sim.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ library
8585
exceptions >=0.10,
8686
containers,
8787
deepseq,
88+
hashable,
8889
nothunks,
8990
primitive >=0.7 && <0.11,
9091
psqueues >=0.2 && <0.3,

io-sim/src/Control/Monad/IOSim/CommonTypes.hs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import Control.Monad.ST.Lazy
4343

4444
import NoThunks.Class
4545

46+
import Data.Hashable
4647
import Data.List (intercalate, intersperse)
4748
import Data.Map (Map)
4849
import Data.Map qualified as Map
@@ -70,6 +71,8 @@ data IOSimThreadId =
7071
deriving anyclass NFData
7172
deriving anyclass NoThunks
7273

74+
instance Hashable IOSimThreadId
75+
7376
ppIOSimThreadId :: IOSimThreadId -> String
7477
ppIOSimThreadId (RacyThreadId as) = "Thread {"++ intercalate "," (map show as) ++"}"
7578
ppIOSimThreadId (ThreadId as) = "Thread " ++ show as

io-sim/src/Control/Monad/IOSimPOR/Internal.hs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
-- incomplete uni patterns in 'schedule' (when interpreting 'StmTxCommitted')
1717
-- and 'reschedule'.
1818
{-# OPTIONS_GHC -Wno-incomplete-uni-patterns -Wno-unused-matches #-}
19+
{-# OPTIONS_GHC -Wno-orphans #-}
1920
#if __GLASGOW_HASKELL__ >= 908
2021
-- We use partial functions from `Data.List`.
2122
{-# OPTIONS_GHC -Wno-x-partial #-}
@@ -53,16 +54,16 @@ import Prelude hiding (read)
5354

5455
import Data.Dynamic
5556
import Data.Foldable (foldlM, traverse_)
57+
import Data.HashPSQ (HashPSQ)
58+
import Data.HashPSQ qualified as PSQ
59+
import Data.IntPSQ (IntPSQ)
60+
import Data.IntPSQ qualified as IPSQ
5661
import Data.List qualified as List
5762
import Data.List.Trace qualified as Trace
5863
import Data.Map.Strict (Map)
5964
import Data.Map.Strict qualified as Map
6065
import Data.Maybe (mapMaybe)
6166
import Data.Ord
62-
import Data.OrdPSQ (OrdPSQ)
63-
import Data.OrdPSQ qualified as PSQ
64-
import Data.IntPSQ (IntPSQ)
65-
import Data.IntPSQ qualified as IPSQ
6667
import Data.Set (Set)
6768
import Data.Set qualified as Set
6869
import Data.Time (UTCTime (..), fromGregorian)
@@ -87,7 +88,8 @@ import Control.Monad.IOSim.Types hiding (SimEvent (SimEvent), Trace (SimTrace))
8788
import Control.Monad.IOSim.Types (SimEvent)
8889
import Control.Monad.IOSimPOR.Timeout (unsafeTimeout)
8990
import Control.Monad.IOSimPOR.Types
90-
import Data.Coerce (coerce, Coercible)
91+
import Data.Coerce (Coercible, coerce)
92+
import Data.Hashable
9193

9294
--
9395
-- Simulation interpreter
@@ -181,7 +183,9 @@ data TimerCompletionInfo s =
181183
-- ^ `timeout` timer run by `IOSimThreadId` which was assigned the given
182184
-- `TimeoutId` (only used to report in a trace).
183185

184-
type RunQueue = OrdPSQ (Down IOSimThreadId) (Down IOSimThreadId) ()
186+
instance Hashable a => Hashable (Down a)
187+
188+
type RunQueue = HashPSQ (Down IOSimThreadId) (Down IOSimThreadId) ()
185189
type Timeouts s = IntPSQ Time (TimerCompletionInfo s)
186190

187191
-- | Internal state.

0 commit comments

Comments
 (0)