module Control.Monad.Par.Meta.Resources.SingleThreaded ( 
    
    mkResource
    
  , defaultStartup
  , defaultWorkSearch
) where
import Control.Concurrent
import Control.Monad
import Text.Printf
import Control.Monad.Par.Meta
dbg :: Bool
#ifdef DEBUG
dbg = True
#else
dbg = True
#endif
mkResource :: Resource
mkResource = Resource defaultStartup defaultWorkSearch
defaultStartup :: Startup
defaultStartup = St st 
  where st ws _ = do
#if __GLASGOW_HASKELL__ >= 702
          (cap, _) <- threadCapability =<< myThreadId
#else
          
          let cap = 0
#endif
          when dbg $ printf " [%d] spawning single worker\n" cap
          
          
          spawnWorkerOnCPU ws cap >> return ()
defaultWorkSearch :: WorkSearch
defaultWorkSearch = WS ws 
  where ws _ _ = return Nothing