-- GENERATED by C->Haskell Compiler, version 0.28.6 Switcheroo, 25 November 2017 (Haskell)
-- Edit the ORIGNAL .chs file instead!


{-# LINE 1 "src/Foreign/CUDA/Runtime/Utils.chs" #-}
{-# LANGUAGE ForeignFunctionInterface #-}
--------------------------------------------------------------------------------
-- |
-- Module    : Foreign.CUDA.Runtime.Utils
-- Copyright : [2009..2018] Trevor L. McDonell
-- License   : BSD
--
-- Utility functions
--
--------------------------------------------------------------------------------

module Foreign.CUDA.Runtime.Utils (

  runtimeVersion,
  driverVersion,
  libraryVersion,

) where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Ptr as C2HSImp





{-# LINE 21 "src/Foreign/CUDA/Runtime/Utils.chs" #-}


-- Friends
import Foreign.CUDA.Runtime.Error
import Foreign.CUDA.Internal.C2HS

-- System
import Foreign
import Foreign.C


-- |
-- Return the version number of the installed CUDA driver
--
{-# INLINEABLE runtimeVersion #-}
runtimeVersion :: IO Int
runtimeVersion :: IO Int
runtimeVersion =  (Status, Int) -> IO Int
forall a. (Status, a) -> IO a
resultIfOk ((Status, Int) -> IO Int) -> IO (Status, Int) -> IO Int
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IO (Status, Int)
cudaRuntimeGetVersion

{-# INLINE cudaRuntimeGetVersion #-}
cudaRuntimeGetVersion :: IO ((Status), (Int))
cudaRuntimeGetVersion :: IO (Status, Int)
cudaRuntimeGetVersion =
  (Ptr CInt -> IO (Status, Int)) -> IO (Status, Int)
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca ((Ptr CInt -> IO (Status, Int)) -> IO (Status, Int))
-> (Ptr CInt -> IO (Status, Int)) -> IO (Status, Int)
forall a b. (a -> b) -> a -> b
$ \Ptr CInt
a1' -> 
  Ptr CInt -> IO CInt
cudaRuntimeGetVersion'_ Ptr CInt
a1' IO CInt -> (CInt -> IO (Status, Int)) -> IO (Status, Int)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \CInt
res ->
  let {res' :: Status
res' = CInt -> Status
forall i e. (Integral i, Enum e) => i -> e
cToEnum CInt
res} in
  Ptr CInt -> IO Int
forall a b. (Storable a, Integral a, Integral b) => Ptr a -> IO b
peekIntConv  Ptr CInt
a1'IO Int -> (Int -> IO (Status, Int)) -> IO (Status, Int)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Int
a1'' -> 
  (Status, Int) -> IO (Status, Int)
forall (m :: * -> *) a. Monad m => a -> m a
return (Status
res', Int
a1'')

{-# LINE 41 "src/Foreign/CUDA/Runtime/Utils.chs" #-}



-- |
-- Return the version number of the installed CUDA runtime
--
{-# INLINEABLE driverVersion #-}
driverVersion :: IO Int
driverVersion :: IO Int
driverVersion =  (Status, Int) -> IO Int
forall a. (Status, a) -> IO a
resultIfOk ((Status, Int) -> IO Int) -> IO (Status, Int) -> IO Int
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IO (Status, Int)
cudaDriverGetVersion

{-# INLINE cudaDriverGetVersion #-}
cudaDriverGetVersion :: IO ((Status), (Int))
cudaDriverGetVersion :: IO (Status, Int)
cudaDriverGetVersion =
  (Ptr CInt -> IO (Status, Int)) -> IO (Status, Int)
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca ((Ptr CInt -> IO (Status, Int)) -> IO (Status, Int))
-> (Ptr CInt -> IO (Status, Int)) -> IO (Status, Int)
forall a b. (a -> b) -> a -> b
$ \Ptr CInt
a1' -> 
  Ptr CInt -> IO CInt
cudaDriverGetVersion'_ Ptr CInt
a1' IO CInt -> (CInt -> IO (Status, Int)) -> IO (Status, Int)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \CInt
res ->
  let {res' :: Status
res' = CInt -> Status
forall i e. (Integral i, Enum e) => i -> e
cToEnum CInt
res} in
  Ptr CInt -> IO Int
forall a b. (Storable a, Integral a, Integral b) => Ptr a -> IO b
peekIntConv  Ptr CInt
a1'IO Int -> (Int -> IO (Status, Int)) -> IO (Status, Int)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Int
a1'' -> 
  (Status, Int) -> IO (Status, Int)
forall (m :: * -> *) a. Monad m => a -> m a
return (Status
res', Int
a1'')

{-# LINE 53 "src/Foreign/CUDA/Runtime/Utils.chs" #-}



-- |
-- Return the version number of the CUDA library (API) that this package was
-- compiled against.
--
{-# INLINEABLE libraryVersion #-}
libraryVersion :: Int
libraryVersion :: Int
libraryVersion = Int
10020
{-# LINE 62 "src/Foreign/CUDA/Runtime/Utils.chs" #-}



foreign import ccall unsafe "Foreign/CUDA/Runtime/Utils.chs.h cudaRuntimeGetVersion"
  cudaRuntimeGetVersion'_ :: ((C2HSImp.Ptr C2HSImp.CInt) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/Runtime/Utils.chs.h cudaDriverGetVersion"
  cudaDriverGetVersion'_ :: ((C2HSImp.Ptr C2HSImp.CInt) -> (IO C2HSImp.CInt))