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


{-# LINE 1 "src/Graphics/QML/Internal/BindPrim.chs" #-}
{-# LANGUAGE
    ForeignFunctionInterface
  #-}

module Graphics.QML.Internal.BindPrim where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Ptr as C2HSImp



import Graphics.QML.Internal.Types

import Foreign.C.Types
import Foreign.Marshal.Alloc
import Foreign.Marshal.Utils
import Foreign.Ptr
import System.IO.Unsafe



cIntToEnum :: Enum a => CInt -> a
cIntToEnum :: forall a. Enum a => CInt -> a
cIntToEnum = Int -> a
forall a. Enum a => Int -> a
toEnum (Int -> a) -> (CInt -> Int) -> CInt -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral

enumToCInt :: Enum a => a -> CInt
enumToCInt :: forall a. Enum a => a -> CInt
enumToCInt = Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CInt) -> (a -> Int) -> a -> CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Int
forall a. Enum a => a -> Int
fromEnum

--
-- String
--

newtype HsQMLStringHandle = HsQMLStringHandle (C2HSImp.Ptr (HsQMLStringHandle))
{-# LINE 27 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlGetStringSize :: IO ((Int))
hsqmlGetStringSize =
  hsqmlGetStringSize'_ >>= \res ->
  let {res' = fromIntegral res} in
  return (res')

{-# LINE 31 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlStringSize :: Int
hsqmlStringSize = unsafeDupablePerformIO $ hsqmlGetStringSize

hsqmlInitString :: (HsQMLStringHandle) -> IO ()
hsqmlInitString :: HsQMLStringHandle -> IO ()
hsqmlInitString HsQMLStringHandle
a1 =
  let {a1' :: HsQMLStringHandle
a1' = HsQMLStringHandle -> HsQMLStringHandle
forall a. a -> a
id HsQMLStringHandle
a1} in 
  HsQMLStringHandle -> IO ()
hsqmlInitString'_ HsQMLStringHandle
a1' IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
  () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

{-# LINE 38 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlDeinitString :: (HsQMLStringHandle) -> IO ()
hsqmlDeinitString a1 =
  let {a1' = id a1} in 
  hsqmlDeinitString'_ a1' >>
  return ()

{-# LINE 42 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlWriteString :: (Int) -> (HsQMLStringHandle) -> IO ((Ptr CUShort))
hsqmlWriteString a1 a2 =
  let {a1' = fromIntegral a1} in 
  let {a2' = id a2} in 
  hsqmlWriteString'_ a1' a2' >>= \res ->
  let {res' = id res} in
  return (res')

{-# LINE 47 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlReadString :: (HsQMLStringHandle) -> (Ptr (Ptr CUShort)) -> IO ((Int))
hsqmlReadString a1 a2 =
  let {a1' = id a1} in 
  let {a2' = id a2} in 
  hsqmlReadString'_ a1' a2' >>= \res ->
  let {res' = fromIntegral res} in
  return (res')

{-# LINE 52 "src/Graphics/QML/Internal/BindPrim.chs" #-}


withStrHndl :: (HsQMLStringHandle -> IO b) -> IO b
withStrHndl contFn =
    allocaBytes hsqmlStringSize $ \ptr -> do
        let str = HsQMLStringHandle ptr
        hsqmlInitString str
        ret <- contFn str
        hsqmlDeinitString str
        return ret

--
-- JSValue
--

newtype HsQMLJValHandle = HsQMLJValHandle (C2HSImp.Ptr (HsQMLJValHandle))
{-# LINE 67 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlGetJvalSize :: IO ((Int))
hsqmlGetJvalSize :: IO Int
hsqmlGetJvalSize =
  IO CULong
hsqmlGetJvalSize'_ IO CULong -> (CULong -> IO Int) -> IO Int
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \CULong
res ->
  let {res' :: Int
res' = CULong -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral CULong
res} in
  Int -> IO Int
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Int
res')

{-# LINE 71 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlJValSize :: Int
hsqmlJValSize = unsafeDupablePerformIO $ hsqmlGetJvalSize

hsqmlGetJvalTypeid :: IO ((Int))
hsqmlGetJvalTypeid :: IO Int
hsqmlGetJvalTypeid =
  IO CInt
hsqmlGetJvalTypeid'_ IO CInt -> (CInt -> IO Int) -> IO Int
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \CInt
res ->
  let {res' :: Int
res' = CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral CInt
res} in
  Int -> IO Int
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Int
res')

{-# LINE 78 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlJValTypeId :: Int
hsqmlJValTypeId = unsafeDupablePerformIO $ hsqmlGetJvalTypeid

hsqmlInitJvalNull :: (HsQMLJValHandle) -> (Bool) -> IO ()
hsqmlInitJvalNull :: HsQMLJValHandle -> Bool -> IO ()
hsqmlInitJvalNull HsQMLJValHandle
a1 Bool
a2 =
  let {a1' :: HsQMLJValHandle
a1' = HsQMLJValHandle -> HsQMLJValHandle
forall a. a -> a
id HsQMLJValHandle
a1} in 
  let {a2' :: CInt
a2' = Bool -> CInt
forall a. Num a => Bool -> a
fromBool Bool
a2} in 
  HsQMLJValHandle -> CInt -> IO ()
hsqmlInitJvalNull'_ HsQMLJValHandle
a1' CInt
a2' IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
  () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

{-# LINE 86 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlDeinitJval :: (HsQMLJValHandle) -> IO ()
hsqmlDeinitJval a1 =
  let {a1' = id a1} in 
  hsqmlDeinitJval'_ a1' >>
  return ()

{-# LINE 90 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlSetJval :: (HsQMLJValHandle) -> (HsQMLJValHandle) -> IO ()
hsqmlSetJval a1 a2 =
  let {a1' = id a1} in 
  let {a2' = id a2} in 
  hsqmlSetJval'_ a1' a2' >>
  return ()

{-# LINE 95 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlInitJvalBool :: (HsQMLJValHandle) -> (Bool) -> IO ()
hsqmlInitJvalBool a1 a2 =
  let {a1' = id a1} in 
  let {a2' = fromBool a2} in 
  hsqmlInitJvalBool'_ a1' a2' >>
  return ()

{-# LINE 100 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlIsJvalBool :: (HsQMLJValHandle) -> IO ((Bool))
hsqmlIsJvalBool a1 =
  let {a1' = id a1} in 
  hsqmlIsJvalBool'_ a1' >>= \res ->
  let {res' = toBool res} in
  return (res')

{-# LINE 104 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlGetJvalBool :: (HsQMLJValHandle) -> IO ((Bool))
hsqmlGetJvalBool a1 =
  let {a1' = id a1} in 
  hsqmlGetJvalBool'_ a1' >>= \res ->
  let {res' = toBool res} in
  return (res')

{-# LINE 108 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlInitJvalInt :: (HsQMLJValHandle) -> (CInt) -> IO ()
hsqmlInitJvalInt a1 a2 =
  let {a1' = id a1} in 
  let {a2' = id a2} in 
  hsqmlInitJvalInt'_ a1' a2' >>
  return ()

{-# LINE 113 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlInitJvalDouble :: (HsQMLJValHandle) -> (CDouble) -> IO ()
hsqmlInitJvalDouble a1 a2 =
  let {a1' = id a1} in 
  let {a2' = id a2} in 
  hsqmlInitJvalDouble'_ a1' a2' >>
  return ()

{-# LINE 118 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlIsJvalNumber :: (HsQMLJValHandle) -> IO ((Bool))
hsqmlIsJvalNumber a1 =
  let {a1' = id a1} in 
  hsqmlIsJvalNumber'_ a1' >>= \res ->
  let {res' = toBool res} in
  return (res')

{-# LINE 122 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlGetJvalInt :: (HsQMLJValHandle) -> IO ((CInt))
hsqmlGetJvalInt a1 =
  let {a1' = id a1} in 
  hsqmlGetJvalInt'_ a1' >>= \res ->
  let {res' = id res} in
  return (res')

{-# LINE 126 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlGetJvalDouble :: (HsQMLJValHandle) -> IO ((CDouble))
hsqmlGetJvalDouble a1 =
  let {a1' = id a1} in 
  hsqmlGetJvalDouble'_ a1' >>= \res ->
  let {res' = id res} in
  return (res')

{-# LINE 130 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlInitJvalString :: (HsQMLJValHandle) -> (HsQMLStringHandle) -> IO ()
hsqmlInitJvalString a1 a2 =
  let {a1' = id a1} in 
  let {a2' = id a2} in 
  hsqmlInitJvalString'_ a1' a2' >>
  return ()

{-# LINE 135 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlIsJvalString :: (HsQMLJValHandle) -> IO ((Bool))
hsqmlIsJvalString a1 =
  let {a1' = id a1} in 
  hsqmlIsJvalString'_ a1' >>= \res ->
  let {res' = toBool res} in
  return (res')

{-# LINE 139 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlGetJvalString :: (HsQMLJValHandle) -> (HsQMLStringHandle) -> IO ()
hsqmlGetJvalString a1 a2 =
  let {a1' = id a1} in 
  let {a2' = id a2} in 
  hsqmlGetJvalString'_ a1' a2' >>
  return ()

{-# LINE 144 "src/Graphics/QML/Internal/BindPrim.chs" #-}


fromJVal ::
    Strength -> (HsQMLJValHandle -> IO Bool) -> (HsQMLJValHandle -> IO a) ->
    HsQMLJValHandle -> IO (Maybe a)
fromJVal :: forall a.
Strength
-> (HsQMLJValHandle -> IO Bool)
-> (HsQMLJValHandle -> IO a)
-> HsQMLJValHandle
-> IO (Maybe a)
fromJVal Strength
Strong HsQMLJValHandle -> IO Bool
_ HsQMLJValHandle -> IO a
getFn HsQMLJValHandle
jval =
    (a -> Maybe a) -> IO a -> IO (Maybe a)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> Maybe a
forall a. a -> Maybe a
Just (IO a -> IO (Maybe a)) -> IO a -> IO (Maybe a)
forall a b. (a -> b) -> a -> b
$ HsQMLJValHandle -> IO a
getFn HsQMLJValHandle
jval
fromJVal Strength
Weak HsQMLJValHandle -> IO Bool
isFn HsQMLJValHandle -> IO a
getFn HsQMLJValHandle
jval = do
    Bool
is <- HsQMLJValHandle -> IO Bool
isFn HsQMLJValHandle
jval
    if Bool
is then (a -> Maybe a) -> IO a -> IO (Maybe a)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> Maybe a
forall a. a -> Maybe a
Just (IO a -> IO (Maybe a)) -> IO a -> IO (Maybe a)
forall a b. (a -> b) -> a -> b
$ HsQMLJValHandle -> IO a
getFn HsQMLJValHandle
jval else Maybe a -> IO (Maybe a)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe a
forall a. Maybe a
Nothing

withJVal ::
    (HsQMLJValHandle -> a -> IO ()) -> a -> (HsQMLJValHandle -> IO b) -> IO b
withJVal :: forall a b.
(HsQMLJValHandle -> a -> IO ())
-> a -> (HsQMLJValHandle -> IO b) -> IO b
withJVal HsQMLJValHandle -> a -> IO ()
initFn a
val HsQMLJValHandle -> IO b
contFn =
    Int -> (Ptr HsQMLJValHandle -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
hsqmlJValSize ((Ptr HsQMLJValHandle -> IO b) -> IO b)
-> (Ptr HsQMLJValHandle -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr HsQMLJValHandle
ptr -> do
        let jval :: HsQMLJValHandle
jval = Ptr HsQMLJValHandle -> HsQMLJValHandle
HsQMLJValHandle Ptr HsQMLJValHandle
ptr
        HsQMLJValHandle -> a -> IO ()
initFn HsQMLJValHandle
jval a
val
        b
ret <- HsQMLJValHandle -> IO b
contFn HsQMLJValHandle
jval
        HsQMLJValHandle -> IO ()
hsqmlDeinitJval HsQMLJValHandle
jval
        b -> IO b
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return b
ret

--
-- Array
--

hsqmlInitJvalArray :: (HsQMLJValHandle) -> (Int) -> IO ()
hsqmlInitJvalArray :: HsQMLJValHandle -> Int -> IO ()
hsqmlInitJvalArray HsQMLJValHandle
a1 Int
a2 =
  let {a1' :: HsQMLJValHandle
a1' = HsQMLJValHandle -> HsQMLJValHandle
forall a. a -> a
id HsQMLJValHandle
a1} in 
  let {a2' :: CUInt
a2' = Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a2} in 
  HsQMLJValHandle -> CUInt -> IO ()
hsqmlInitJvalArray'_ HsQMLJValHandle
a1' CUInt
a2' IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
  () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

{-# LINE 172 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlIsJvalArray :: (HsQMLJValHandle) -> IO ((Bool))
hsqmlIsJvalArray a1 =
  let {a1' = id a1} in 
  hsqmlIsJvalArray'_ a1' >>= \res ->
  let {res' = toBool res} in
  return (res')

{-# LINE 176 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlGetJvalArrayLength :: (HsQMLJValHandle) -> IO ((Int))
hsqmlGetJvalArrayLength a1 =
  let {a1' = id a1} in 
  hsqmlGetJvalArrayLength'_ a1' >>= \res ->
  let {res' = fromIntegral res} in
  return (res')

{-# LINE 180 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlJvalArrayGet :: (HsQMLJValHandle) -> (Int) -> (HsQMLJValHandle) -> IO ()
hsqmlJvalArrayGet a1 a2 a3 =
  let {a1' = id a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = id a3} in 
  hsqmlJvalArrayGet'_ a1' a2' a3' >>
  return ()

{-# LINE 186 "src/Graphics/QML/Internal/BindPrim.chs" #-}


hsqmlJvalArraySet :: (HsQMLJValHandle) -> (Int) -> (HsQMLJValHandle) -> IO ()
hsqmlJvalArraySet a1 a2 a3 =
  let {a1' = id a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = id a3} in 
  hsqmlJvalArraySet'_ a1' a2' a3' >>
  return ()

{-# LINE 192 "src/Graphics/QML/Internal/BindPrim.chs" #-}


foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_get_string_size"
  hsqmlGetStringSize'_ :: (IO C2HSImp.CULong)

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_init_string"
  hsqmlInitString'_ :: ((HsQMLStringHandle) -> (IO ()))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_deinit_string"
  hsqmlDeinitString'_ :: ((HsQMLStringHandle) -> (IO ()))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_write_string"
  hsqmlWriteString'_ :: (C2HSImp.CInt -> ((HsQMLStringHandle) -> (IO (C2HSImp.Ptr C2HSImp.CUShort))))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_read_string"
  hsqmlReadString'_ :: ((HsQMLStringHandle) -> ((C2HSImp.Ptr (C2HSImp.Ptr C2HSImp.CUShort)) -> (IO C2HSImp.CInt)))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_get_jval_size"
  hsqmlGetJvalSize'_ :: (IO C2HSImp.CULong)

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_get_jval_typeid"
  hsqmlGetJvalTypeid'_ :: (IO C2HSImp.CInt)

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_init_jval_null"
  hsqmlInitJvalNull'_ :: ((HsQMLJValHandle) -> (C2HSImp.CInt -> (IO ())))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_deinit_jval"
  hsqmlDeinitJval'_ :: ((HsQMLJValHandle) -> (IO ()))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_set_jval"
  hsqmlSetJval'_ :: ((HsQMLJValHandle) -> ((HsQMLJValHandle) -> (IO ())))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_init_jval_bool"
  hsqmlInitJvalBool'_ :: ((HsQMLJValHandle) -> (C2HSImp.CInt -> (IO ())))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_is_jval_bool"
  hsqmlIsJvalBool'_ :: ((HsQMLJValHandle) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_get_jval_bool"
  hsqmlGetJvalBool'_ :: ((HsQMLJValHandle) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_init_jval_int"
  hsqmlInitJvalInt'_ :: ((HsQMLJValHandle) -> (C2HSImp.CInt -> (IO ())))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_init_jval_double"
  hsqmlInitJvalDouble'_ :: ((HsQMLJValHandle) -> (C2HSImp.CDouble -> (IO ())))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_is_jval_number"
  hsqmlIsJvalNumber'_ :: ((HsQMLJValHandle) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_get_jval_int"
  hsqmlGetJvalInt'_ :: ((HsQMLJValHandle) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_get_jval_double"
  hsqmlGetJvalDouble'_ :: ((HsQMLJValHandle) -> (IO C2HSImp.CDouble))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_init_jval_string"
  hsqmlInitJvalString'_ :: ((HsQMLJValHandle) -> ((HsQMLStringHandle) -> (IO ())))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_is_jval_string"
  hsqmlIsJvalString'_ :: ((HsQMLJValHandle) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_get_jval_string"
  hsqmlGetJvalString'_ :: ((HsQMLJValHandle) -> ((HsQMLStringHandle) -> (IO ())))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_init_jval_array"
  hsqmlInitJvalArray'_ :: ((HsQMLJValHandle) -> (C2HSImp.CUInt -> (IO ())))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_is_jval_array"
  hsqmlIsJvalArray'_ :: ((HsQMLJValHandle) -> (IO C2HSImp.CInt))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_get_jval_array_length"
  hsqmlGetJvalArrayLength'_ :: ((HsQMLJValHandle) -> (IO C2HSImp.CUInt))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_jval_array_get"
  hsqmlJvalArrayGet'_ :: ((HsQMLJValHandle) -> (C2HSImp.CUInt -> ((HsQMLJValHandle) -> (IO ()))))

foreign import ccall unsafe "Graphics/QML/Internal/BindPrim.chs.h hsqml_jval_array_set"
  hsqmlJvalArraySet'_ :: ((HsQMLJValHandle) -> (C2HSImp.CUInt -> ((HsQMLJValHandle) -> (IO ()))))