packages feed

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

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

module Graphics.UI.Qtah.Generated.Core.QMetaObject.Connection (
  ConnectionValue (..),
  ConnectionConstPtr (..),
  isValid,
  ConnectionPtr (..),
  aSSIGN,
  ConnectionConst (..),
  castConnectionToConst,
  Connection (..),
  castConnectionToNonconst,
  new,
  newCopy,
  ConnectionSuper (..),
  ConnectionSuperConst (..),
  ) where

import Control.Monad ((>=>))
import qualified Foreign as HoppyF
import qualified Foreign.C as HoppyFC
import qualified Foreign.Hoppy.Runtime as HoppyFHR
import Prelude (($), (.), (/=), (=<<), (==), (>>))
import qualified Prelude as HoppyP

foreign import ccall "genpop__Connection_new" new' ::  HoppyP.IO (HoppyF.Ptr Connection)
foreign import ccall "genpop__Connection_newCopy" newCopy' ::  HoppyF.Ptr ConnectionConst -> HoppyP.IO (HoppyF.Ptr Connection)
foreign import ccall "genpop__Connection_isValid" isValid' ::  HoppyF.Ptr ConnectionConst -> HoppyP.IO HoppyFC.CBool
foreign import ccall "genpop__Connection_ASSIGN" aSSIGN' ::  HoppyF.Ptr Connection -> HoppyF.Ptr ConnectionConst -> HoppyP.IO (HoppyF.Ptr Connection)
foreign import ccall "gendel__Connection" delete'Connection :: HoppyF.Ptr ConnectionConst -> HoppyP.IO ()
foreign import ccall "&gendel__Connection" deletePtr'Connection :: HoppyF.FunPtr (HoppyF.Ptr ConnectionConst -> HoppyP.IO ())

class ConnectionValue a where
  withConnectionPtr :: a -> (ConnectionConst -> HoppyP.IO b) -> HoppyP.IO b

instance {-# OVERLAPPABLE #-} ConnectionConstPtr a => ConnectionValue a where
  withConnectionPtr = HoppyP.flip ($) . toConnectionConst

class (HoppyFHR.CppPtr this) => ConnectionConstPtr this where
  toConnectionConst :: this -> ConnectionConst

isValid :: (ConnectionValue arg'1) => (arg'1) -> (HoppyP.IO HoppyP.Bool)
isValid arg'1 =
  withConnectionPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  (
    (HoppyP.return . (/= 0))
  ) =<<
  (isValid' arg'1')

class (ConnectionConstPtr this) => ConnectionPtr this where
  toConnection :: this -> Connection

aSSIGN :: (ConnectionPtr this, ConnectionValue arg'2) => (this) {- ^ this -} -> (arg'2) -> (HoppyP.IO Connection)
aSSIGN arg'1 arg'2 =
  HoppyFHR.withCppPtr (toConnection arg'1) $ \arg'1' ->
  withConnectionPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  HoppyP.fmap Connection
  (aSSIGN' arg'1' arg'2')

data ConnectionConst =
    ConnectionConst (HoppyF.Ptr ConnectionConst)
  | ConnectionConstGc (HoppyF.ForeignPtr ()) (HoppyF.Ptr ConnectionConst)
  deriving (HoppyP.Show)

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

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

castConnectionToConst :: Connection -> ConnectionConst
castConnectionToConst (Connection ptr') = ConnectionConst $ HoppyF.castPtr ptr'
castConnectionToConst (ConnectionGc fptr' ptr') = ConnectionConstGc fptr' $ HoppyF.castPtr ptr'

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

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

instance HoppyFHR.Copyable ConnectionConst Connection where copy = newCopy

instance ConnectionConstPtr ConnectionConst where
  toConnectionConst = HoppyP.id

data Connection =
    Connection (HoppyF.Ptr Connection)
  | ConnectionGc (HoppyF.ForeignPtr ()) (HoppyF.Ptr Connection)
  deriving (HoppyP.Show)

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

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

castConnectionToNonconst :: ConnectionConst -> Connection
castConnectionToNonconst (ConnectionConst ptr') = Connection $ HoppyF.castPtr ptr'
castConnectionToNonconst (ConnectionConstGc fptr' ptr') = ConnectionGc fptr' $ HoppyF.castPtr ptr'

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

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

instance HoppyFHR.Copyable Connection Connection where copy = newCopy

instance ConnectionConstPtr Connection where
  toConnectionConst (Connection ptr') = ConnectionConst $ (HoppyF.castPtr :: HoppyF.Ptr Connection -> HoppyF.Ptr ConnectionConst) ptr'
  toConnectionConst (ConnectionGc fptr' ptr') = ConnectionConstGc fptr' $ (HoppyF.castPtr :: HoppyF.Ptr Connection -> HoppyF.Ptr ConnectionConst) ptr'

instance ConnectionPtr Connection where
  toConnection = HoppyP.id

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

newCopy :: (ConnectionValue arg'1) => (arg'1) -> (HoppyP.IO Connection)
newCopy arg'1 =
  withConnectionPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  HoppyP.fmap Connection
  (newCopy' arg'1')

class ConnectionSuper a where
  downToConnection :: a -> Connection


class ConnectionSuperConst a where
  downToConnectionConst :: a -> ConnectionConst


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

instance ConnectionValue a => HoppyFHR.Assignable Connection a where
  assign x' y' = aSSIGN x' y' >> HoppyP.return ()

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

instance HoppyFHR.Decodable Connection (Connection) where
  decode = HoppyFHR.decode . toConnectionConst

instance HoppyFHR.Decodable ConnectionConst (Connection) where
  decode =
    HoppyFHR.copy >=> HoppyFHR.toGc