{-# LINE 1 "libraries/base/./GHC/Event/Clock.hsc" #-}
{-# LANGUAGE Trustworthy #-}
{-# LINE 2 "libraries/base/./GHC/Event/Clock.hsc" #-}
{-# LANGUAGE NoImplicitPrelude, BangPatterns, ForeignFunctionInterface, CApiFFI #-}

module GHC.Event.Clock (getMonotonicTime, initializeTimer) where


{-# LINE 7 "libraries/base/./GHC/Event/Clock.hsc" #-}

import Foreign
import Foreign.C.Types
import GHC.Base
import GHC.Real


{-# LINE 18 "libraries/base/./GHC/Event/Clock.hsc" #-}

-- TODO: Implement this for Windows.

initializeTimer :: IO ()

-- | Return monotonic time in seconds, since some unspecified starting point
getMonotonicTime :: IO Double

------------------------------------------------------------------------
-- FFI binding


{-# LINE 62 "libraries/base/./GHC/Event/Clock.hsc" #-}

getMonotonicTime = do
    with 0.0 $ \timeptr -> do
    absolute_time timeptr
    ctime <- peek timeptr
    let !time = realToFrac ctime
    return time

foreign import capi unsafe "HsBase.h absolute_time" absolute_time ::
    Ptr CDouble -> IO ()

foreign import capi unsafe "HsBase.h initialize_timer"
  initializeTimer :: IO ()


{-# LINE 109 "libraries/base/./GHC/Event/Clock.hsc" #-}