packages feed

qtah-qt5-0.8.0: src/Graphics/UI/Qtah/Generated/Core/QThread.hs

{-# LANGUAGE FlexibleContexts, FlexibleInstances, ForeignFunctionInterface, MonoLocalBinds, MultiParamTypeClasses, ScopedTypeVariables, TypeSynonymInstances, UndecidableInstances #-}
---------- GENERATED FILE, EDITS WILL BE LOST ----------

module Graphics.UI.Qtah.Generated.Core.QThread (
  castQThreadToQObject,
  castQObjectToQThread,
  QThreadValue (..),
  QThreadConstPtr (..),
  isFinished,
  isInterruptionRequested,
  isRunning,
  loopLevel,
  priority,
  stackSize,
  QThreadPtr (..),
  exit,
  exitWithCode,
  setPriority,
  quit,
  requestInterruption,
  setStackSize,
  start,
  startWithPriority,
  terminate,
  wait,
  waitWithMillis,
  currentThread,
  idealThreadCount,
  msleep,
  sleep,
  usleep,
  yieldCurrentThread,
  QThreadConst (..),
  castQThreadToConst,
  QThread (..),
  castQThreadToNonconst,
  new,
  newWithParent,
  QThreadSuper (..),
  QThreadSuperConst (..),
  QThreadPriority (..),
  ) where

import qualified Foreign as HoppyF
import qualified Foreign.C as HoppyFC
import qualified Foreign.Hoppy.Runtime as HoppyFHR
import {-# SOURCE #-} qualified Graphics.UI.Qtah.Generated.Core.QObject as M94
import Prelude (($), (.), (/=), (=<<), (==), (>>=))
import qualified Prelude as HoppyP

foreign import ccall "genpop__QThread_new" new' ::  HoppyP.IO (HoppyF.Ptr QThread)
foreign import ccall "genpop__QThread_newWithParent" newWithParent' ::  HoppyF.Ptr M94.QObject -> HoppyP.IO (HoppyF.Ptr QThread)
foreign import ccall "genpop__QThread_exit" exit' ::  HoppyF.Ptr QThread -> HoppyP.IO ()
foreign import ccall "genpop__QThread_exitWithCode" exitWithCode' ::  HoppyF.Ptr QThread -> HoppyFC.CInt -> HoppyP.IO ()
foreign import ccall "genpop__QThread_isFinished" isFinished' ::  HoppyF.Ptr QThreadConst -> HoppyP.IO HoppyFC.CBool
foreign import ccall "genpop__QThread_isInterruptionRequested" isInterruptionRequested' ::  HoppyF.Ptr QThreadConst -> HoppyP.IO HoppyFC.CBool
foreign import ccall "genpop__QThread_isRunning" isRunning' ::  HoppyF.Ptr QThreadConst -> HoppyP.IO HoppyFC.CBool
foreign import ccall "genpop__QThread_loopLevel" loopLevel' ::  HoppyF.Ptr QThreadConst -> HoppyP.IO HoppyFC.CInt
foreign import ccall "genpop__QThread_priority" priority' ::  HoppyF.Ptr QThreadConst -> HoppyP.IO HoppyFC.CInt
foreign import ccall "genpop__QThread_setPriority" setPriority' ::  HoppyF.Ptr QThread -> HoppyFC.CInt -> HoppyP.IO ()
foreign import ccall "genpop__QThread_quit" quit' ::  HoppyF.Ptr QThread -> HoppyP.IO ()
foreign import ccall "genpop__QThread_requestInterruption" requestInterruption' ::  HoppyF.Ptr QThread -> HoppyP.IO ()
foreign import ccall "genpop__QThread_stackSize" stackSize' ::  HoppyF.Ptr QThreadConst -> HoppyP.IO HoppyFC.CUInt
foreign import ccall "genpop__QThread_setStackSize" setStackSize' ::  HoppyF.Ptr QThread -> HoppyFC.CUInt -> HoppyP.IO ()
foreign import ccall "genpop__QThread_start" start' ::  HoppyF.Ptr QThread -> HoppyP.IO ()
foreign import ccall "genpop__QThread_startWithPriority" startWithPriority' ::  HoppyF.Ptr QThread -> HoppyFC.CInt -> HoppyP.IO ()
foreign import ccall "genpop__QThread_terminate" terminate' ::  HoppyF.Ptr QThread -> HoppyP.IO ()
foreign import ccall "genpop__QThread_wait" wait' ::  HoppyF.Ptr QThread -> HoppyP.IO ()
foreign import ccall "genpop__QThread_waitWithMillis" waitWithMillis' ::  HoppyF.Ptr QThread -> HoppyFC.CULong -> HoppyP.IO ()
foreign import ccall "genpop__QThread_currentThread" currentThread' ::  HoppyP.IO (HoppyF.Ptr QThread)
foreign import ccall "genpop__QThread_idealThreadCount" idealThreadCount' ::  HoppyP.IO HoppyFC.CInt
foreign import ccall "genpop__QThread_msleep" msleep' ::  HoppyFC.CULong -> HoppyP.IO ()
foreign import ccall "genpop__QThread_sleep" sleep' ::  HoppyFC.CULong -> HoppyP.IO ()
foreign import ccall "genpop__QThread_usleep" usleep' ::  HoppyFC.CULong -> HoppyP.IO ()
foreign import ccall "genpop__QThread_yieldCurrentThread" yieldCurrentThread' ::  HoppyP.IO ()
foreign import ccall "gencast__QThread__QObject" castQThreadToQObject :: HoppyF.Ptr QThreadConst -> HoppyF.Ptr M94.QObjectConst
foreign import ccall "gencast__QObject__QThread" castQObjectToQThread :: HoppyF.Ptr M94.QObjectConst -> HoppyF.Ptr QThreadConst
foreign import ccall "gendel__QThread" delete'QThread :: HoppyF.Ptr QThreadConst -> HoppyP.IO ()
foreign import ccall "&gendel__QThread" deletePtr'QThread :: HoppyF.FunPtr (HoppyF.Ptr QThreadConst -> HoppyP.IO ())

class QThreadValue a where
  withQThreadPtr :: a -> (QThreadConst -> HoppyP.IO b) -> HoppyP.IO b

instance {-# OVERLAPPABLE #-} QThreadConstPtr a => QThreadValue a where
  withQThreadPtr = HoppyP.flip ($) . toQThreadConst

class (M94.QObjectConstPtr this) => QThreadConstPtr this where
  toQThreadConst :: this -> QThreadConst

isFinished :: (QThreadValue this) => (this) {- ^ this -} -> (HoppyP.IO HoppyP.Bool)
isFinished arg'1 =
  withQThreadPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  (
    (HoppyP.return . (/= 0))
  ) =<<
  (isFinished' arg'1')

isInterruptionRequested :: (QThreadValue this) => (this) {- ^ this -} -> (HoppyP.IO HoppyP.Bool)
isInterruptionRequested arg'1 =
  withQThreadPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  (
    (HoppyP.return . (/= 0))
  ) =<<
  (isInterruptionRequested' arg'1')

isRunning :: (QThreadValue this) => (this) {- ^ this -} -> (HoppyP.IO HoppyP.Bool)
isRunning arg'1 =
  withQThreadPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  (
    (HoppyP.return . (/= 0))
  ) =<<
  (isRunning' arg'1')

loopLevel :: (QThreadValue this) => (this) {- ^ this -} -> (HoppyP.IO HoppyP.Int)
loopLevel arg'1 =
  withQThreadPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  (
    HoppyP.return . HoppyFHR.coerceIntegral
  ) =<<
  (loopLevel' arg'1')

priority :: (QThreadValue this) => (this) {- ^ this -} -> (HoppyP.IO QThreadPriority)
priority arg'1 =
  withQThreadPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  (
    HoppyP.return . HoppyFHR.toCppEnum
  ) =<<
  (priority' arg'1')

stackSize :: (QThreadValue this) => (this) {- ^ this -} -> (HoppyP.IO HoppyFC.CUInt)
stackSize arg'1 =
  withQThreadPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  (stackSize' arg'1')

class (QThreadConstPtr this, M94.QObjectPtr this) => QThreadPtr this where
  toQThread :: this -> QThread

exit :: (QThreadPtr this) => (this) {- ^ this -} -> (HoppyP.IO ())
exit arg'1 =
  HoppyFHR.withCppPtr (toQThread arg'1) $ \arg'1' ->
  (exit' arg'1')

exitWithCode :: (QThreadPtr this) => (this) {- ^ this -} -> (HoppyP.Int) -> (HoppyP.IO ())
exitWithCode arg'1 arg'2 =
  HoppyFHR.withCppPtr (toQThread arg'1) $ \arg'1' ->
  (
    HoppyP.return . HoppyFHR.coerceIntegral
  ) arg'2 >>= \arg'2' ->
  (exitWithCode' arg'1' arg'2')

setPriority :: (QThreadPtr this) => (this) {- ^ this -} -> (QThreadPriority) -> (HoppyP.IO ())
setPriority arg'1 arg'2 =
  HoppyFHR.withCppPtr (toQThread arg'1) $ \arg'1' ->
  (
    HoppyP.return . HoppyFHR.fromCppEnum
  ) arg'2 >>= \arg'2' ->
  (setPriority' arg'1' arg'2')

quit :: (QThreadPtr this) => (this) {- ^ this -} -> (HoppyP.IO ())
quit arg'1 =
  HoppyFHR.withCppPtr (toQThread arg'1) $ \arg'1' ->
  (quit' arg'1')

requestInterruption :: (QThreadPtr this) => (this) {- ^ this -} -> (HoppyP.IO ())
requestInterruption arg'1 =
  HoppyFHR.withCppPtr (toQThread arg'1) $ \arg'1' ->
  (requestInterruption' arg'1')

setStackSize :: (QThreadPtr this) => (this) {- ^ this -} -> (HoppyFC.CUInt) -> (HoppyP.IO ())
setStackSize arg'1 arg'2 =
  HoppyFHR.withCppPtr (toQThread arg'1) $ \arg'1' ->
  let arg'2' = arg'2 in
  (setStackSize' arg'1' arg'2')

start :: (QThreadPtr this) => (this) {- ^ this -} -> (HoppyP.IO ())
start arg'1 =
  HoppyFHR.withCppPtr (toQThread arg'1) $ \arg'1' ->
  (start' arg'1')

startWithPriority :: (QThreadPtr this) => (this) {- ^ this -} -> (QThreadPriority) -> (HoppyP.IO ())
startWithPriority arg'1 arg'2 =
  HoppyFHR.withCppPtr (toQThread arg'1) $ \arg'1' ->
  (
    HoppyP.return . HoppyFHR.fromCppEnum
  ) arg'2 >>= \arg'2' ->
  (startWithPriority' arg'1' arg'2')

terminate :: (QThreadPtr this) => (this) {- ^ this -} -> (HoppyP.IO ())
terminate arg'1 =
  HoppyFHR.withCppPtr (toQThread arg'1) $ \arg'1' ->
  (terminate' arg'1')

wait :: (QThreadPtr this) => (this) {- ^ this -} -> (HoppyP.IO ())
wait arg'1 =
  HoppyFHR.withCppPtr (toQThread arg'1) $ \arg'1' ->
  (wait' arg'1')

waitWithMillis :: (QThreadPtr this) => (this) {- ^ this -} -> (HoppyFC.CULong) -> (HoppyP.IO ())
waitWithMillis arg'1 arg'2 =
  HoppyFHR.withCppPtr (toQThread arg'1) $ \arg'1' ->
  let arg'2' = arg'2 in
  (waitWithMillis' arg'1' arg'2')

currentThread :: (HoppyP.IO QThread)
currentThread =
  HoppyP.fmap QThread
  (currentThread')

idealThreadCount :: (HoppyP.IO HoppyP.Int)
idealThreadCount =
  (
    HoppyP.return . HoppyFHR.coerceIntegral
  ) =<<
  (idealThreadCount')

msleep :: (HoppyFC.CULong) -> (HoppyP.IO ())
msleep arg'1 =
  let arg'1' = arg'1 in
  (msleep' arg'1')

sleep :: (HoppyFC.CULong) -> (HoppyP.IO ())
sleep arg'1 =
  let arg'1' = arg'1 in
  (sleep' arg'1')

usleep :: (HoppyFC.CULong) -> (HoppyP.IO ())
usleep arg'1 =
  let arg'1' = arg'1 in
  (usleep' arg'1')

yieldCurrentThread :: (HoppyP.IO ())
yieldCurrentThread =
  (yieldCurrentThread')

data QThreadConst =
    QThreadConst (HoppyF.Ptr QThreadConst)
  | QThreadConstGc (HoppyF.ForeignPtr ()) (HoppyF.Ptr QThreadConst)
  deriving (HoppyP.Show)

instance HoppyP.Eq QThreadConst where
  x == y = HoppyFHR.toPtr x == HoppyFHR.toPtr y

instance HoppyP.Ord QThreadConst where
  compare x y = HoppyP.compare (HoppyFHR.toPtr x) (HoppyFHR.toPtr y)

castQThreadToConst :: QThread -> QThreadConst
castQThreadToConst (QThread ptr') = QThreadConst $ HoppyF.castPtr ptr'
castQThreadToConst (QThreadGc fptr' ptr') = QThreadConstGc fptr' $ HoppyF.castPtr ptr'

instance HoppyFHR.CppPtr QThreadConst where
  nullptr = QThreadConst HoppyF.nullPtr
  
  withCppPtr (QThreadConst ptr') f' = f' ptr'
  withCppPtr (QThreadConstGc fptr' ptr') f' = HoppyF.withForeignPtr fptr' $ \_ -> f' ptr'
  
  toPtr (QThreadConst ptr') = ptr'
  toPtr (QThreadConstGc _ ptr') = ptr'
  
  touchCppPtr (QThreadConst _) = HoppyP.return ()
  touchCppPtr (QThreadConstGc fptr' _) = HoppyF.touchForeignPtr fptr'

instance HoppyFHR.Deletable QThreadConst where
  delete (QThreadConst ptr') = delete'QThread ptr'
  delete (QThreadConstGc _ _) = HoppyP.fail $ HoppyP.concat ["Deletable.delete: Asked to delete a GC-managed ", "QThreadConst", " object."]
  
  toGc this'@(QThreadConst ptr') = if ptr' == HoppyF.nullPtr then HoppyP.return this' else HoppyP.fmap (HoppyP.flip QThreadConstGc ptr') $ HoppyF.newForeignPtr (HoppyF.castFunPtr deletePtr'QThread :: HoppyF.FunPtr (HoppyF.Ptr () -> HoppyP.IO ())) (HoppyF.castPtr ptr' :: HoppyF.Ptr ())
  toGc this'@(QThreadConstGc {}) = HoppyP.return this'

instance QThreadConstPtr QThreadConst where
  toQThreadConst = HoppyP.id

instance M94.QObjectConstPtr QThreadConst where
  toQObjectConst (QThreadConst ptr') = M94.QObjectConst $ castQThreadToQObject ptr'
  toQObjectConst (QThreadConstGc fptr' ptr') = M94.QObjectConstGc fptr' $ castQThreadToQObject ptr'

data QThread =
    QThread (HoppyF.Ptr QThread)
  | QThreadGc (HoppyF.ForeignPtr ()) (HoppyF.Ptr QThread)
  deriving (HoppyP.Show)

instance HoppyP.Eq QThread where
  x == y = HoppyFHR.toPtr x == HoppyFHR.toPtr y

instance HoppyP.Ord QThread where
  compare x y = HoppyP.compare (HoppyFHR.toPtr x) (HoppyFHR.toPtr y)

castQThreadToNonconst :: QThreadConst -> QThread
castQThreadToNonconst (QThreadConst ptr') = QThread $ HoppyF.castPtr ptr'
castQThreadToNonconst (QThreadConstGc fptr' ptr') = QThreadGc fptr' $ HoppyF.castPtr ptr'

instance HoppyFHR.CppPtr QThread where
  nullptr = QThread HoppyF.nullPtr
  
  withCppPtr (QThread ptr') f' = f' ptr'
  withCppPtr (QThreadGc fptr' ptr') f' = HoppyF.withForeignPtr fptr' $ \_ -> f' ptr'
  
  toPtr (QThread ptr') = ptr'
  toPtr (QThreadGc _ ptr') = ptr'
  
  touchCppPtr (QThread _) = HoppyP.return ()
  touchCppPtr (QThreadGc fptr' _) = HoppyF.touchForeignPtr fptr'

instance HoppyFHR.Deletable QThread where
  delete (QThread ptr') = delete'QThread $ (HoppyF.castPtr ptr' :: HoppyF.Ptr QThreadConst)
  delete (QThreadGc _ _) = HoppyP.fail $ HoppyP.concat ["Deletable.delete: Asked to delete a GC-managed ", "QThread", " object."]
  
  toGc this'@(QThread ptr') = if ptr' == HoppyF.nullPtr then HoppyP.return this' else HoppyP.fmap (HoppyP.flip QThreadGc ptr') $ HoppyF.newForeignPtr (HoppyF.castFunPtr deletePtr'QThread :: HoppyF.FunPtr (HoppyF.Ptr () -> HoppyP.IO ())) (HoppyF.castPtr ptr' :: HoppyF.Ptr ())
  toGc this'@(QThreadGc {}) = HoppyP.return this'

instance QThreadConstPtr QThread where
  toQThreadConst (QThread ptr') = QThreadConst $ (HoppyF.castPtr :: HoppyF.Ptr QThread -> HoppyF.Ptr QThreadConst) ptr'
  toQThreadConst (QThreadGc fptr' ptr') = QThreadConstGc fptr' $ (HoppyF.castPtr :: HoppyF.Ptr QThread -> HoppyF.Ptr QThreadConst) ptr'

instance QThreadPtr QThread where
  toQThread = HoppyP.id

instance M94.QObjectConstPtr QThread where
  toQObjectConst (QThread ptr') = M94.QObjectConst $ castQThreadToQObject $ (HoppyF.castPtr :: HoppyF.Ptr QThread -> HoppyF.Ptr QThreadConst) ptr'
  toQObjectConst (QThreadGc fptr' ptr') = M94.QObjectConstGc fptr' $ castQThreadToQObject $ (HoppyF.castPtr :: HoppyF.Ptr QThread -> HoppyF.Ptr QThreadConst) ptr'

instance M94.QObjectPtr QThread where
  toQObject (QThread ptr') = M94.QObject $ (HoppyF.castPtr :: HoppyF.Ptr M94.QObjectConst -> HoppyF.Ptr M94.QObject) $ castQThreadToQObject $ (HoppyF.castPtr :: HoppyF.Ptr QThread -> HoppyF.Ptr QThreadConst) ptr'
  toQObject (QThreadGc fptr' ptr') = M94.QObjectGc fptr' $ (HoppyF.castPtr :: HoppyF.Ptr M94.QObjectConst -> HoppyF.Ptr M94.QObject) $ castQThreadToQObject $ (HoppyF.castPtr :: HoppyF.Ptr QThread -> HoppyF.Ptr QThreadConst) ptr'

new :: (HoppyP.IO QThread)
new =
  HoppyP.fmap QThread
  (new')

newWithParent :: (M94.QObjectPtr arg'1) => (arg'1) -> (HoppyP.IO QThread)
newWithParent arg'1 =
  HoppyFHR.withCppPtr (M94.toQObject arg'1) $ \arg'1' ->
  HoppyP.fmap QThread
  (newWithParent' arg'1')

class QThreadSuper a where
  downToQThread :: a -> QThread

instance QThreadSuper M94.QObject where
  downToQThread = castQThreadToNonconst . cast' . M94.castQObjectToConst
    where
      cast' (M94.QObjectConst ptr') = QThreadConst $ castQObjectToQThread ptr'
      cast' (M94.QObjectConstGc fptr' ptr') = QThreadConstGc fptr' $ castQObjectToQThread ptr'

class QThreadSuperConst a where
  downToQThreadConst :: a -> QThreadConst

instance QThreadSuperConst M94.QObjectConst where
  downToQThreadConst = cast'
    where
      cast' (M94.QObjectConst ptr') = QThreadConst $ castQObjectToQThread ptr'
      cast' (M94.QObjectConstGc fptr' ptr') = QThreadConstGc fptr' $ castQObjectToQThread ptr'

instance HoppyFHR.Assignable (HoppyF.Ptr (HoppyF.Ptr QThread)) QThread where
  assign ptr' value' = HoppyF.poke ptr' $ HoppyFHR.toPtr value'

instance HoppyFHR.Decodable (HoppyF.Ptr (HoppyF.Ptr QThread)) QThread where
  decode = HoppyP.fmap QThread . HoppyF.peek

data QThreadPriority =
  IdlePriority
  | LowestPriority
  | LowPriority
  | NormalPriority
  | HighPriority
  | HighestPriority
  | TimeCriticalPriority
  | InheritPriority
  | UnknownQThreadPriority (HoppyFC.CInt)
  deriving (HoppyP.Show)

instance HoppyFHR.CppEnum (HoppyFC.CInt) QThreadPriority where
  fromCppEnum IdlePriority = 0
  fromCppEnum LowestPriority = 1
  fromCppEnum LowPriority = 2
  fromCppEnum NormalPriority = 3
  fromCppEnum HighPriority = 4
  fromCppEnum HighestPriority = 5
  fromCppEnum TimeCriticalPriority = 6
  fromCppEnum InheritPriority = 7
  fromCppEnum (UnknownQThreadPriority n) = n
  
  toCppEnum (0) = IdlePriority
  toCppEnum (1) = LowestPriority
  toCppEnum (2) = LowPriority
  toCppEnum (3) = NormalPriority
  toCppEnum (4) = HighPriority
  toCppEnum (5) = HighestPriority
  toCppEnum (6) = TimeCriticalPriority
  toCppEnum (7) = InheritPriority
  toCppEnum n = UnknownQThreadPriority n

instance HoppyP.Eq QThreadPriority where
  x == y = HoppyFHR.fromCppEnum x == HoppyFHR.fromCppEnum y

instance HoppyP.Ord QThreadPriority where
  compare x y = HoppyP.compare (HoppyFHR.fromCppEnum x) (HoppyFHR.fromCppEnum y)