module GHC.Debugger.Runtime.Thread.Map
( ThreadMap
, emptyThreadMap
, insertThreadMap
, lookupThreadMap
, threadMapToList
) where
import Control.Concurrent
import Data.Coerce
import GHCi.RemoteTypes
import qualified Data.IntMap as IM
type ThreadMap = IM.IntMap (ForeignRef ThreadId)
insertThreadMap :: Int -> ForeignRef ThreadId -> ThreadMap -> ThreadMap
insertThreadMap :: Key -> ForeignRef ThreadId -> ThreadMap -> ThreadMap
insertThreadMap = Key -> ForeignRef ThreadId -> ThreadMap -> ThreadMap
forall a. Key -> a -> IntMap a -> IntMap a
IM.insert
lookupThreadMap :: Int -> ThreadMap -> Maybe (ForeignRef ThreadId)
lookupThreadMap :: Key -> ThreadMap -> Maybe (ForeignRef ThreadId)
lookupThreadMap = Key -> ThreadMap -> Maybe (ForeignRef ThreadId)
forall a. Key -> IntMap a -> Maybe a
IM.lookup
emptyThreadMap :: ThreadMap
emptyThreadMap :: ThreadMap
emptyThreadMap = ThreadMap
forall a. IntMap a
IM.empty
threadMapToList :: ThreadMap -> [(Int, ForeignRef ThreadId)]
threadMapToList :: ThreadMap -> [(Key, ForeignRef ThreadId)]
threadMapToList = [(Key, ForeignRef ThreadId)] -> [(Key, ForeignRef ThreadId)]
forall a b. Coercible a b => a -> b
coerce ([(Key, ForeignRef ThreadId)] -> [(Key, ForeignRef ThreadId)])
-> (ThreadMap -> [(Key, ForeignRef ThreadId)])
-> ThreadMap
-> [(Key, ForeignRef ThreadId)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ThreadMap -> [(Key, ForeignRef ThreadId)]
forall a. IntMap a -> [(Key, a)]
IM.toList