{-# LANGUAGE TypeApplications #-}
#if (MIN_VERSION_haskell_gi_overloading(1,0,0) && !defined(__HADDOCK_VERSION__))
#define ENABLE_OVERLOADING
#endif
module GI.GLib.Structs.Timer
    ( 
    Timer(..)                               ,
 
#if defined(ENABLE_OVERLOADING)
    ResolveTimerMethod                      ,
#endif
#if defined(ENABLE_OVERLOADING)
    TimerContinueMethodInfo                 ,
#endif
    timerContinue                           ,
#if defined(ENABLE_OVERLOADING)
    TimerDestroyMethodInfo                  ,
#endif
    timerDestroy                            ,
#if defined(ENABLE_OVERLOADING)
    TimerElapsedMethodInfo                  ,
#endif
    timerElapsed                            ,
#if defined(ENABLE_OVERLOADING)
    TimerIsActiveMethodInfo                 ,
#endif
    timerIsActive                           ,
#if defined(ENABLE_OVERLOADING)
    TimerResetMethodInfo                    ,
#endif
    timerReset                              ,
#if defined(ENABLE_OVERLOADING)
    TimerStartMethodInfo                    ,
#endif
    timerStart                              ,
#if defined(ENABLE_OVERLOADING)
    TimerStopMethodInfo                     ,
#endif
    timerStop                               ,
    ) where
import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P
import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GArray as B.GArray
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GHashTable as B.GHT
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.GI.Base.Signals as B.Signals
import qualified Control.Monad.IO.Class as MIO
import qualified Data.Coerce as Coerce
import qualified Data.Text as T
import qualified Data.Kind as DK
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL
import qualified GHC.Records as R
import qualified Data.Word as DW
import qualified Data.Int as DI
import qualified System.Posix.Types as SPT
import qualified Foreign.C.Types as FCT
#if MIN_VERSION_base(4,18,0)
#else
#endif
newtype Timer = Timer (SP.ManagedPtr Timer)
    deriving (Timer -> Timer -> Bool
(Timer -> Timer -> Bool) -> (Timer -> Timer -> Bool) -> Eq Timer
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Timer -> Timer -> Bool
== :: Timer -> Timer -> Bool
$c/= :: Timer -> Timer -> Bool
/= :: Timer -> Timer -> Bool
Eq)
instance SP.ManagedPtrNewtype Timer where
    toManagedPtr :: Timer -> ManagedPtr Timer
toManagedPtr (Timer ManagedPtr Timer
p) = ManagedPtr Timer
p
instance BoxedPtr Timer where
    boxedPtrCopy :: Timer -> IO Timer
boxedPtrCopy = Timer -> IO Timer
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return
    boxedPtrFree :: Timer -> IO ()
boxedPtrFree = \Timer
_x -> () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList Timer
type instance O.AttributeList Timer = TimerAttributeList
type TimerAttributeList = ('[ ] :: [(Symbol, DK.Type)])
#endif
foreign import ccall "g_timer_continue" g_timer_continue :: 
    Ptr Timer ->                            
    IO ()
timerContinue ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    Timer
    
    -> m ()
timerContinue :: forall (m :: * -> *). (HasCallStack, MonadIO m) => Timer -> m ()
timerContinue Timer
timer = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr Timer
timer' <- Timer -> IO (Ptr Timer)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr Timer
timer
    Ptr Timer -> IO ()
g_timer_continue Ptr Timer
timer'
    Timer -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr Timer
timer
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
#if defined(ENABLE_OVERLOADING)
data TimerContinueMethodInfo
instance (signature ~ (m ()), MonadIO m) => O.OverloadedMethod TimerContinueMethodInfo Timer signature where
    overloadedMethod = timerContinue
instance O.OverloadedMethodInfo TimerContinueMethodInfo Timer where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GLib.Structs.Timer.timerContinue",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-glib-2.0.30/docs/GI-GLib-Structs-Timer.html#v:timerContinue"
        })
#endif
foreign import ccall "g_timer_destroy" g_timer_destroy :: 
    Ptr Timer ->                            
    IO ()
timerDestroy ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    Timer
    
    -> m ()
timerDestroy :: forall (m :: * -> *). (HasCallStack, MonadIO m) => Timer -> m ()
timerDestroy Timer
timer = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr Timer
timer' <- Timer -> IO (Ptr Timer)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr Timer
timer
    Ptr Timer -> IO ()
g_timer_destroy Ptr Timer
timer'
    Timer -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr Timer
timer
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
#if defined(ENABLE_OVERLOADING)
data TimerDestroyMethodInfo
instance (signature ~ (m ()), MonadIO m) => O.OverloadedMethod TimerDestroyMethodInfo Timer signature where
    overloadedMethod = timerDestroy
instance O.OverloadedMethodInfo TimerDestroyMethodInfo Timer where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GLib.Structs.Timer.timerDestroy",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-glib-2.0.30/docs/GI-GLib-Structs-Timer.html#v:timerDestroy"
        })
#endif
foreign import ccall "g_timer_elapsed" g_timer_elapsed :: 
    Ptr Timer ->                            
    FCT.CULong ->                           
    IO CDouble
timerElapsed ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    Timer
    
    -> FCT.CULong
    
    
    
    -> m Double
    
    
timerElapsed :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
Timer -> CULong -> m Double
timerElapsed Timer
timer CULong
microseconds = IO Double -> m Double
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Double -> m Double) -> IO Double -> m Double
forall a b. (a -> b) -> a -> b
$ do
    Ptr Timer
timer' <- Timer -> IO (Ptr Timer)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr Timer
timer
    CDouble
result <- Ptr Timer -> CULong -> IO CDouble
g_timer_elapsed Ptr Timer
timer' CULong
microseconds
    let result' :: Double
result' = CDouble -> Double
forall a b. (Real a, Fractional b) => a -> b
realToFrac CDouble
result
    Timer -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr Timer
timer
    Double -> IO Double
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Double
result'
#if defined(ENABLE_OVERLOADING)
data TimerElapsedMethodInfo
instance (signature ~ (FCT.CULong -> m Double), MonadIO m) => O.OverloadedMethod TimerElapsedMethodInfo Timer signature where
    overloadedMethod = timerElapsed
instance O.OverloadedMethodInfo TimerElapsedMethodInfo Timer where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GLib.Structs.Timer.timerElapsed",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-glib-2.0.30/docs/GI-GLib-Structs-Timer.html#v:timerElapsed"
        })
#endif
foreign import ccall "g_timer_is_active" g_timer_is_active :: 
    Ptr Timer ->                            
    IO CInt
timerIsActive ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    Timer
    
    -> m Bool
    
timerIsActive :: forall (m :: * -> *). (HasCallStack, MonadIO m) => Timer -> m Bool
timerIsActive Timer
timer = IO Bool -> m Bool
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Bool -> m Bool) -> IO Bool -> m Bool
forall a b. (a -> b) -> a -> b
$ do
    Ptr Timer
timer' <- Timer -> IO (Ptr Timer)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr Timer
timer
    CInt
result <- Ptr Timer -> IO CInt
g_timer_is_active Ptr Timer
timer'
    let result' :: Bool
result' = (CInt -> CInt -> Bool
forall a. Eq a => a -> a -> Bool
/= CInt
0) CInt
result
    Timer -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr Timer
timer
    Bool -> IO Bool
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Bool
result'
#if defined(ENABLE_OVERLOADING)
data TimerIsActiveMethodInfo
instance (signature ~ (m Bool), MonadIO m) => O.OverloadedMethod TimerIsActiveMethodInfo Timer signature where
    overloadedMethod = timerIsActive
instance O.OverloadedMethodInfo TimerIsActiveMethodInfo Timer where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GLib.Structs.Timer.timerIsActive",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-glib-2.0.30/docs/GI-GLib-Structs-Timer.html#v:timerIsActive"
        })
#endif
foreign import ccall "g_timer_reset" g_timer_reset :: 
    Ptr Timer ->                            
    IO ()
timerReset ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    Timer
    
    -> m ()
timerReset :: forall (m :: * -> *). (HasCallStack, MonadIO m) => Timer -> m ()
timerReset Timer
timer = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr Timer
timer' <- Timer -> IO (Ptr Timer)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr Timer
timer
    Ptr Timer -> IO ()
g_timer_reset Ptr Timer
timer'
    Timer -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr Timer
timer
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
#if defined(ENABLE_OVERLOADING)
data TimerResetMethodInfo
instance (signature ~ (m ()), MonadIO m) => O.OverloadedMethod TimerResetMethodInfo Timer signature where
    overloadedMethod = timerReset
instance O.OverloadedMethodInfo TimerResetMethodInfo Timer where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GLib.Structs.Timer.timerReset",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-glib-2.0.30/docs/GI-GLib-Structs-Timer.html#v:timerReset"
        })
#endif
foreign import ccall "g_timer_start" g_timer_start :: 
    Ptr Timer ->                            
    IO ()
timerStart ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    Timer
    
    -> m ()
timerStart :: forall (m :: * -> *). (HasCallStack, MonadIO m) => Timer -> m ()
timerStart Timer
timer = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr Timer
timer' <- Timer -> IO (Ptr Timer)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr Timer
timer
    Ptr Timer -> IO ()
g_timer_start Ptr Timer
timer'
    Timer -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr Timer
timer
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
#if defined(ENABLE_OVERLOADING)
data TimerStartMethodInfo
instance (signature ~ (m ()), MonadIO m) => O.OverloadedMethod TimerStartMethodInfo Timer signature where
    overloadedMethod = timerStart
instance O.OverloadedMethodInfo TimerStartMethodInfo Timer where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GLib.Structs.Timer.timerStart",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-glib-2.0.30/docs/GI-GLib-Structs-Timer.html#v:timerStart"
        })
#endif
foreign import ccall "g_timer_stop" g_timer_stop :: 
    Ptr Timer ->                            
    IO ()
timerStop ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    Timer
    
    -> m ()
timerStop :: forall (m :: * -> *). (HasCallStack, MonadIO m) => Timer -> m ()
timerStop Timer
timer = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr Timer
timer' <- Timer -> IO (Ptr Timer)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr Timer
timer
    Ptr Timer -> IO ()
g_timer_stop Ptr Timer
timer'
    Timer -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr Timer
timer
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
#if defined(ENABLE_OVERLOADING)
data TimerStopMethodInfo
instance (signature ~ (m ()), MonadIO m) => O.OverloadedMethod TimerStopMethodInfo Timer signature where
    overloadedMethod = timerStop
instance O.OverloadedMethodInfo TimerStopMethodInfo Timer where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GLib.Structs.Timer.timerStop",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-glib-2.0.30/docs/GI-GLib-Structs-Timer.html#v:timerStop"
        })
#endif
#if defined(ENABLE_OVERLOADING)
type family ResolveTimerMethod (t :: Symbol) (o :: DK.Type) :: DK.Type where
    ResolveTimerMethod "continue" o = TimerContinueMethodInfo
    ResolveTimerMethod "destroy" o = TimerDestroyMethodInfo
    ResolveTimerMethod "elapsed" o = TimerElapsedMethodInfo
    ResolveTimerMethod "isActive" o = TimerIsActiveMethodInfo
    ResolveTimerMethod "reset" o = TimerResetMethodInfo
    ResolveTimerMethod "start" o = TimerStartMethodInfo
    ResolveTimerMethod "stop" o = TimerStopMethodInfo
    ResolveTimerMethod l o = O.MethodResolutionFailed l o
instance (info ~ ResolveTimerMethod t Timer, O.OverloadedMethod info Timer p) => OL.IsLabel t (Timer -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod @info
#else
    fromLabel _ = O.overloadedMethod @info
#endif
#if MIN_VERSION_base(4,13,0)
instance (info ~ ResolveTimerMethod t Timer, O.OverloadedMethod info Timer p, R.HasField t Timer p) => R.HasField t Timer p where
    getField = O.overloadedMethod @info
#endif
instance (info ~ ResolveTimerMethod t Timer, O.OverloadedMethodInfo info Timer) => OL.IsLabel t (O.MethodProxy info Timer) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.MethodProxy
#else
    fromLabel _ = O.MethodProxy
#endif
#endif