{-# LINE 1 "src/Codec/Compression/BZip/Foreign/Common.chs" #-}
{-# LANGUAGE DeriveDataTypeable #-}
module Codec.Compression.BZip.Foreign.Common (
BZAction (..)
, BZError (..)
, BzStream
, bzWrap
, bZ2BzlibVersion
) where
import qualified Foreign.C.String as C2HSImp
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Ptr as C2HSImp
import qualified System.IO.Unsafe as C2HSImp
import Control.Applicative
import Control.Exception (Exception, throw)
import Data.Typeable (Typeable)
import Foreign.C.Types (CInt)
data BZAction = BzRun
| BzFlush
| BzFinish
instance Enum BZAction where
succ BzRun = BzFlush
succ BzFlush = BzFinish
succ BzFinish = error "BZAction.succ: BzFinish has no successor"
pred BzFlush = BzRun
pred BzFinish = BzFlush
pred BzRun = error "BZAction.pred: BzRun 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 BzFinish
fromEnum BzRun = 0
fromEnum BzFlush = 1
fromEnum BzFinish = 2
toEnum 0 = BzRun
toEnum 1 = BzFlush
toEnum 2 = BzFinish
toEnum unmatched = error ("BZAction.toEnum: Cannot match " ++ show unmatched)
{-# LINE 24 "src/Codec/Compression/BZip/Foreign/Common.chs" #-}
data BZError = BzConfigError
| BzOutbuffFull
| BzUnexpectedEof
| BzIoError
| BzDataErrorMagic
| BzDataError
| BzMemError
| BzParamError
| BzSequenceError
| BzOk
| BzRunOk
| BzFlushOk
| BzFinishOk
| BzStreamEnd
deriving (Eq,Show,Typeable)
instance Enum BZError where
succ BzConfigError = BzOutbuffFull
succ BzOutbuffFull = BzUnexpectedEof
succ BzUnexpectedEof = BzIoError
succ BzIoError = BzDataErrorMagic
succ BzDataErrorMagic = BzDataError
succ BzDataError = BzMemError
succ BzMemError = BzParamError
succ BzParamError = BzSequenceError
succ BzSequenceError = BzOk
succ BzOk = BzRunOk
succ BzRunOk = BzFlushOk
succ BzFlushOk = BzFinishOk
succ BzFinishOk = BzStreamEnd
succ BzStreamEnd = error "BZError.succ: BzStreamEnd has no successor"
pred BzOutbuffFull = BzConfigError
pred BzUnexpectedEof = BzOutbuffFull
pred BzIoError = BzUnexpectedEof
pred BzDataErrorMagic = BzIoError
pred BzDataError = BzDataErrorMagic
pred BzMemError = BzDataError
pred BzParamError = BzMemError
pred BzSequenceError = BzParamError
pred BzOk = BzSequenceError
pred BzRunOk = BzOk
pred BzFlushOk = BzRunOk
pred BzFinishOk = BzFlushOk
pred BzStreamEnd = BzFinishOk
pred BzConfigError = error "BZError.pred: BzConfigError 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 BzStreamEnd
fromEnum BzConfigError = (-9)
fromEnum BzOutbuffFull = (-8)
fromEnum BzUnexpectedEof = (-7)
fromEnum BzIoError = (-6)
fromEnum BzDataErrorMagic = (-5)
fromEnum BzDataError = (-4)
fromEnum BzMemError = (-3)
fromEnum BzParamError = (-2)
fromEnum BzSequenceError = (-1)
fromEnum BzOk = 0
fromEnum BzRunOk = 1
fromEnum BzFlushOk = 2
fromEnum BzFinishOk = 3
fromEnum BzStreamEnd = 4
toEnum (-9) = BzConfigError
toEnum (-8) = BzOutbuffFull
toEnum (-7) = BzUnexpectedEof
toEnum (-6) = BzIoError
toEnum (-5) = BzDataErrorMagic
toEnum (-4) = BzDataError
toEnum (-3) = BzMemError
toEnum (-2) = BzParamError
toEnum (-1) = BzSequenceError
toEnum 0 = BzOk
toEnum 1 = BzRunOk
toEnum 2 = BzFlushOk
toEnum 3 = BzFinishOk
toEnum 4 = BzStreamEnd
toEnum unmatched = error ("BZError.toEnum: Cannot match " ++ show unmatched)
{-# LINE 41 "src/Codec/Compression/BZip/Foreign/Common.chs" #-}
instance Exception BZError where
data BzStream
bZ2BzlibVersion :: (String)
bZ2BzlibVersion =
C2HSImp.unsafePerformIO $
bZ2BzlibVersion'_ >>= \res ->
C2HSImp.peekCString res >>= \res' ->
return (res')
{-# LINE 49 "src/Codec/Compression/BZip/Foreign/Common.chs" #-}
bzWrap :: CInt -> IO BZError
bzWrap err =
let err' = toEnum (fromIntegral err) in
case err' of
BzOk -> pure err'
BzRunOk -> pure err'
BzFlushOk -> pure err'
BzFinishOk -> pure err'
BzStreamEnd -> pure err'
x -> throw x
foreign import ccall safe "Codec/Compression/BZip/Foreign/Common.chs.h BZ2_bzlibVersion"
bZ2BzlibVersion'_ :: (IO (C2HSImp.Ptr C2HSImp.CChar))