-- GENERATED by C->Haskell Compiler, version 0.28.2 Switcheroo, 1 April 2016 (Haskell)
-- Edit the ORIGNAL .chs file instead!


{-# LINE 1 "./Foreign/CUDA/Solver/Dense/Analysis.chs" #-}
{-# LANGUAGE CPP                      #-}
{-# LANGUAGE EmptyDataDecls           #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE TemplateHaskell          #-}
-- |
-- Module      : Foreign.CUDA.Solver.Dense.Analysis
-- Copyright   : [2017] Trevor L. McDonell
-- License     : BSD3
--
-- Maintainer  : Trevor L. McDonell <tmcdonell@cse.unsw.edu.au>
-- Stability   : experimental
-- Portability : non-portable (GHC extensions)
--

module Foreign.CUDA.Solver.Dense.Analysis (

  Info_gesvdj(..), createInfo_gesvdj, destroyInfo_gesvdj,
  Info_syevj(..), createInfo_syevj, destroyInfo_syevj,

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



-- friends
import Foreign.CUDA.Solver.Error
import Foreign.CUDA.Solver.Internal.C2HS

-- system
import Foreign
import Foreign.C
import Control.Monad                                      ( liftM )



{-# LINE 32 "./Foreign/CUDA/Solver/Dense/Analysis.chs" #-}



newtype Info_gesvdj = Info_gesvdj { useInfo_gesvdj :: ((C2HSImp.Ptr ()))}

{-# INLINEABLE createInfo_gesvdj #-}
createInfo_gesvdj :: IO ((Info_gesvdj))
createInfo_gesvdj =
  alloca $ \a1' ->
  createInfo_gesvdj'_ a1' >>= \res ->
  checkStatus res >>
  peekI  a1'>>= \a1'' ->
  return (a1'')

{-# LINE 40 "./Foreign/CUDA/Solver/Dense/Analysis.chs" #-}

  where
    peekI = liftM Info_gesvdj . peek

{-# INLINEABLE destroyInfo_gesvdj #-}
destroyInfo_gesvdj :: (Info_gesvdj) -> IO ((()))
destroyInfo_gesvdj a1 =
  let {a1' = useInfo_gesvdj a1} in
  destroyInfo_gesvdj'_ a1' >>= \res ->
  checkStatus res >>= \res' ->
  return (res')

{-# LINE 46 "./Foreign/CUDA/Solver/Dense/Analysis.chs" #-}



newtype Info_syevj = Info_syevj { useInfo_syevj :: ((C2HSImp.Ptr ()))}

{-# INLINEABLE createInfo_syevj #-}
createInfo_syevj :: IO ((Info_syevj))
createInfo_syevj =
  alloca $ \a1' ->
  createInfo_syevj'_ a1' >>= \res ->
  checkStatus res >>
  peekI  a1'>>= \a1'' ->
  return (a1'')

{-# LINE 63 "./Foreign/CUDA/Solver/Dense/Analysis.chs" #-}

  where
    peekI = liftM Info_syevj . peek

{-# INLINEABLE destroyInfo_syevj #-}
destroyInfo_syevj :: (Info_syevj) -> IO ((()))
destroyInfo_syevj a1 =
  let {a1' = useInfo_syevj a1} in
  destroyInfo_syevj'_ a1' >>= \res ->
  checkStatus res >>= \res' ->
  return (res')

{-# LINE 69 "./Foreign/CUDA/Solver/Dense/Analysis.chs" #-}




foreign import ccall unsafe "Foreign/CUDA/Solver/Dense/Analysis.chs.h cusolverDnCreateGesvdjInfo"
  createInfo_gesvdj'_ :: ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/Solver/Dense/Analysis.chs.h cusolverDnDestroyGesvdjInfo"
  destroyInfo_gesvdj'_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/Solver/Dense/Analysis.chs.h cusolverDnCreateSyevjInfo"
  createInfo_syevj'_ :: ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/Solver/Dense/Analysis.chs.h cusolverDnDestroySyevjInfo"
  destroyInfo_syevj'_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))