-- GENERATED by C->Haskell Compiler, version 0.20.1 The shapeless maps, 31 Oct 2014 (Haskell)
-- Edit the ORIGNAL .chs file instead!


{-# LINE 1 "./Foreign/CUDA/Cusparse/Types.chs" #-}
{-# LANGUAGE CPP                      #-}
{-# LANGUAGE ForeignFunctionInterface #-}

module Foreign.CUDA.Cusparse.Types (

  -- * Types
  Handle(..), HybMat(..), MatDescr(..),
  Csrsv2Info(..), Csric02Info (..), Csrilu02Info (..),
  Bsrsv2Info(..), Bsric02Info (..), Bsrilu02Info (..),
  Bsrsm2Info(..),
  SolvePolicy (..),  SolveAnalysisInfo(..),
  Operation(..), Status(..),
  Action(..), Direction(..), FillMode(..), PointerMode(..), DiagType(..),
  IndexBase(..), MatrixType(..), HybPartition(..),

) where

import Foreign (Ptr)



{-# LINE 21 "./Foreign/CUDA/Cusparse/Types.chs" #-}



-- | Types
--
newtype Handle = Handle { useHandle :: ((Ptr ()))}

newtype HybMat = HybMat { useHybMat :: ((Ptr ()))}

newtype MatDescr = MatDescr { useMatDescr :: ((Ptr ()))}

newtype Csrsv2Info = Csrsv2Info { useCsrsv2Info :: ((Ptr ()))}
newtype Csric02Info = Csric02Info { useCsric02Info :: ((Ptr ()))}
newtype Csrilu02Info = Csrilu02Info { useCsrilu02Info :: ((Ptr ()))}
newtype Bsrsv2Info = Bsrsv2Info { useBsrsv2Info :: ((Ptr ()))}
newtype Bsric02Info = Bsric02Info { useBsric02Info :: ((Ptr ()))}
newtype Bsrilu02Info = Bsrilu02Info { useBsrilu02Info :: ((Ptr ()))}
newtype Bsrsm2Info = Bsrsm2Info { useBsrsm2Info :: ((Ptr ()))}

newtype SolveAnalysisInfo = SolveAnalysisInfo { useSolveAnalysisInfo :: ((Ptr ()))}

data SolvePolicy = NoLevel
                 | UseLevel
  deriving (Eq,Show)
instance Enum SolvePolicy where
  succ NoLevel = UseLevel
  succ UseLevel = error "SolvePolicy.succ: UseLevel has no successor"

  pred UseLevel = NoLevel
  pred NoLevel = error "SolvePolicy.pred: NoLevel has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from UseLevel

  fromEnum NoLevel = 0
  fromEnum UseLevel = 1

  toEnum 0 = NoLevel
  toEnum 1 = UseLevel
  toEnum unmatched = error ("SolvePolicy.toEnum: Cannot match " ++ show unmatched)

{-# LINE 44 "./Foreign/CUDA/Cusparse/Types.chs" #-}



data Status = Success
            | NotInitialized
            | AllocFailed
            | InvalidValue
            | ArchMismatch
            | MappingError
            | ExecutionFailed
            | InternalError
            | MatrixTypeNotSupported
            | ZeroPivot
  deriving (Eq,Show)
instance Enum Status where
  succ Success = NotInitialized
  succ NotInitialized = AllocFailed
  succ AllocFailed = InvalidValue
  succ InvalidValue = ArchMismatch
  succ ArchMismatch = MappingError
  succ MappingError = ExecutionFailed
  succ ExecutionFailed = InternalError
  succ InternalError = MatrixTypeNotSupported
  succ MatrixTypeNotSupported = ZeroPivot
  succ ZeroPivot = error "Status.succ: ZeroPivot has no successor"

  pred NotInitialized = Success
  pred AllocFailed = NotInitialized
  pred InvalidValue = AllocFailed
  pred ArchMismatch = InvalidValue
  pred MappingError = ArchMismatch
  pred ExecutionFailed = MappingError
  pred InternalError = ExecutionFailed
  pred MatrixTypeNotSupported = InternalError
  pred ZeroPivot = MatrixTypeNotSupported
  pred Success = error "Status.pred: Success has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from ZeroPivot

  fromEnum Success = 0
  fromEnum NotInitialized = 1
  fromEnum AllocFailed = 2
  fromEnum InvalidValue = 3
  fromEnum ArchMismatch = 4
  fromEnum MappingError = 5
  fromEnum ExecutionFailed = 6
  fromEnum InternalError = 7
  fromEnum MatrixTypeNotSupported = 8
  fromEnum ZeroPivot = 9

  toEnum 0 = Success
  toEnum 1 = NotInitialized
  toEnum 2 = AllocFailed
  toEnum 3 = InvalidValue
  toEnum 4 = ArchMismatch
  toEnum 5 = MappingError
  toEnum 6 = ExecutionFailed
  toEnum 7 = InternalError
  toEnum 8 = MatrixTypeNotSupported
  toEnum 9 = ZeroPivot
  toEnum unmatched = error ("Status.toEnum: Cannot match " ++ show unmatched)

{-# LINE 49 "./Foreign/CUDA/Cusparse/Types.chs" #-}


data Action = Symbolic
            | Numeric
  deriving (Eq,Show)
instance Enum Action where
  succ Symbolic = Numeric
  succ Numeric = error "Action.succ: Numeric has no successor"

  pred Numeric = Symbolic
  pred Symbolic = error "Action.pred: Symbolic has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from Numeric

  fromEnum Symbolic = 0
  fromEnum Numeric = 1

  toEnum 0 = Symbolic
  toEnum 1 = Numeric
  toEnum unmatched = error ("Action.toEnum: Cannot match " ++ show unmatched)

{-# LINE 53 "./Foreign/CUDA/Cusparse/Types.chs" #-}


data Direction = Row
               | Column
  deriving (Eq,Show)
instance Enum Direction where
  succ Row = Column
  succ Column = error "Direction.succ: Column has no successor"

  pred Column = Row
  pred Row = error "Direction.pred: Row has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from Column

  fromEnum Row = 0
  fromEnum Column = 1

  toEnum 0 = Row
  toEnum 1 = Column
  toEnum unmatched = error ("Direction.toEnum: Cannot match " ++ show unmatched)

{-# LINE 57 "./Foreign/CUDA/Cusparse/Types.chs" #-}


data Operation = NonTranspose
               | Transpose
               | ConjugateTranspose
  deriving (Eq,Show)
instance Enum Operation where
  succ NonTranspose = Transpose
  succ Transpose = ConjugateTranspose
  succ ConjugateTranspose = error "Operation.succ: ConjugateTranspose has no successor"

  pred Transpose = NonTranspose
  pred ConjugateTranspose = Transpose
  pred NonTranspose = error "Operation.pred: NonTranspose has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from ConjugateTranspose

  fromEnum NonTranspose = 0
  fromEnum Transpose = 1
  fromEnum ConjugateTranspose = 2

  toEnum 0 = NonTranspose
  toEnum 1 = Transpose
  toEnum 2 = ConjugateTranspose
  toEnum unmatched = error ("Operation.toEnum: Cannot match " ++ show unmatched)

{-# LINE 61 "./Foreign/CUDA/Cusparse/Types.chs" #-}


data IndexBase = Zero
               | One
  deriving (Eq,Show)
instance Enum IndexBase where
  succ Zero = One
  succ One = error "IndexBase.succ: One has no successor"

  pred One = Zero
  pred Zero = error "IndexBase.pred: Zero has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from One

  fromEnum Zero = 0
  fromEnum One = 1

  toEnum 0 = Zero
  toEnum 1 = One
  toEnum unmatched = error ("IndexBase.toEnum: Cannot match " ++ show unmatched)

{-# LINE 65 "./Foreign/CUDA/Cusparse/Types.chs" #-}


data HybPartition = Auto
                  | User
                  | Max
  deriving (Eq,Show)
instance Enum HybPartition where
  succ Auto = User
  succ User = Max
  succ Max = error "HybPartition.succ: Max has no successor"

  pred User = Auto
  pred Max = User
  pred Auto = error "HybPartition.pred: Auto has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from Max

  fromEnum Auto = 0
  fromEnum User = 1
  fromEnum Max = 2

  toEnum 0 = Auto
  toEnum 1 = User
  toEnum 2 = Max
  toEnum unmatched = error ("HybPartition.toEnum: Cannot match " ++ show unmatched)

{-# LINE 69 "./Foreign/CUDA/Cusparse/Types.chs" #-}



data MatrixType = General
                | Symmetric
                | Hermitian
                | Triangular
  deriving (Eq,Show)
instance Enum MatrixType where
  succ General = Symmetric
  succ Symmetric = Hermitian
  succ Hermitian = Triangular
  succ Triangular = error "MatrixType.succ: Triangular has no successor"

  pred Symmetric = General
  pred Hermitian = Symmetric
  pred Triangular = Hermitian
  pred General = error "MatrixType.pred: General has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from Triangular

  fromEnum General = 0
  fromEnum Symmetric = 1
  fromEnum Hermitian = 2
  fromEnum Triangular = 3

  toEnum 0 = General
  toEnum 1 = Symmetric
  toEnum 2 = Hermitian
  toEnum 3 = Triangular
  toEnum unmatched = error ("MatrixType.toEnum: Cannot match " ++ show unmatched)

{-# LINE 74 "./Foreign/CUDA/Cusparse/Types.chs" #-}


data FillMode = Lower
              | Upper
  deriving (Eq,Show)
instance Enum FillMode where
  succ Lower = Upper
  succ Upper = error "FillMode.succ: Upper has no successor"

  pred Upper = Lower
  pred Lower = error "FillMode.pred: Lower has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from Upper

  fromEnum Lower = 0
  fromEnum Upper = 1

  toEnum 0 = Lower
  toEnum 1 = Upper
  toEnum unmatched = error ("FillMode.toEnum: Cannot match " ++ show unmatched)

{-# LINE 78 "./Foreign/CUDA/Cusparse/Types.chs" #-}


data DiagType = NonUnit
              | Unit
  deriving (Eq,Show)
instance Enum DiagType where
  succ NonUnit = Unit
  succ Unit = error "DiagType.succ: Unit has no successor"

  pred Unit = NonUnit
  pred NonUnit = error "DiagType.pred: NonUnit has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from Unit

  fromEnum NonUnit = 0
  fromEnum Unit = 1

  toEnum 0 = NonUnit
  toEnum 1 = Unit
  toEnum unmatched = error ("DiagType.toEnum: Cannot match " ++ show unmatched)

{-# LINE 82 "./Foreign/CUDA/Cusparse/Types.chs" #-}


data PointerMode = Host
                 | Device
  deriving (Eq,Show)
instance Enum PointerMode where
  succ Host = Device
  succ Device = error "PointerMode.succ: Device has no successor"

  pred Device = Host
  pred Host = error "PointerMode.pred: Host has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from Device

  fromEnum Host = 0
  fromEnum Device = 1

  toEnum 0 = Host
  toEnum 1 = Device
  toEnum unmatched = error ("PointerMode.toEnum: Cannot match " ++ show unmatched)

{-# LINE 86 "./Foreign/CUDA/Cusparse/Types.chs" #-}