{-# LANGUAGE ForeignFunctionInterface #-}
module GF.System.Concurrency(
setNumCapabilities,getNumberOfProcessors) where
import qualified Control.Concurrent as C
import Foreign.C.Types(CInt(..))
setNumCapabilities :: Maybe Int -> IO Bool
setNumCapabilities Maybe Int
opt_n =
do Int
n <- IO Int -> (Int -> IO Int) -> Maybe Int -> IO Int
forall b a. b -> (a -> b) -> Maybe a -> b
maybe IO Int
getNumberOfProcessors Int -> IO Int
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe Int
opt_n
Int -> IO ()
C.setNumCapabilities Int
n
Bool -> IO Bool
forall (m :: * -> *) a. Monad m => a -> m a
return Bool
True
getNumberOfProcessors :: IO Int
getNumberOfProcessors = (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a. Enum a => a -> Int
fromEnum IO CInt
c_getNumberOfProcessors
foreign import ccall "getNumberOfProcessors" c_getNumberOfProcessors :: IO CInt