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


{-# LINE 1 "src/XlsxWriter/Common.chs" #-}
{-# LANGUAGE ForeignFunctionInterface #-}
-- | https://libxlsxwriter.github.io/common_8h.html
module XlsxWriter.Common where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Ptr as C2HSImp
import qualified Foreign.Storable as C2HSImp






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

type Row = (C2HSImp.CUInt)
{-# LINE 12 "src/XlsxWriter/Common.chs" #-}

--{#typedef lxw_row_t Row #}
--{#default in `Row' [lxw_row_t] fromIntegral #}

type Col = (C2HSImp.CUShort)
{-# LINE 16 "src/XlsxWriter/Common.chs" #-}


{--
-- TODO: do we need this?
{#enum lxw_boolean as LxwBoolean {underscoreToCase} deriving (Show, Eq) #}
{#typedef lxw_boolean LxwBoolean #}
{#default in ` #}
--}

data DateTime = DateTime
  { DateTime -> Int
dtYear :: Int,
    DateTime -> Int
dtMonth :: Int,
    DateTime -> Int
dtDay :: Int,
    DateTime -> Int
dtHour :: Int,
    DateTime -> Int
dtMin :: Int,
    DateTime -> Double
dtSec :: Double
  } deriving Int -> DateTime -> ShowS
[DateTime] -> ShowS
DateTime -> String
(Int -> DateTime -> ShowS)
-> (DateTime -> String) -> ([DateTime] -> ShowS) -> Show DateTime
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DateTime] -> ShowS
$cshowList :: [DateTime] -> ShowS
show :: DateTime -> String
$cshow :: DateTime -> String
showsPrec :: Int -> DateTime -> ShowS
$cshowsPrec :: Int -> DateTime -> ShowS
Show

instance Storable DateTime where
  sizeOf :: DateTime -> Int
sizeOf DateTime
_ = Int
32
{-# LINE 35 "src/XlsxWriter/Common.chs" #-}

  alignment _ = 8
{-# LINE 36 "src/XlsxWriter/Common.chs" #-}

  peek p = DateTime
           <$> liftM fromIntegral ((\ptr -> do {C2HSImp.peekByteOff ptr 0 :: IO C2HSImp.CInt}) p)
           <*> liftM fromIntegral ((\ptr -> do {C2HSImp.peekByteOff ptr 4 :: IO C2HSImp.CInt}) p)
           <*> liftM fromIntegral ((\ptr -> do {C2HSImp.peekByteOff ptr 8 :: IO C2HSImp.CInt}) p)
           <*> liftM fromIntegral ((\ptr -> do {C2HSImp.peekByteOff ptr 12 :: IO C2HSImp.CInt}) p)
           <*> liftM fromIntegral ((\ptr -> do {C2HSImp.peekByteOff ptr 16 :: IO C2HSImp.CInt}) p)
           <*> ((\ptr -> do {C2HSImp.peekByteOff ptr 24 :: IO C2HSImp.CDouble}) p >>= \(CDouble dbl) -> pure dbl)
  poke :: Ptr DateTime -> DateTime -> IO ()
poke Ptr DateTime
p DateTime
x = do
    (\Ptr DateTime
ptr CInt
val -> do {Ptr DateTime -> Int -> CInt -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
C2HSImp.pokeByteOff Ptr DateTime
ptr Int
0 (CInt
val :: C2HSImp.CInt)}) Ptr DateTime
p (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CInt) -> Int -> CInt
forall a b. (a -> b) -> a -> b
$ DateTime -> Int
dtYear DateTime
x)
    (\Ptr DateTime
ptr CInt
val -> do {Ptr DateTime -> Int -> CInt -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
C2HSImp.pokeByteOff Ptr DateTime
ptr Int
4 (CInt
val :: C2HSImp.CInt)}) Ptr DateTime
p (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CInt) -> Int -> CInt
forall a b. (a -> b) -> a -> b
$ DateTime -> Int
dtMonth DateTime
x)
    (\Ptr DateTime
ptr CInt
val -> do {Ptr DateTime -> Int -> CInt -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
C2HSImp.pokeByteOff Ptr DateTime
ptr Int
8 (CInt
val :: C2HSImp.CInt)}) Ptr DateTime
p (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CInt) -> Int -> CInt
forall a b. (a -> b) -> a -> b
$ DateTime -> Int
dtDay DateTime
x)
    (\Ptr DateTime
ptr CInt
val -> do {Ptr DateTime -> Int -> CInt -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
C2HSImp.pokeByteOff Ptr DateTime
ptr Int
12 (CInt
val :: C2HSImp.CInt)}) Ptr DateTime
p (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CInt) -> Int -> CInt
forall a b. (a -> b) -> a -> b
$ DateTime -> Int
dtHour DateTime
x)
    (\Ptr DateTime
ptr CInt
val -> do {Ptr DateTime -> Int -> CInt -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
C2HSImp.pokeByteOff Ptr DateTime
ptr Int
16 (CInt
val :: C2HSImp.CInt)}) Ptr DateTime
p (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CInt) -> Int -> CInt
forall a b. (a -> b) -> a -> b
$ DateTime -> Int
dtMin DateTime
x)
    (\Ptr DateTime
ptr CDouble
val -> do {Ptr DateTime -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
C2HSImp.pokeByteOff Ptr DateTime
ptr Int
24 (CDouble
val :: C2HSImp.CDouble)}) Ptr DateTime
p (Double -> CDouble
CDouble (Double -> CDouble) -> Double -> CDouble
forall a b. (a -> b) -> a -> b
$ DateTime -> Double
dtSec DateTime
x)

type DateTimePtr = C2HSImp.Ptr (DateTime)
{-# LINE 52 "src/XlsxWriter/Common.chs" #-}


data Error = LxwNoError
           | LxwErrorMemoryMallocFailed
           | LxwErrorCreatingXlsxFile
           | LxwErrorCreatingTmpfile
           | LxwErrorReadingTmpfile
           | LxwErrorZipFileOperation
           | LxwErrorZipParameterError
           | LxwErrorZipBadZipFile
           | LxwErrorZipInternalError
           | LxwErrorZipFileAdd
           | LxwErrorZipClose
           | LxwErrorFeatureNotSupported
           | LxwErrorNullParameterIgnored
           | LxwErrorParameterValidation
           | LxwErrorSheetnameLengthExceeded
           | LxwErrorInvalidSheetnameCharacter
           | LxwErrorSheetnameStartEndApostrophe
           | LxwErrorSheetnameAlreadyUsed
           | LxwError32StringLengthExceeded
           | LxwError128StringLengthExceeded
           | LxwError255StringLengthExceeded
           | LxwErrorMaxStringLengthExceeded
           | LxwErrorSharedStringIndexNotFound
           | LxwErrorWorksheetIndexOutOfRange
           | LxwErrorWorksheetMaxUrlLengthExceeded
           | LxwErrorWorksheetMaxNumberUrlsExceeded
           | LxwErrorImageDimensions
           | LxwMaxErrno
  deriving (Int -> Error -> ShowS
[Error] -> ShowS
Error -> String
(Int -> Error -> ShowS)
-> (Error -> String) -> ([Error] -> ShowS) -> Show Error
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Error] -> ShowS
$cshowList :: [Error] -> ShowS
show :: Error -> String
$cshow :: Error -> String
showsPrec :: Int -> Error -> ShowS
$cshowsPrec :: Int -> Error -> ShowS
Show,Error -> Error -> Bool
(Error -> Error -> Bool) -> (Error -> Error -> Bool) -> Eq Error
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Error -> Error -> Bool
$c/= :: Error -> Error -> Bool
== :: Error -> Error -> Bool
$c== :: Error -> Error -> Bool
Eq)
instance Enum Error where
  succ :: Error -> Error
succ Error
LxwNoError = Error
LxwErrorMemoryMallocFailed
  succ Error
LxwErrorMemoryMallocFailed = Error
LxwErrorCreatingXlsxFile
  succ Error
LxwErrorCreatingXlsxFile = Error
LxwErrorCreatingTmpfile
  succ Error
LxwErrorCreatingTmpfile = Error
LxwErrorReadingTmpfile
  succ Error
LxwErrorReadingTmpfile = Error
LxwErrorZipFileOperation
  succ Error
LxwErrorZipFileOperation = Error
LxwErrorZipParameterError
  succ Error
LxwErrorZipParameterError = Error
LxwErrorZipBadZipFile
  succ Error
LxwErrorZipBadZipFile = Error
LxwErrorZipInternalError
  succ Error
LxwErrorZipInternalError = Error
LxwErrorZipFileAdd
  succ Error
LxwErrorZipFileAdd = Error
LxwErrorZipClose
  succ Error
LxwErrorZipClose = Error
LxwErrorFeatureNotSupported
  succ Error
LxwErrorFeatureNotSupported = Error
LxwErrorNullParameterIgnored
  succ Error
LxwErrorNullParameterIgnored = Error
LxwErrorParameterValidation
  succ Error
LxwErrorParameterValidation = Error
LxwErrorSheetnameLengthExceeded
  succ Error
LxwErrorSheetnameLengthExceeded = Error
LxwErrorInvalidSheetnameCharacter
  succ Error
LxwErrorInvalidSheetnameCharacter = Error
LxwErrorSheetnameStartEndApostrophe
  succ Error
LxwErrorSheetnameStartEndApostrophe = Error
LxwErrorSheetnameAlreadyUsed
  succ Error
LxwErrorSheetnameAlreadyUsed = Error
LxwError32StringLengthExceeded
  succ Error
LxwError32StringLengthExceeded = Error
LxwError128StringLengthExceeded
  succ Error
LxwError128StringLengthExceeded = Error
LxwError255StringLengthExceeded
  succ Error
LxwError255StringLengthExceeded = Error
LxwErrorMaxStringLengthExceeded
  succ Error
LxwErrorMaxStringLengthExceeded = Error
LxwErrorSharedStringIndexNotFound
  succ Error
LxwErrorSharedStringIndexNotFound = Error
LxwErrorWorksheetIndexOutOfRange
  succ Error
LxwErrorWorksheetIndexOutOfRange = Error
LxwErrorWorksheetMaxUrlLengthExceeded
  succ Error
LxwErrorWorksheetMaxUrlLengthExceeded = Error
LxwErrorWorksheetMaxNumberUrlsExceeded
  succ Error
LxwErrorWorksheetMaxNumberUrlsExceeded = Error
LxwErrorImageDimensions
  succ Error
LxwErrorImageDimensions = Error
LxwMaxErrno
  succ Error
LxwMaxErrno = String -> Error
forall a. HasCallStack => String -> a
error String
"Error.succ: LxwMaxErrno has no successor"

  pred :: Error -> Error
pred Error
LxwErrorMemoryMallocFailed = Error
LxwNoError
  pred Error
LxwErrorCreatingXlsxFile = Error
LxwErrorMemoryMallocFailed
  pred Error
LxwErrorCreatingTmpfile = Error
LxwErrorCreatingXlsxFile
  pred Error
LxwErrorReadingTmpfile = Error
LxwErrorCreatingTmpfile
  pred Error
LxwErrorZipFileOperation = Error
LxwErrorReadingTmpfile
  pred Error
LxwErrorZipParameterError = Error
LxwErrorZipFileOperation
  pred Error
LxwErrorZipBadZipFile = Error
LxwErrorZipParameterError
  pred Error
LxwErrorZipInternalError = Error
LxwErrorZipBadZipFile
  pred Error
LxwErrorZipFileAdd = Error
LxwErrorZipInternalError
  pred Error
LxwErrorZipClose = Error
LxwErrorZipFileAdd
  pred Error
LxwErrorFeatureNotSupported = Error
LxwErrorZipClose
  pred Error
LxwErrorNullParameterIgnored = Error
LxwErrorFeatureNotSupported
  pred Error
LxwErrorParameterValidation = Error
LxwErrorNullParameterIgnored
  pred Error
LxwErrorSheetnameLengthExceeded = Error
LxwErrorParameterValidation
  pred Error
LxwErrorInvalidSheetnameCharacter = Error
LxwErrorSheetnameLengthExceeded
  pred Error
LxwErrorSheetnameStartEndApostrophe = Error
LxwErrorInvalidSheetnameCharacter
  pred Error
LxwErrorSheetnameAlreadyUsed = Error
LxwErrorSheetnameStartEndApostrophe
  pred Error
LxwError32StringLengthExceeded = Error
LxwErrorSheetnameAlreadyUsed
  pred Error
LxwError128StringLengthExceeded = Error
LxwError32StringLengthExceeded
  pred Error
LxwError255StringLengthExceeded = Error
LxwError128StringLengthExceeded
  pred Error
LxwErrorMaxStringLengthExceeded = Error
LxwError255StringLengthExceeded
  pred Error
LxwErrorSharedStringIndexNotFound = Error
LxwErrorMaxStringLengthExceeded
  pred Error
LxwErrorWorksheetIndexOutOfRange = Error
LxwErrorSharedStringIndexNotFound
  pred Error
LxwErrorWorksheetMaxUrlLengthExceeded = Error
LxwErrorWorksheetIndexOutOfRange
  pred Error
LxwErrorWorksheetMaxNumberUrlsExceeded = Error
LxwErrorWorksheetMaxUrlLengthExceeded
  pred Error
LxwErrorImageDimensions = Error
LxwErrorWorksheetMaxNumberUrlsExceeded
  pred Error
LxwMaxErrno = Error
LxwErrorImageDimensions
  pred Error
LxwNoError = String -> Error
forall a. HasCallStack => String -> a
error String
"Error.pred: LxwNoError has no predecessor"

  enumFromTo :: Error -> Error -> [Error]
enumFromTo Error
from Error
to = Error -> [Error]
forall t. Enum t => t -> [t]
go Error
from
    where
      end :: Int
end = Error -> Int
forall a. Enum a => a -> Int
fromEnum Error
to
      go :: t -> [t]
go t
v = case Int -> Int -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (t -> Int
forall a. Enum a => a -> Int
fromEnum t
v) Int
end of
                 Ordering
LT -> t
v t -> [t] -> [t]
forall a. a -> [a] -> [a]
: t -> [t]
go (t -> t
forall a. Enum a => a -> a
succ t
v)
                 Ordering
EQ -> [t
v]
                 Ordering
GT -> []

  enumFrom :: Error -> [Error]
enumFrom Error
from = Error -> Error -> [Error]
forall a. Enum a => a -> a -> [a]
enumFromTo Error
from Error
LxwMaxErrno

  fromEnum :: Error -> Int
fromEnum Error
LxwNoError = Int
0
  fromEnum Error
LxwErrorMemoryMallocFailed = Int
1
  fromEnum Error
LxwErrorCreatingXlsxFile = Int
2
  fromEnum Error
LxwErrorCreatingTmpfile = Int
3
  fromEnum Error
LxwErrorReadingTmpfile = Int
4
  fromEnum Error
LxwErrorZipFileOperation = Int
5
  fromEnum Error
LxwErrorZipParameterError = Int
6
  fromEnum Error
LxwErrorZipBadZipFile = Int
7
  fromEnum Error
LxwErrorZipInternalError = Int
8
  fromEnum Error
LxwErrorZipFileAdd = Int
9
  fromEnum Error
LxwErrorZipClose = Int
10
  fromEnum Error
LxwErrorFeatureNotSupported = Int
11
  fromEnum Error
LxwErrorNullParameterIgnored = Int
12
  fromEnum Error
LxwErrorParameterValidation = Int
13
  fromEnum Error
LxwErrorSheetnameLengthExceeded = Int
14
  fromEnum Error
LxwErrorInvalidSheetnameCharacter = Int
15
  fromEnum Error
LxwErrorSheetnameStartEndApostrophe = Int
16
  fromEnum Error
LxwErrorSheetnameAlreadyUsed = Int
17
  fromEnum Error
LxwError32StringLengthExceeded = Int
18
  fromEnum Error
LxwError128StringLengthExceeded = Int
19
  fromEnum Error
LxwError255StringLengthExceeded = Int
20
  fromEnum Error
LxwErrorMaxStringLengthExceeded = Int
21
  fromEnum Error
LxwErrorSharedStringIndexNotFound = Int
22
  fromEnum Error
LxwErrorWorksheetIndexOutOfRange = Int
23
  fromEnum Error
LxwErrorWorksheetMaxUrlLengthExceeded = Int
24
  fromEnum Error
LxwErrorWorksheetMaxNumberUrlsExceeded = Int
25
  fromEnum Error
LxwErrorImageDimensions = Int
26
  fromEnum Error
LxwMaxErrno = Int
27

  toEnum :: Int -> Error
toEnum Int
0 = Error
LxwNoError
  toEnum Int
1 = Error
LxwErrorMemoryMallocFailed
  toEnum Int
2 = Error
LxwErrorCreatingXlsxFile
  toEnum Int
3 = Error
LxwErrorCreatingTmpfile
  toEnum Int
4 = Error
LxwErrorReadingTmpfile
  toEnum Int
5 = Error
LxwErrorZipFileOperation
  toEnum Int
6 = Error
LxwErrorZipParameterError
  toEnum Int
7 = Error
LxwErrorZipBadZipFile
  toEnum Int
8 = Error
LxwErrorZipInternalError
  toEnum Int
9 = Error
LxwErrorZipFileAdd
  toEnum Int
10 = Error
LxwErrorZipClose
  toEnum Int
11 = Error
LxwErrorFeatureNotSupported
  toEnum Int
12 = Error
LxwErrorNullParameterIgnored
  toEnum Int
13 = Error
LxwErrorParameterValidation
  toEnum Int
14 = Error
LxwErrorSheetnameLengthExceeded
  toEnum Int
15 = Error
LxwErrorInvalidSheetnameCharacter
  toEnum Int
16 = Error
LxwErrorSheetnameStartEndApostrophe
  toEnum Int
17 = Error
LxwErrorSheetnameAlreadyUsed
  toEnum Int
18 = Error
LxwError32StringLengthExceeded
  toEnum Int
19 = Error
LxwError128StringLengthExceeded
  toEnum Int
20 = Error
LxwError255StringLengthExceeded
  toEnum Int
21 = Error
LxwErrorMaxStringLengthExceeded
  toEnum Int
22 = Error
LxwErrorSharedStringIndexNotFound
  toEnum Int
23 = Error
LxwErrorWorksheetIndexOutOfRange
  toEnum Int
24 = Error
LxwErrorWorksheetMaxUrlLengthExceeded
  toEnum Int
25 = Error
LxwErrorWorksheetMaxNumberUrlsExceeded
  toEnum Int
26 = Error
LxwErrorImageDimensions
  toEnum Int
27 = Error
LxwMaxErrno
  toEnum Int
unmatched = String -> Error
forall a. HasCallStack => String -> a
error (String
"Error.toEnum: Cannot match " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
unmatched)

{-# LINE 54 "src/XlsxWriter/Common.chs" #-}


{-# LINE 55 "src/XlsxWriter/Common.chs" #-}