-- Global references; state
--
-- Author: Patrick Maier
-----------------------------------------------------------------------------

{-# OPTIONS_GHC -fno-cse #-}  -- to protect unsafePerformIO hack

module Control.Parallel.HdpH.Internal.State.GRef
  ( -- * reference to this node's registry
    regRef  -- :: IORef GRefReg
  ) where

import Prelude
import Data.IORef (IORef, newIORef)
import qualified Data.Map as Map (empty)
import System.IO.Unsafe (unsafePerformIO)

import Control.Parallel.HdpH.Internal.Type.GRef
       (GRefReg(GRefReg), lastSlot, table)


-----------------------------------------------------------------------------
-- reference to this node's registry, initially empty

regRef :: IORef GRefReg
regRef = unsafePerformIO $
           newIORef $ GRefReg { lastSlot = 0, table = Map.empty }
{-# NOINLINE regRef #-}   -- required to protect unsafePerformIO hack