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


{-# LINE 1 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}
{-# LANGUAGE CPP                      #-}
{-# LANGUAGE EmptyDataDecls           #-}
{-# LANGUAGE ForeignFunctionInterface #-}
-- |
-- Module      : Foreign.CUDA.BLAS.Sparse.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.BLAS.Sparse.Analysis (

  Info(..), createInfo, destroyInfo,
  Info_csrsv2(..), createInfo_csrsv2, destroyInfo_csrsv2,
  Info_csric02(..), createInfo_csric02, destroyInfo_csric02,
  Info_csrilu02(..), createInfo_csrilu02, destroyInfo_csrilu02,
  Info_bsrsv2(..), createInfo_bsrsv2, destroyInfo_bsrsv2,
  Info_bsrsm2(..), createInfo_bsrsm2, destroyInfo_bsrsm2,
  Info_bsric02(..), createInfo_bsric02, destroyInfo_bsric02,
  Info_bsrilu02(..), createInfo_bsrilu02, destroyInfo_bsrilu02,
  Info_csrgemm2(..), createInfo_csrgemm2, destroyInfo_csrgemm2,
  Info_color(..), createInfo_color, destroyInfo_color,
  Info_csru2csr(..), createInfo_csru2csr, destroyInfo_csru2csr,

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



-- Friends
import Foreign.CUDA.BLAS.Sparse.Error
import Foreign.CUDA.BLAS.Sparse.Internal.C2HS

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



{-# LINE 40 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}



-- | An opaque structure holding the information collected in the analysis phase
-- of the solution of the sparse triangular linear system.
--
-- <http://docs.nvidia.com/cuda/cusparse/index.html#cusparsesolveanalysisinfot>
--
newtype Info = Info { useInfo :: ((C2HSImp.Ptr ()))}

-- | Create and initialise the solve and analysis structure to default values.
--
-- <http://docs.nvidia.com/cuda/cusparse/index.html#cusparsecreatesolveanalysisinfo>
--
{-# INLINEABLE createInfo #-}
createInfo :: IO ((Info))
createInfo =
  alloca $ \a1' -> 
  createInfo'_ a1' >>= \res ->
  checkStatus res >> 
  peekI  a1'>>= \a1'' -> 
  return (a1'')

{-# LINE 56 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}

  where
    peekI = liftM Info . peek

-- | Release memory associated with a matrix solver structure.
--
-- <http://docs.nvidia.com/cuda/cusparse/index.html#cusparsedestroysolveanalysisinfo>
--
{-# INLINEABLE destroyInfo #-}
destroyInfo :: (Info) -> IO ((()))
destroyInfo a1 =
  let {a1' = useInfo a1} in 
  destroyInfo'_ a1' >>= \res ->
  checkStatus res >>= \res' ->
  return (res')

{-# LINE 66 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}



-- | <http://docs.nvidia.com/cuda/cusparse/index.html#csrsv2infot>
--
newtype Info_csrsv2 = Info_csrsv2 { useInfo_csrsv2 :: ((C2HSImp.Ptr ()))}

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

{-# LINE 75 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}

  where
    peekI = liftM Info_csrsv2 . peek

{-# INLINEABLE destroyInfo_csrsv2 #-}
destroyInfo_csrsv2 :: (Info_csrsv2) -> IO ((()))
destroyInfo_csrsv2 a1 =
  let {a1' = useInfo_csrsv2 a1} in 
  destroyInfo_csrsv2'_ a1' >>= \res ->
  checkStatus res >>= \res' ->
  return (res')

{-# LINE 81 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}



-- | <http://docs.nvidia.com/cuda/cusparse/index.html#csric02infot>
--
newtype Info_csric02 = Info_csric02 { useInfo_csric02 :: ((C2HSImp.Ptr ()))}

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

{-# LINE 90 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}

  where
    peekI = liftM Info_csric02 . peek

{-# INLINEABLE destroyInfo_csric02 #-}
destroyInfo_csric02 :: (Info_csric02) -> IO ((()))
destroyInfo_csric02 a1 =
  let {a1' = useInfo_csric02 a1} in 
  destroyInfo_csric02'_ a1' >>= \res ->
  checkStatus res >>= \res' ->
  return (res')

{-# LINE 96 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}



-- | <http://docs.nvidia.com/cuda/cusparse/index.html#csrilu02infot>
--
newtype Info_csrilu02 = Info_csrilu02 { useInfo_csrilu02 :: ((C2HSImp.Ptr ()))}

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

{-# LINE 105 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}

  where
    peekI = liftM Info_csrilu02 . peek

{-# INLINEABLE destroyInfo_csrilu02 #-}
destroyInfo_csrilu02 :: (Info_csrilu02) -> IO ((()))
destroyInfo_csrilu02 a1 =
  let {a1' = useInfo_csrilu02 a1} in 
  destroyInfo_csrilu02'_ a1' >>= \res ->
  checkStatus res >>= \res' ->
  return (res')

{-# LINE 111 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}



-- | <http://docs.nvidia.com/cuda/cusparse/index.html#bsrsv2infot>
--
newtype Info_bsrsv2 = Info_bsrsv2 { useInfo_bsrsv2 :: ((C2HSImp.Ptr ()))}

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

{-# LINE 120 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}

  where
    peekI = liftM Info_bsrsv2 . peek

{-# INLINEABLE destroyInfo_bsrsv2 #-}
destroyInfo_bsrsv2 :: (Info_bsrsv2) -> IO ((()))
destroyInfo_bsrsv2 a1 =
  let {a1' = useInfo_bsrsv2 a1} in 
  destroyInfo_bsrsv2'_ a1' >>= \res ->
  checkStatus res >>= \res' ->
  return (res')

{-# LINE 126 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}



-- | <http://docs.nvidia.com/cuda/cusparse/index.html#bsrsvminfot>
--
newtype Info_bsrsm2 = Info_bsrsm2 { useInfo_bsrsm2 :: ((C2HSImp.Ptr ()))}

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

{-# LINE 135 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}

  where
    peekI = liftM Info_bsrsm2 . peek

{-# INLINEABLE destroyInfo_bsrsm2 #-}
destroyInfo_bsrsm2 :: (Info_bsrsm2) -> IO ((()))
destroyInfo_bsrsm2 a1 =
  let {a1' = useInfo_bsrsm2 a1} in 
  destroyInfo_bsrsm2'_ a1' >>= \res ->
  checkStatus res >>= \res' ->
  return (res')

{-# LINE 141 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}



-- | <http://docs.nvidia.com/cuda/cusparse/index.html#bsric02infot>
--
newtype Info_bsric02 = Info_bsric02 { useInfo_bsric02 :: ((C2HSImp.Ptr ()))}

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

{-# LINE 150 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}

  where
    peekI = liftM Info_bsric02 . peek

{-# INLINEABLE destroyInfo_bsric02 #-}
destroyInfo_bsric02 :: (Info_bsric02) -> IO ((()))
destroyInfo_bsric02 a1 =
  let {a1' = useInfo_bsric02 a1} in 
  destroyInfo_bsric02'_ a1' >>= \res ->
  checkStatus res >>= \res' ->
  return (res')

{-# LINE 156 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}



-- | <http://docs.nvidia.com/cuda/cusparse/index.html#bsrilu02infot>
--
newtype Info_bsrilu02 = Info_bsrilu02 { useInfo_bsrilu02 :: ((C2HSImp.Ptr ()))}

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

{-# LINE 165 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}

  where
    peekI = liftM Info_bsrilu02 . peek

{-# INLINEABLE destroyInfo_bsrilu02 #-}
destroyInfo_bsrilu02 :: (Info_bsrilu02) -> IO ((()))
destroyInfo_bsrilu02 a1 =
  let {a1' = useInfo_bsrilu02 a1} in 
  destroyInfo_bsrilu02'_ a1' >>= \res ->
  checkStatus res >>= \res' ->
  return (res')

{-# LINE 171 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}



-- | <http://docs.nvidia.com/cuda/cusparse/index.html#csrgemm2infot>
--
newtype Info_csrgemm2 = Info_csrgemm2 { useInfo_csrgemm2 :: ((C2HSImp.Ptr ()))}

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

{-# LINE 181 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}

  where
    peekI = liftM Info_csrgemm2 . peek

{-# INLINEABLE destroyInfo_csrgemm2 #-}
destroyInfo_csrgemm2 :: (Info_csrgemm2) -> IO ((()))
destroyInfo_csrgemm2 a1 =
  let {a1' = useInfo_csrgemm2 a1} in 
  destroyInfo_csrgemm2'_ a1' >>= \res ->
  checkStatus res >>= \res' ->
  return (res')

{-# LINE 187 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}




-- /undocumented/
--
newtype Info_color = Info_color { useInfo_color :: ((C2HSImp.Ptr ()))}

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

{-# LINE 208 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}

  where
    peekI = liftM Info_color . peek

{-# INLINEABLE destroyInfo_color #-}
destroyInfo_color :: (Info_color) -> IO ((()))
destroyInfo_color a1 =
  let {a1' = useInfo_color a1} in 
  destroyInfo_color'_ a1' >>= \res ->
  checkStatus res >>= \res' ->
  return (res')

{-# LINE 214 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}




-- /undocumented/
--
newtype Info_csru2csr = Info_csru2csr { useInfo_csru2csr :: ((C2HSImp.Ptr ()))}

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

{-# LINE 235 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}

  where
    peekI = liftM Info_csru2csr . peek

{-# INLINEABLE destroyInfo_csru2csr #-}
destroyInfo_csru2csr :: (Info_csru2csr) -> IO ((()))
destroyInfo_csru2csr a1 =
  let {a1' = useInfo_csru2csr a1} in 
  destroyInfo_csru2csr'_ a1' >>= \res ->
  checkStatus res >>= \res' ->
  return (res')

{-# LINE 241 "./Foreign/CUDA/BLAS/Sparse/Analysis.chs" #-}




foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseCreateSolveAnalysisInfo"
  createInfo'_ :: ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseDestroySolveAnalysisInfo"
  destroyInfo'_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseCreateCsrsv2Info"
  createInfo_csrsv2'_ :: ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseDestroyCsrsv2Info"
  destroyInfo_csrsv2'_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseCreateCsric02Info"
  createInfo_csric02'_ :: ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseDestroyCsric02Info"
  destroyInfo_csric02'_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseCreateCsrilu02Info"
  createInfo_csrilu02'_ :: ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseDestroyCsrilu02Info"
  destroyInfo_csrilu02'_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseCreateBsrsv2Info"
  createInfo_bsrsv2'_ :: ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseDestroyBsrsv2Info"
  destroyInfo_bsrsv2'_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseCreateBsrsm2Info"
  createInfo_bsrsm2'_ :: ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseDestroyBsrsm2Info"
  destroyInfo_bsrsm2'_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseCreateBsric02Info"
  createInfo_bsric02'_ :: ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseDestroyBsric02Info"
  destroyInfo_bsric02'_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseCreateBsrilu02Info"
  createInfo_bsrilu02'_ :: ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseDestroyBsrilu02Info"
  destroyInfo_bsrilu02'_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseCreateCsrgemm2Info"
  createInfo_csrgemm2'_ :: ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseDestroyCsrgemm2Info"
  destroyInfo_csrgemm2'_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseCreateColorInfo"
  createInfo_color'_ :: ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseDestroyColorInfo"
  destroyInfo_color'_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseCreateCsru2csrInfo"
  createInfo_csru2csr'_ :: ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Analysis.chs.h cusparseDestroyCsru2csrInfo"
  destroyInfo_csru2csr'_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))