hdph-0.0.1: src/Control/Parallel/HdpH/Internal/State/Location.hs
-- Locations; state
--
-- Author: Rob Stewart, Patrick Maier
-----------------------------------------------------------------------------
{-# OPTIONS_GHC -fno-cse #-} -- to protect unsafePerformIO hack
module Control.Parallel.HdpH.Internal.State.Location
( -- * reference to this node's ID
myNodeRef, -- :: IORef NodeId
-- * reference to IDs of all nodes
allNodesRef, -- :: IORef [NodeId]
-- * reference to system debug level
debugRef -- :: IORef Int
) where
import Prelude
import Control.Exception (throw)
import Data.IORef (IORef, newIORef)
import System.IO.Unsafe (unsafePerformIO)
import Control.Parallel.HdpH.Internal.Type.Location
(NodeId, MyNodeException(NodeIdUnset))
-----------------------------------------------------------------------------
-- reference to ID of this node;
-- will be set in module HdpH.Internal.Comm;
-- if unset, access will raise a 'MyNodeException'
myNodeRef :: IORef NodeId
myNodeRef = unsafePerformIO $ newIORef $ throw NodeIdUnset
{-# NOINLINE myNodeRef #-} -- required to protect unsafePerformIO hack
-----------------------------------------------------------------------------
-- reference to list of IDs of all nodes;
-- will be set (to non-empty list) in module HdpH_IO
allNodesRef :: IORef [NodeId]
allNodesRef = unsafePerformIO $ newIORef $ []
{-# NOINLINE allNodesRef #-} -- required to protect unsafePerformIO hack
-----------------------------------------------------------------------------
-- reference to system debug level;
-- may be set in module HdpH.Internal.Comm;
-- referenced value must be non-negative (0 means no debug output)
debugRef :: IORef Int
debugRef = unsafePerformIO $ newIORef $ 0
{-# NOINLINE debugRef #-} -- required to protect unsafePerformIO hack