{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE ExplicitForAll #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UnboxedTuples #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE NoFieldSelectors #-}
{-# LANGUAGE NoImplicitPrelude #-}

-- | SDL provides time management functionality. It is useful for dealing with (usually) small durations of time.
--
--     This is not to be confused with /calendar time/ management, which is provided by [CategoryTime](CategoryTime).
--
--     This category covers measuring time elapsed (@SDL_GetTicks()@, @SDL_GetPerformanceCounter()@), putting a thread to sleep for a certain amount of time (@SDL_Delay()@, @SDL_DelayNS()@, @SDL_DelayPrecise()@), and firing a callback function after a certain amount of time has elapsed (@SDL_AddTimer()@, etc).
--
--     There are also useful macros to convert between time units, like @SDL_SECONDS_TO_NS()@ and such. Number of milliseconds in a second.
--
--     This is always 1000.
--
--     @since 3.2.0
module SDL3.Sys.Bindgen.Timer (
  SDL3.Sys.Bindgen.Timer.sDL_MS_PER_SECOND,
  SDL3.Sys.Bindgen.Timer.sDL_US_PER_SECOND,
  SDL3.Sys.Bindgen.Timer.sDL_NS_PER_SECOND,
  SDL3.Sys.Bindgen.Timer.sDL_NS_PER_MS,
  SDL3.Sys.Bindgen.Timer.sDL_NS_PER_US,
  SDL3.Sys.Bindgen.Timer.sDL_NS_TO_SECONDS,
  SDL3.Sys.Bindgen.Timer.sDL_NS_TO_MS,
  SDL3.Sys.Bindgen.Timer.sDL_NS_TO_US,
  SDL3.Sys.Bindgen.Timer.SDL_TimerID (..),
  SDL3.Sys.Bindgen.Timer.SDL_TimerCallback_Aux (..),
  SDL3.Sys.Bindgen.Timer.SDL_TimerCallback (..),
  SDL3.Sys.Bindgen.Timer.SDL_NSTimerCallback_Aux (..),
  SDL3.Sys.Bindgen.Timer.SDL_NSTimerCallback (..),
)
where

import Prelude (Bounded, Enum, Eq, IO, Integral, Num, Ord, Read, Real, Show, fmap, type (~))

import C.Expr.HostPlatform qualified
import HsBindgen.Runtime.HasCField qualified as HasCField
import HsBindgen.Runtime.LibC qualified
import HsBindgen.Runtime.Marshal qualified as Marshal
import HsBindgen.Runtime.Support qualified as BG
import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
import SDL3.Sys.Bindgen.Stdinc qualified

-- | [C declaration]: @macro SDL_MS_PER_SECOND@, defined at @SDL3\/SDL_timer.h 62:9@
sDL_MS_PER_SECOND :: BG.CInt
sDL_MS_PER_SECOND :: CInt
sDL_MS_PER_SECOND = (CInt
1000 :: BG.CInt)

-- | Number of microseconds in a second.
--
--     This is always 1000000.
--
--     @since 3.2.0
--
--     [C declaration]: @macro SDL_US_PER_SECOND@, defined at @SDL3\/SDL_timer.h 71:9@
sDL_US_PER_SECOND :: BG.CInt
sDL_US_PER_SECOND :: CInt
sDL_US_PER_SECOND = (CInt
1000000 :: BG.CInt)

-- | Number of nanoseconds in a second.
--
--     This is always 1000000000.
--
--     @since 3.2.0
--
--     [C declaration]: @macro SDL_NS_PER_SECOND@, defined at @SDL3\/SDL_timer.h 80:9@
sDL_NS_PER_SECOND :: BG.CLLong
sDL_NS_PER_SECOND :: CLLong
sDL_NS_PER_SECOND = (CLLong
1000000000 :: BG.CLLong)

-- | Number of nanoseconds in a millisecond.
--
--     This is always 1000000.
--
--     @since 3.2.0
--
--     [C declaration]: @macro SDL_NS_PER_MS@, defined at @SDL3\/SDL_timer.h 89:9@
sDL_NS_PER_MS :: BG.CInt
sDL_NS_PER_MS :: CInt
sDL_NS_PER_MS = (CInt
1000000 :: BG.CInt)

-- | Number of nanoseconds in a microsecond.
--
--     This is always 1000.
--
--     @since 3.2.0
--
--     [C declaration]: @macro SDL_NS_PER_US@, defined at @SDL3\/SDL_timer.h 98:9@
sDL_NS_PER_US :: BG.CInt
sDL_NS_PER_US :: CInt
sDL_NS_PER_US = (CInt
1000 :: BG.CInt)

-- | Convert nanoseconds to seconds.
--
--     This performs a division, so the results can be dramatically different if @NS@ is an integer or floating point value.
--
--     [@NS@]: the number of nanoseconds to convert.
--
--     [Returns]: NS, expressed in seconds.
--
--     [Thread safety]: It is safe to call this macro from any thread.
--
--     @since 3.2.0
--
--     [C declaration]: @macro SDL_NS_TO_SECONDS@, defined at @SDL3\/SDL_timer.h 127:9@
sDL_NS_TO_SECONDS
  :: forall a0. (C.Expr.HostPlatform.Div a0 BG.CLLong) => a0 -> C.Expr.HostPlatform.DivRes a0 BG.CLLong
sDL_NS_TO_SECONDS :: forall a0. Div a0 CLLong => a0 -> DivRes a0 CLLong
sDL_NS_TO_SECONDS =
  \a0
nS0 -> a0 -> CLLong -> DivRes a0 CLLong
forall a b. Div a b => a -> b -> DivRes a b
(C.Expr.HostPlatform./) a0
nS0 CLLong
sDL_NS_PER_SECOND

-- | Convert nanoseconds to milliseconds.
--
--     This performs a division, so the results can be dramatically different if @NS@ is an integer or floating point value.
--
--     [@NS@]: the number of nanoseconds to convert.
--
--     [Returns]: NS, expressed in milliseconds.
--
--     [Thread safety]: It is safe to call this macro from any thread.
--
--     @since 3.2.0
--
--     [C declaration]: @macro SDL_NS_TO_MS@, defined at @SDL3\/SDL_timer.h 156:9@
sDL_NS_TO_MS
  :: forall a0. (C.Expr.HostPlatform.Div a0 BG.CInt) => a0 -> C.Expr.HostPlatform.DivRes a0 BG.CInt
sDL_NS_TO_MS :: forall a0. Div a0 CInt => a0 -> DivRes a0 CInt
sDL_NS_TO_MS =
  \a0
nS0 -> a0 -> CInt -> DivRes a0 CInt
forall a b. Div a b => a -> b -> DivRes a b
(C.Expr.HostPlatform./) a0
nS0 CInt
sDL_NS_PER_MS

-- | Convert nanoseconds to microseconds.
--
--     This performs a division, so the results can be dramatically different if @NS@ is an integer or floating point value.
--
--     [@NS@]: the number of nanoseconds to convert.
--
--     [Returns]: NS, expressed in microseconds.
--
--     [Thread safety]: It is safe to call this macro from any thread.
--
--     @since 3.2.0
--
--     [C declaration]: @macro SDL_NS_TO_US@, defined at @SDL3\/SDL_timer.h 185:9@
sDL_NS_TO_US
  :: forall a0. (C.Expr.HostPlatform.Div a0 BG.CInt) => a0 -> C.Expr.HostPlatform.DivRes a0 BG.CInt
sDL_NS_TO_US :: forall a0. Div a0 CInt => a0 -> DivRes a0 CInt
sDL_NS_TO_US =
  \a0
nS0 -> a0 -> CInt -> DivRes a0 CInt
forall a b. Div a b => a -> b -> DivRes a b
(C.Expr.HostPlatform./) a0
nS0 CInt
sDL_NS_PER_US

-- | Definition of the timer ID type.
--
--     @since 3.2.0
--
--     [C declaration]: @SDL_TimerID@, defined at @SDL3\/SDL_timer.h 306:16@
newtype SDL_TimerID = SDL_TimerID
  { SDL_TimerID -> Uint32
unwrap :: SDL3.Sys.Bindgen.Stdinc.Uint32
  }
  deriving stock ((forall x. SDL_TimerID -> Rep SDL_TimerID x)
-> (forall x. Rep SDL_TimerID x -> SDL_TimerID)
-> Generic SDL_TimerID
forall x. Rep SDL_TimerID x -> SDL_TimerID
forall x. SDL_TimerID -> Rep SDL_TimerID x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. SDL_TimerID -> Rep SDL_TimerID x
from :: forall x. SDL_TimerID -> Rep SDL_TimerID x
$cto :: forall x. Rep SDL_TimerID x -> SDL_TimerID
to :: forall x. Rep SDL_TimerID x -> SDL_TimerID
BG.Generic, SDL_TimerID -> SDL_TimerID -> Bool
(SDL_TimerID -> SDL_TimerID -> Bool)
-> (SDL_TimerID -> SDL_TimerID -> Bool) -> Eq SDL_TimerID
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SDL_TimerID -> SDL_TimerID -> Bool
== :: SDL_TimerID -> SDL_TimerID -> Bool
$c/= :: SDL_TimerID -> SDL_TimerID -> Bool
/= :: SDL_TimerID -> SDL_TimerID -> Bool
Eq, Eq SDL_TimerID
Eq SDL_TimerID =>
(SDL_TimerID -> SDL_TimerID -> Ordering)
-> (SDL_TimerID -> SDL_TimerID -> Bool)
-> (SDL_TimerID -> SDL_TimerID -> Bool)
-> (SDL_TimerID -> SDL_TimerID -> Bool)
-> (SDL_TimerID -> SDL_TimerID -> Bool)
-> (SDL_TimerID -> SDL_TimerID -> SDL_TimerID)
-> (SDL_TimerID -> SDL_TimerID -> SDL_TimerID)
-> Ord SDL_TimerID
SDL_TimerID -> SDL_TimerID -> Bool
SDL_TimerID -> SDL_TimerID -> Ordering
SDL_TimerID -> SDL_TimerID -> SDL_TimerID
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: SDL_TimerID -> SDL_TimerID -> Ordering
compare :: SDL_TimerID -> SDL_TimerID -> Ordering
$c< :: SDL_TimerID -> SDL_TimerID -> Bool
< :: SDL_TimerID -> SDL_TimerID -> Bool
$c<= :: SDL_TimerID -> SDL_TimerID -> Bool
<= :: SDL_TimerID -> SDL_TimerID -> Bool
$c> :: SDL_TimerID -> SDL_TimerID -> Bool
> :: SDL_TimerID -> SDL_TimerID -> Bool
$c>= :: SDL_TimerID -> SDL_TimerID -> Bool
>= :: SDL_TimerID -> SDL_TimerID -> Bool
$cmax :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
max :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
$cmin :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
min :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
Ord, ReadPrec [SDL_TimerID]
ReadPrec SDL_TimerID
Int -> ReadS SDL_TimerID
ReadS [SDL_TimerID]
(Int -> ReadS SDL_TimerID)
-> ReadS [SDL_TimerID]
-> ReadPrec SDL_TimerID
-> ReadPrec [SDL_TimerID]
-> Read SDL_TimerID
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS SDL_TimerID
readsPrec :: Int -> ReadS SDL_TimerID
$creadList :: ReadS [SDL_TimerID]
readList :: ReadS [SDL_TimerID]
$creadPrec :: ReadPrec SDL_TimerID
readPrec :: ReadPrec SDL_TimerID
$creadListPrec :: ReadPrec [SDL_TimerID]
readListPrec :: ReadPrec [SDL_TimerID]
Read, Int -> SDL_TimerID -> ShowS
[SDL_TimerID] -> ShowS
SDL_TimerID -> String
(Int -> SDL_TimerID -> ShowS)
-> (SDL_TimerID -> String)
-> ([SDL_TimerID] -> ShowS)
-> Show SDL_TimerID
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SDL_TimerID -> ShowS
showsPrec :: Int -> SDL_TimerID -> ShowS
$cshow :: SDL_TimerID -> String
show :: SDL_TimerID -> String
$cshowList :: [SDL_TimerID] -> ShowS
showList :: [SDL_TimerID] -> ShowS
Show)
  deriving newtype
    ( Word64 -> Int -> SDL_TimerID
SDL_TimerID -> Int -> Word64
(SDL_TimerID -> Int -> Word64)
-> (Word64 -> Int -> SDL_TimerID) -> Bitfield SDL_TimerID
forall a.
(a -> Int -> Word64) -> (Word64 -> Int -> a) -> Bitfield a
$cnarrow :: SDL_TimerID -> Int -> Word64
narrow :: SDL_TimerID -> Int -> Word64
$cextend :: Word64 -> Int -> SDL_TimerID
extend :: Word64 -> Int -> SDL_TimerID
BG.Bitfield
    , Eq SDL_TimerID
SDL_TimerID
Eq SDL_TimerID =>
(SDL_TimerID -> SDL_TimerID -> SDL_TimerID)
-> (SDL_TimerID -> SDL_TimerID -> SDL_TimerID)
-> (SDL_TimerID -> SDL_TimerID -> SDL_TimerID)
-> (SDL_TimerID -> SDL_TimerID)
-> (SDL_TimerID -> Int -> SDL_TimerID)
-> (SDL_TimerID -> Int -> SDL_TimerID)
-> SDL_TimerID
-> (Int -> SDL_TimerID)
-> (SDL_TimerID -> Int -> SDL_TimerID)
-> (SDL_TimerID -> Int -> SDL_TimerID)
-> (SDL_TimerID -> Int -> SDL_TimerID)
-> (SDL_TimerID -> Int -> Bool)
-> (SDL_TimerID -> Maybe Int)
-> (SDL_TimerID -> Int)
-> (SDL_TimerID -> Bool)
-> (SDL_TimerID -> Int -> SDL_TimerID)
-> (SDL_TimerID -> Int -> SDL_TimerID)
-> (SDL_TimerID -> Int -> SDL_TimerID)
-> (SDL_TimerID -> Int -> SDL_TimerID)
-> (SDL_TimerID -> Int -> SDL_TimerID)
-> (SDL_TimerID -> Int -> SDL_TimerID)
-> (SDL_TimerID -> Int)
-> Bits SDL_TimerID
Int -> SDL_TimerID
SDL_TimerID -> Bool
SDL_TimerID -> Int
SDL_TimerID -> Maybe Int
SDL_TimerID -> SDL_TimerID
SDL_TimerID -> Int -> Bool
SDL_TimerID -> Int -> SDL_TimerID
SDL_TimerID -> SDL_TimerID -> SDL_TimerID
forall a.
Eq a =>
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
$c.&. :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
.&. :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
$c.|. :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
.|. :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
$cxor :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
xor :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
$ccomplement :: SDL_TimerID -> SDL_TimerID
complement :: SDL_TimerID -> SDL_TimerID
$cshift :: SDL_TimerID -> Int -> SDL_TimerID
shift :: SDL_TimerID -> Int -> SDL_TimerID
$crotate :: SDL_TimerID -> Int -> SDL_TimerID
rotate :: SDL_TimerID -> Int -> SDL_TimerID
$czeroBits :: SDL_TimerID
zeroBits :: SDL_TimerID
$cbit :: Int -> SDL_TimerID
bit :: Int -> SDL_TimerID
$csetBit :: SDL_TimerID -> Int -> SDL_TimerID
setBit :: SDL_TimerID -> Int -> SDL_TimerID
$cclearBit :: SDL_TimerID -> Int -> SDL_TimerID
clearBit :: SDL_TimerID -> Int -> SDL_TimerID
$ccomplementBit :: SDL_TimerID -> Int -> SDL_TimerID
complementBit :: SDL_TimerID -> Int -> SDL_TimerID
$ctestBit :: SDL_TimerID -> Int -> Bool
testBit :: SDL_TimerID -> Int -> Bool
$cbitSizeMaybe :: SDL_TimerID -> Maybe Int
bitSizeMaybe :: SDL_TimerID -> Maybe Int
$cbitSize :: SDL_TimerID -> Int
bitSize :: SDL_TimerID -> Int
$cisSigned :: SDL_TimerID -> Bool
isSigned :: SDL_TimerID -> Bool
$cshiftL :: SDL_TimerID -> Int -> SDL_TimerID
shiftL :: SDL_TimerID -> Int -> SDL_TimerID
$cunsafeShiftL :: SDL_TimerID -> Int -> SDL_TimerID
unsafeShiftL :: SDL_TimerID -> Int -> SDL_TimerID
$cshiftR :: SDL_TimerID -> Int -> SDL_TimerID
shiftR :: SDL_TimerID -> Int -> SDL_TimerID
$cunsafeShiftR :: SDL_TimerID -> Int -> SDL_TimerID
unsafeShiftR :: SDL_TimerID -> Int -> SDL_TimerID
$crotateL :: SDL_TimerID -> Int -> SDL_TimerID
rotateL :: SDL_TimerID -> Int -> SDL_TimerID
$crotateR :: SDL_TimerID -> Int -> SDL_TimerID
rotateR :: SDL_TimerID -> Int -> SDL_TimerID
$cpopCount :: SDL_TimerID -> Int
popCount :: SDL_TimerID -> Int
BG.Bits
    , Bits SDL_TimerID
Bits SDL_TimerID =>
(SDL_TimerID -> Int)
-> (SDL_TimerID -> Int)
-> (SDL_TimerID -> Int)
-> FiniteBits SDL_TimerID
SDL_TimerID -> Int
forall b.
Bits b =>
(b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
$cfiniteBitSize :: SDL_TimerID -> Int
finiteBitSize :: SDL_TimerID -> Int
$ccountLeadingZeros :: SDL_TimerID -> Int
countLeadingZeros :: SDL_TimerID -> Int
$ccountTrailingZeros :: SDL_TimerID -> Int
countTrailingZeros :: SDL_TimerID -> Int
BG.FiniteBits
    , FFIType SDL_TimerID -> SDL_TimerID
SDL_TimerID -> FFIType SDL_TimerID
(SDL_TimerID -> FFIType SDL_TimerID)
-> (FFIType SDL_TimerID -> SDL_TimerID) -> HasFFIType SDL_TimerID
forall a. (a -> FFIType a) -> (FFIType a -> a) -> HasFFIType a
$ctoFFIType :: SDL_TimerID -> FFIType SDL_TimerID
toFFIType :: SDL_TimerID -> FFIType SDL_TimerID
$cfromFFIType :: FFIType SDL_TimerID -> SDL_TimerID
fromFFIType :: FFIType SDL_TimerID -> SDL_TimerID
BG.HasFFIType
    , Ord SDL_TimerID
Ord SDL_TimerID =>
((SDL_TimerID, SDL_TimerID) -> [SDL_TimerID])
-> ((SDL_TimerID, SDL_TimerID) -> SDL_TimerID -> Int)
-> ((SDL_TimerID, SDL_TimerID) -> SDL_TimerID -> Int)
-> ((SDL_TimerID, SDL_TimerID) -> SDL_TimerID -> Bool)
-> ((SDL_TimerID, SDL_TimerID) -> Int)
-> ((SDL_TimerID, SDL_TimerID) -> Int)
-> Ix SDL_TimerID
(SDL_TimerID, SDL_TimerID) -> Int
(SDL_TimerID, SDL_TimerID) -> [SDL_TimerID]
(SDL_TimerID, SDL_TimerID) -> SDL_TimerID -> Bool
(SDL_TimerID, SDL_TimerID) -> SDL_TimerID -> Int
forall a.
Ord a =>
((a, a) -> [a])
-> ((a, a) -> a -> Int)
-> ((a, a) -> a -> Int)
-> ((a, a) -> a -> Bool)
-> ((a, a) -> Int)
-> ((a, a) -> Int)
-> Ix a
$crange :: (SDL_TimerID, SDL_TimerID) -> [SDL_TimerID]
range :: (SDL_TimerID, SDL_TimerID) -> [SDL_TimerID]
$cindex :: (SDL_TimerID, SDL_TimerID) -> SDL_TimerID -> Int
index :: (SDL_TimerID, SDL_TimerID) -> SDL_TimerID -> Int
$cunsafeIndex :: (SDL_TimerID, SDL_TimerID) -> SDL_TimerID -> Int
unsafeIndex :: (SDL_TimerID, SDL_TimerID) -> SDL_TimerID -> Int
$cinRange :: (SDL_TimerID, SDL_TimerID) -> SDL_TimerID -> Bool
inRange :: (SDL_TimerID, SDL_TimerID) -> SDL_TimerID -> Bool
$crangeSize :: (SDL_TimerID, SDL_TimerID) -> Int
rangeSize :: (SDL_TimerID, SDL_TimerID) -> Int
$cunsafeRangeSize :: (SDL_TimerID, SDL_TimerID) -> Int
unsafeRangeSize :: (SDL_TimerID, SDL_TimerID) -> Int
BG.Ix
    , Addr# -> Int# -> SDL_TimerID
ByteArray# -> Int# -> SDL_TimerID
Proxy SDL_TimerID -> Int#
SDL_TimerID -> Int#
(Proxy SDL_TimerID -> Int#)
-> (SDL_TimerID -> Int#)
-> (Proxy SDL_TimerID -> Int#)
-> (SDL_TimerID -> Int#)
-> (ByteArray# -> Int# -> SDL_TimerID)
-> (forall s.
    MutableByteArray# s
    -> Int# -> State# s -> (# State# s, SDL_TimerID #))
-> (forall s.
    MutableByteArray# s -> Int# -> SDL_TimerID -> State# s -> State# s)
-> (forall s.
    MutableByteArray# s
    -> Int# -> Int# -> SDL_TimerID -> State# s -> State# s)
-> (Addr# -> Int# -> SDL_TimerID)
-> (forall s.
    Addr# -> Int# -> State# s -> (# State# s, SDL_TimerID #))
-> (forall s. Addr# -> Int# -> SDL_TimerID -> State# s -> State# s)
-> (forall s.
    Addr# -> Int# -> Int# -> SDL_TimerID -> State# s -> State# s)
-> Prim SDL_TimerID
forall s.
Addr# -> Int# -> Int# -> SDL_TimerID -> State# s -> State# s
forall s. Addr# -> Int# -> State# s -> (# State# s, SDL_TimerID #)
forall s. Addr# -> Int# -> SDL_TimerID -> State# s -> State# s
forall s.
MutableByteArray# s
-> Int# -> Int# -> SDL_TimerID -> State# s -> State# s
forall s.
MutableByteArray# s
-> Int# -> State# s -> (# State# s, SDL_TimerID #)
forall s.
MutableByteArray# s -> Int# -> SDL_TimerID -> State# s -> State# s
forall a.
(Proxy a -> Int#)
-> (a -> Int#)
-> (Proxy a -> Int#)
-> (a -> Int#)
-> (ByteArray# -> Int# -> a)
-> (forall s.
    MutableByteArray# s -> Int# -> State# s -> (# State# s, a #))
-> (forall s.
    MutableByteArray# s -> Int# -> a -> State# s -> State# s)
-> (forall s.
    MutableByteArray# s -> Int# -> Int# -> a -> State# s -> State# s)
-> (Addr# -> Int# -> a)
-> (forall s. Addr# -> Int# -> State# s -> (# State# s, a #))
-> (forall s. Addr# -> Int# -> a -> State# s -> State# s)
-> (forall s. Addr# -> Int# -> Int# -> a -> State# s -> State# s)
-> Prim a
$csizeOfType# :: Proxy SDL_TimerID -> Int#
sizeOfType# :: Proxy SDL_TimerID -> Int#
$csizeOf# :: SDL_TimerID -> Int#
sizeOf# :: SDL_TimerID -> Int#
$calignmentOfType# :: Proxy SDL_TimerID -> Int#
alignmentOfType# :: Proxy SDL_TimerID -> Int#
$calignment# :: SDL_TimerID -> Int#
alignment# :: SDL_TimerID -> Int#
$cindexByteArray# :: ByteArray# -> Int# -> SDL_TimerID
indexByteArray# :: ByteArray# -> Int# -> SDL_TimerID
$creadByteArray# :: forall s.
MutableByteArray# s
-> Int# -> State# s -> (# State# s, SDL_TimerID #)
readByteArray# :: forall s.
MutableByteArray# s
-> Int# -> State# s -> (# State# s, SDL_TimerID #)
$cwriteByteArray# :: forall s.
MutableByteArray# s -> Int# -> SDL_TimerID -> State# s -> State# s
writeByteArray# :: forall s.
MutableByteArray# s -> Int# -> SDL_TimerID -> State# s -> State# s
$csetByteArray# :: forall s.
MutableByteArray# s
-> Int# -> Int# -> SDL_TimerID -> State# s -> State# s
setByteArray# :: forall s.
MutableByteArray# s
-> Int# -> Int# -> SDL_TimerID -> State# s -> State# s
$cindexOffAddr# :: Addr# -> Int# -> SDL_TimerID
indexOffAddr# :: Addr# -> Int# -> SDL_TimerID
$creadOffAddr# :: forall s. Addr# -> Int# -> State# s -> (# State# s, SDL_TimerID #)
readOffAddr# :: forall s. Addr# -> Int# -> State# s -> (# State# s, SDL_TimerID #)
$cwriteOffAddr# :: forall s. Addr# -> Int# -> SDL_TimerID -> State# s -> State# s
writeOffAddr# :: forall s. Addr# -> Int# -> SDL_TimerID -> State# s -> State# s
$csetOffAddr# :: forall s.
Addr# -> Int# -> Int# -> SDL_TimerID -> State# s -> State# s
setOffAddr# :: forall s.
Addr# -> Int# -> Int# -> SDL_TimerID -> State# s -> State# s
BG.Prim
    , Ptr SDL_TimerID -> IO SDL_TimerID
Ptr SDL_TimerID -> Int -> IO SDL_TimerID
Ptr SDL_TimerID -> Int -> SDL_TimerID -> IO ()
Ptr SDL_TimerID -> SDL_TimerID -> IO ()
SDL_TimerID -> Int
(SDL_TimerID -> Int)
-> (SDL_TimerID -> Int)
-> (Ptr SDL_TimerID -> Int -> IO SDL_TimerID)
-> (Ptr SDL_TimerID -> Int -> SDL_TimerID -> IO ())
-> (forall b. Ptr b -> Int -> IO SDL_TimerID)
-> (forall b. Ptr b -> Int -> SDL_TimerID -> IO ())
-> (Ptr SDL_TimerID -> IO SDL_TimerID)
-> (Ptr SDL_TimerID -> SDL_TimerID -> IO ())
-> Storable SDL_TimerID
forall b. Ptr b -> Int -> IO SDL_TimerID
forall b. Ptr b -> Int -> SDL_TimerID -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: SDL_TimerID -> Int
sizeOf :: SDL_TimerID -> Int
$calignment :: SDL_TimerID -> Int
alignment :: SDL_TimerID -> Int
$cpeekElemOff :: Ptr SDL_TimerID -> Int -> IO SDL_TimerID
peekElemOff :: Ptr SDL_TimerID -> Int -> IO SDL_TimerID
$cpokeElemOff :: Ptr SDL_TimerID -> Int -> SDL_TimerID -> IO ()
pokeElemOff :: Ptr SDL_TimerID -> Int -> SDL_TimerID -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO SDL_TimerID
peekByteOff :: forall b. Ptr b -> Int -> IO SDL_TimerID
$cpokeByteOff :: forall b. Ptr b -> Int -> SDL_TimerID -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> SDL_TimerID -> IO ()
$cpeek :: Ptr SDL_TimerID -> IO SDL_TimerID
peek :: Ptr SDL_TimerID -> IO SDL_TimerID
$cpoke :: Ptr SDL_TimerID -> SDL_TimerID -> IO ()
poke :: Ptr SDL_TimerID -> SDL_TimerID -> IO ()
BG.Storable
    , SDL_TimerID
SDL_TimerID -> SDL_TimerID -> Bounded SDL_TimerID
forall a. a -> a -> Bounded a
$cminBound :: SDL_TimerID
minBound :: SDL_TimerID
$cmaxBound :: SDL_TimerID
maxBound :: SDL_TimerID
Bounded
    , Int -> SDL_TimerID
SDL_TimerID -> Int
SDL_TimerID -> [SDL_TimerID]
SDL_TimerID -> SDL_TimerID
SDL_TimerID -> SDL_TimerID -> [SDL_TimerID]
SDL_TimerID -> SDL_TimerID -> SDL_TimerID -> [SDL_TimerID]
(SDL_TimerID -> SDL_TimerID)
-> (SDL_TimerID -> SDL_TimerID)
-> (Int -> SDL_TimerID)
-> (SDL_TimerID -> Int)
-> (SDL_TimerID -> [SDL_TimerID])
-> (SDL_TimerID -> SDL_TimerID -> [SDL_TimerID])
-> (SDL_TimerID -> SDL_TimerID -> [SDL_TimerID])
-> (SDL_TimerID -> SDL_TimerID -> SDL_TimerID -> [SDL_TimerID])
-> Enum SDL_TimerID
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: SDL_TimerID -> SDL_TimerID
succ :: SDL_TimerID -> SDL_TimerID
$cpred :: SDL_TimerID -> SDL_TimerID
pred :: SDL_TimerID -> SDL_TimerID
$ctoEnum :: Int -> SDL_TimerID
toEnum :: Int -> SDL_TimerID
$cfromEnum :: SDL_TimerID -> Int
fromEnum :: SDL_TimerID -> Int
$cenumFrom :: SDL_TimerID -> [SDL_TimerID]
enumFrom :: SDL_TimerID -> [SDL_TimerID]
$cenumFromThen :: SDL_TimerID -> SDL_TimerID -> [SDL_TimerID]
enumFromThen :: SDL_TimerID -> SDL_TimerID -> [SDL_TimerID]
$cenumFromTo :: SDL_TimerID -> SDL_TimerID -> [SDL_TimerID]
enumFromTo :: SDL_TimerID -> SDL_TimerID -> [SDL_TimerID]
$cenumFromThenTo :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID -> [SDL_TimerID]
enumFromThenTo :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID -> [SDL_TimerID]
Enum
    , Enum SDL_TimerID
Real SDL_TimerID
(Real SDL_TimerID, Enum SDL_TimerID) =>
(SDL_TimerID -> SDL_TimerID -> SDL_TimerID)
-> (SDL_TimerID -> SDL_TimerID -> SDL_TimerID)
-> (SDL_TimerID -> SDL_TimerID -> SDL_TimerID)
-> (SDL_TimerID -> SDL_TimerID -> SDL_TimerID)
-> (SDL_TimerID -> SDL_TimerID -> (SDL_TimerID, SDL_TimerID))
-> (SDL_TimerID -> SDL_TimerID -> (SDL_TimerID, SDL_TimerID))
-> (SDL_TimerID -> Integer)
-> Integral SDL_TimerID
SDL_TimerID -> Integer
SDL_TimerID -> SDL_TimerID -> (SDL_TimerID, SDL_TimerID)
SDL_TimerID -> SDL_TimerID -> SDL_TimerID
forall a.
(Real a, Enum a) =>
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> (a, a))
-> (a -> a -> (a, a))
-> (a -> Integer)
-> Integral a
$cquot :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
quot :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
$crem :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
rem :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
$cdiv :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
div :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
$cmod :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
mod :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
$cquotRem :: SDL_TimerID -> SDL_TimerID -> (SDL_TimerID, SDL_TimerID)
quotRem :: SDL_TimerID -> SDL_TimerID -> (SDL_TimerID, SDL_TimerID)
$cdivMod :: SDL_TimerID -> SDL_TimerID -> (SDL_TimerID, SDL_TimerID)
divMod :: SDL_TimerID -> SDL_TimerID -> (SDL_TimerID, SDL_TimerID)
$ctoInteger :: SDL_TimerID -> Integer
toInteger :: SDL_TimerID -> Integer
Integral
    , Ptr SDL_TimerID -> IO SDL_TimerID
(Ptr SDL_TimerID -> IO SDL_TimerID) -> ReadRaw SDL_TimerID
forall a. (Ptr a -> IO a) -> ReadRaw a
$creadRaw :: Ptr SDL_TimerID -> IO SDL_TimerID
readRaw :: Ptr SDL_TimerID -> IO SDL_TimerID
Marshal.ReadRaw
    , Proxy SDL_TimerID -> Int
(Proxy SDL_TimerID -> Int)
-> (Proxy SDL_TimerID -> Int) -> StaticSize SDL_TimerID
forall a. (Proxy a -> Int) -> (Proxy a -> Int) -> StaticSize a
$cstaticSizeOf :: Proxy SDL_TimerID -> Int
staticSizeOf :: Proxy SDL_TimerID -> Int
$cstaticAlignment :: Proxy SDL_TimerID -> Int
staticAlignment :: Proxy SDL_TimerID -> Int
Marshal.StaticSize
    , Ptr SDL_TimerID -> SDL_TimerID -> IO ()
(Ptr SDL_TimerID -> SDL_TimerID -> IO ()) -> WriteRaw SDL_TimerID
forall a. (Ptr a -> a -> IO ()) -> WriteRaw a
$cwriteRaw :: Ptr SDL_TimerID -> SDL_TimerID -> IO ()
writeRaw :: Ptr SDL_TimerID -> SDL_TimerID -> IO ()
Marshal.WriteRaw
    , Integer -> SDL_TimerID
SDL_TimerID -> SDL_TimerID
SDL_TimerID -> SDL_TimerID -> SDL_TimerID
(SDL_TimerID -> SDL_TimerID -> SDL_TimerID)
-> (SDL_TimerID -> SDL_TimerID -> SDL_TimerID)
-> (SDL_TimerID -> SDL_TimerID -> SDL_TimerID)
-> (SDL_TimerID -> SDL_TimerID)
-> (SDL_TimerID -> SDL_TimerID)
-> (SDL_TimerID -> SDL_TimerID)
-> (Integer -> SDL_TimerID)
-> Num SDL_TimerID
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
$c+ :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
+ :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
$c- :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
- :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
$c* :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
* :: SDL_TimerID -> SDL_TimerID -> SDL_TimerID
$cnegate :: SDL_TimerID -> SDL_TimerID
negate :: SDL_TimerID -> SDL_TimerID
$cabs :: SDL_TimerID -> SDL_TimerID
abs :: SDL_TimerID -> SDL_TimerID
$csignum :: SDL_TimerID -> SDL_TimerID
signum :: SDL_TimerID -> SDL_TimerID
$cfromInteger :: Integer -> SDL_TimerID
fromInteger :: Integer -> SDL_TimerID
Num
    , Num SDL_TimerID
Ord SDL_TimerID
(Num SDL_TimerID, Ord SDL_TimerID) =>
(SDL_TimerID -> Rational) -> Real SDL_TimerID
SDL_TimerID -> Rational
forall a. (Num a, Ord a) => (a -> Rational) -> Real a
$ctoRational :: SDL_TimerID -> Rational
toRational :: SDL_TimerID -> Rational
Real
    )

instance
  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
  => BG.CompatHasField.HasField "unwrap" SDL_TimerID ty
  where
  hasField :: SDL_TimerID -> (ty -> SDL_TimerID, ty)
hasField =
    \SDL_TimerID
x0 ->
      ( \ty
y1 ->
          SDL_TimerID{unwrap :: Uint32
unwrap = ty
Uint32
y1}
      , forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"unwrap" SDL_TimerID
x0
      )

instance
  (ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
  => BG.HasField "unwrap" (BG.Ptr SDL_TimerID) (BG.Ptr ty)
  where
  getField :: Ptr SDL_TimerID -> Ptr ty
getField = Proxy "unwrap"
-> Ptr SDL_TimerID -> Ptr (CFieldType SDL_TimerID "unwrap")
forall a (field :: Symbol).
HasCField a field =>
Proxy field -> Ptr a -> Ptr (CFieldType a field)
HasCField.fromPtr (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"unwrap")

instance HasCField.HasCField SDL_TimerID "unwrap" where
  type
    CFieldType SDL_TimerID "unwrap" =
      SDL3.Sys.Bindgen.Stdinc.Uint32

  offset# :: Proxy# SDL_TimerID -> Proxy# "unwrap" -> Int
offset# = \Proxy# SDL_TimerID
_ -> \Proxy# "unwrap"
_ -> Int
0

-- | Auxiliary type used by 'SDL_TimerCallback'
--
--     [C declaration]: @SDL_TimerCallback@, defined at @SDL3\/SDL_timer.h 332:26@
newtype SDL_TimerCallback_Aux = SDL_TimerCallback_Aux
  { SDL_TimerCallback_Aux
-> Ptr Void -> SDL_TimerID -> Uint32 -> IO Uint32
unwrap
      :: BG.Ptr BG.Void -> SDL_TimerID -> SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO SDL3.Sys.Bindgen.Stdinc.Uint32
  }
  deriving stock ((forall x. SDL_TimerCallback_Aux -> Rep SDL_TimerCallback_Aux x)
-> (forall x. Rep SDL_TimerCallback_Aux x -> SDL_TimerCallback_Aux)
-> Generic SDL_TimerCallback_Aux
forall x. Rep SDL_TimerCallback_Aux x -> SDL_TimerCallback_Aux
forall x. SDL_TimerCallback_Aux -> Rep SDL_TimerCallback_Aux x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. SDL_TimerCallback_Aux -> Rep SDL_TimerCallback_Aux x
from :: forall x. SDL_TimerCallback_Aux -> Rep SDL_TimerCallback_Aux x
$cto :: forall x. Rep SDL_TimerCallback_Aux x -> SDL_TimerCallback_Aux
to :: forall x. Rep SDL_TimerCallback_Aux x -> SDL_TimerCallback_Aux
BG.Generic)

-- __unique:__ @toSDL_TimerCallback_Aux@
foreign import ccall safe "wrapper"
  hs_bindgen_a49c51828ca7c2b2_base
    :: ( BG.Ptr BG.Void
         -> HsBindgen.Runtime.LibC.Word32
         -> HsBindgen.Runtime.LibC.Word32
         -> IO HsBindgen.Runtime.LibC.Word32
       )
    -> IO
         ( BG.FunPtr
             ( BG.Ptr BG.Void
               -> HsBindgen.Runtime.LibC.Word32
               -> HsBindgen.Runtime.LibC.Word32
               -> IO HsBindgen.Runtime.LibC.Word32
             )
         )

-- __unique:__ @toSDL_TimerCallback_Aux@
hs_bindgen_a49c51828ca7c2b2
  :: SDL_TimerCallback_Aux
  -> IO (BG.FunPtr SDL_TimerCallback_Aux)
hs_bindgen_a49c51828ca7c2b2 :: SDL_TimerCallback_Aux -> IO (FunPtr SDL_TimerCallback_Aux)
hs_bindgen_a49c51828ca7c2b2 =
  \SDL_TimerCallback_Aux
fun0 ->
    (FunPtr (Ptr Void -> Word32 -> Word32 -> IO Word32)
 -> FunPtr SDL_TimerCallback_Aux)
-> IO (FunPtr (Ptr Void -> Word32 -> Word32 -> IO Word32))
-> IO (FunPtr SDL_TimerCallback_Aux)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
      FunPtr (Ptr Void -> Word32 -> Word32 -> IO Word32)
-> FunPtr SDL_TimerCallback_Aux
forall a b. FunPtr a -> FunPtr b
BG.castFunPtr
      ( (Ptr Void -> Word32 -> Word32 -> IO Word32)
-> IO (FunPtr (Ptr Void -> Word32 -> Word32 -> IO Word32))
hs_bindgen_a49c51828ca7c2b2_base
          ( \Ptr Void
x1 ->
              \Word32
x2 ->
                \Word32
x3 ->
                  (Uint32 -> Word32) -> IO Uint32 -> IO Word32
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
                    Uint32 -> Word32
Uint32 -> FFIType Uint32
forall a. HasFFIType a => a -> FFIType a
BG.toFFIType
                    (forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"unwrap" SDL_TimerCallback_Aux
fun0 (FFIType (Ptr Void) -> Ptr Void
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType Ptr Void
FFIType (Ptr Void)
x1) (FFIType SDL_TimerID -> SDL_TimerID
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType Word32
FFIType SDL_TimerID
x2) (FFIType Uint32 -> Uint32
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType Word32
FFIType Uint32
x3))
          )
      )

-- __unique:__ @fromSDL_TimerCallback_Aux@
foreign import ccall safe "dynamic"
  hs_bindgen_fecf80520b47dfb6_base
    :: BG.FunPtr
         ( BG.Ptr BG.Void
           -> HsBindgen.Runtime.LibC.Word32
           -> HsBindgen.Runtime.LibC.Word32
           -> IO HsBindgen.Runtime.LibC.Word32
         )
    -> BG.Ptr BG.Void
    -> HsBindgen.Runtime.LibC.Word32
    -> HsBindgen.Runtime.LibC.Word32
    -> IO HsBindgen.Runtime.LibC.Word32

-- __unique:__ @fromSDL_TimerCallback_Aux@
hs_bindgen_fecf80520b47dfb6
  :: BG.FunPtr SDL_TimerCallback_Aux
  -> SDL_TimerCallback_Aux
hs_bindgen_fecf80520b47dfb6 :: FunPtr SDL_TimerCallback_Aux -> SDL_TimerCallback_Aux
hs_bindgen_fecf80520b47dfb6 =
  \FunPtr SDL_TimerCallback_Aux
funPtr0 ->
    (Ptr Void -> SDL_TimerID -> Uint32 -> IO Uint32)
-> SDL_TimerCallback_Aux
SDL_TimerCallback_Aux
      ( \Ptr Void
x1 ->
          \SDL_TimerID
x2 ->
            \Uint32
x3 ->
              (Word32 -> Uint32) -> IO Word32 -> IO Uint32
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
                Word32 -> Uint32
FFIType Uint32 -> Uint32
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType
                ( FunPtr (Ptr Void -> Word32 -> Word32 -> IO Word32)
-> Ptr Void -> Word32 -> Word32 -> IO Word32
hs_bindgen_fecf80520b47dfb6_base
                    (FunPtr SDL_TimerCallback_Aux
-> FunPtr (Ptr Void -> Word32 -> Word32 -> IO Word32)
forall a b. FunPtr a -> FunPtr b
BG.castFunPtr FunPtr SDL_TimerCallback_Aux
funPtr0)
                    (Ptr Void -> FFIType (Ptr Void)
forall a. HasFFIType a => a -> FFIType a
BG.toFFIType Ptr Void
x1)
                    (SDL_TimerID -> FFIType SDL_TimerID
forall a. HasFFIType a => a -> FFIType a
BG.toFFIType SDL_TimerID
x2)
                    (Uint32 -> FFIType Uint32
forall a. HasFFIType a => a -> FFIType a
BG.toFFIType Uint32
x3)
                )
      )

instance BG.ToFunPtr SDL_TimerCallback_Aux where
  toFunPtr :: SDL_TimerCallback_Aux -> IO (FunPtr SDL_TimerCallback_Aux)
toFunPtr = SDL_TimerCallback_Aux -> IO (FunPtr SDL_TimerCallback_Aux)
hs_bindgen_a49c51828ca7c2b2

instance BG.FromFunPtr SDL_TimerCallback_Aux where
  fromFunPtr :: FunPtr SDL_TimerCallback_Aux -> SDL_TimerCallback_Aux
fromFunPtr = FunPtr SDL_TimerCallback_Aux -> SDL_TimerCallback_Aux
hs_bindgen_fecf80520b47dfb6

instance
  ( ty
      ~ (BG.Ptr BG.Void -> SDL_TimerID -> SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO SDL3.Sys.Bindgen.Stdinc.Uint32)
  )
  => BG.CompatHasField.HasField "unwrap" SDL_TimerCallback_Aux ty
  where
  hasField :: SDL_TimerCallback_Aux -> (ty -> SDL_TimerCallback_Aux, ty)
hasField =
    \SDL_TimerCallback_Aux
x0 ->
      ( \ty
y1 ->
          SDL_TimerCallback_Aux{unwrap :: Ptr Void -> SDL_TimerID -> Uint32 -> IO Uint32
unwrap = ty
Ptr Void -> SDL_TimerID -> Uint32 -> IO Uint32
y1}
      , forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"unwrap" SDL_TimerCallback_Aux
x0
      )

instance
  ( ty
      ~ (BG.Ptr BG.Void -> SDL_TimerID -> SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO SDL3.Sys.Bindgen.Stdinc.Uint32)
  )
  => BG.HasField "unwrap" (BG.Ptr SDL_TimerCallback_Aux) (BG.Ptr ty)
  where
  getField :: Ptr SDL_TimerCallback_Aux -> Ptr ty
getField = Proxy "unwrap"
-> Ptr SDL_TimerCallback_Aux
-> Ptr (CFieldType SDL_TimerCallback_Aux "unwrap")
forall a (field :: Symbol).
HasCField a field =>
Proxy field -> Ptr a -> Ptr (CFieldType a field)
HasCField.fromPtr (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"unwrap")

instance HasCField.HasCField SDL_TimerCallback_Aux "unwrap" where
  type
    CFieldType SDL_TimerCallback_Aux "unwrap" =
      BG.Ptr BG.Void -> SDL_TimerID -> SDL3.Sys.Bindgen.Stdinc.Uint32 -> IO SDL3.Sys.Bindgen.Stdinc.Uint32

  offset# :: Proxy# SDL_TimerCallback_Aux -> Proxy# "unwrap" -> Int
offset# = \Proxy# SDL_TimerCallback_Aux
_ -> \Proxy# "unwrap"
_ -> Int
0

-- | Function prototype for the millisecond timer callback function.
--
--     The callback function is passed the current timer interval and returns the next timer interval, in milliseconds. If the returned value is the same as the one passed in, the periodic alarm continues, otherwise a new alarm is scheduled. If the callback returns 0, the periodic alarm is canceled and will be removed.
--
--     [@userdata@]: an arbitrary pointer provided by the app through SDL_AddTimer, for its own use.
--
--     [@timerID@]: the current timer being processed.
--
--     [@interval@]: the current callback time interval.
--
--     [Returns]: the new callback time interval, or 0 to disable further runs of the callback.
--
--     [Thread safety]: SDL may call this callback at any time from a background thread; the application is responsible for locking resources the callback touches that need to be protected.
--
--     @since 3.2.0
--
--     [See also]: 'sDL_AddTimer'
--
--     [C declaration]: @SDL_TimerCallback@, defined at @SDL3\/SDL_timer.h 332:26@
newtype SDL_TimerCallback = SDL_TimerCallback
  { SDL_TimerCallback -> FunPtr SDL_TimerCallback_Aux
unwrap :: BG.FunPtr SDL_TimerCallback_Aux
  }
  deriving stock ((forall x. SDL_TimerCallback -> Rep SDL_TimerCallback x)
-> (forall x. Rep SDL_TimerCallback x -> SDL_TimerCallback)
-> Generic SDL_TimerCallback
forall x. Rep SDL_TimerCallback x -> SDL_TimerCallback
forall x. SDL_TimerCallback -> Rep SDL_TimerCallback x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. SDL_TimerCallback -> Rep SDL_TimerCallback x
from :: forall x. SDL_TimerCallback -> Rep SDL_TimerCallback x
$cto :: forall x. Rep SDL_TimerCallback x -> SDL_TimerCallback
to :: forall x. Rep SDL_TimerCallback x -> SDL_TimerCallback
BG.Generic, SDL_TimerCallback -> SDL_TimerCallback -> Bool
(SDL_TimerCallback -> SDL_TimerCallback -> Bool)
-> (SDL_TimerCallback -> SDL_TimerCallback -> Bool)
-> Eq SDL_TimerCallback
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SDL_TimerCallback -> SDL_TimerCallback -> Bool
== :: SDL_TimerCallback -> SDL_TimerCallback -> Bool
$c/= :: SDL_TimerCallback -> SDL_TimerCallback -> Bool
/= :: SDL_TimerCallback -> SDL_TimerCallback -> Bool
Eq, Eq SDL_TimerCallback
Eq SDL_TimerCallback =>
(SDL_TimerCallback -> SDL_TimerCallback -> Ordering)
-> (SDL_TimerCallback -> SDL_TimerCallback -> Bool)
-> (SDL_TimerCallback -> SDL_TimerCallback -> Bool)
-> (SDL_TimerCallback -> SDL_TimerCallback -> Bool)
-> (SDL_TimerCallback -> SDL_TimerCallback -> Bool)
-> (SDL_TimerCallback -> SDL_TimerCallback -> SDL_TimerCallback)
-> (SDL_TimerCallback -> SDL_TimerCallback -> SDL_TimerCallback)
-> Ord SDL_TimerCallback
SDL_TimerCallback -> SDL_TimerCallback -> Bool
SDL_TimerCallback -> SDL_TimerCallback -> Ordering
SDL_TimerCallback -> SDL_TimerCallback -> SDL_TimerCallback
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: SDL_TimerCallback -> SDL_TimerCallback -> Ordering
compare :: SDL_TimerCallback -> SDL_TimerCallback -> Ordering
$c< :: SDL_TimerCallback -> SDL_TimerCallback -> Bool
< :: SDL_TimerCallback -> SDL_TimerCallback -> Bool
$c<= :: SDL_TimerCallback -> SDL_TimerCallback -> Bool
<= :: SDL_TimerCallback -> SDL_TimerCallback -> Bool
$c> :: SDL_TimerCallback -> SDL_TimerCallback -> Bool
> :: SDL_TimerCallback -> SDL_TimerCallback -> Bool
$c>= :: SDL_TimerCallback -> SDL_TimerCallback -> Bool
>= :: SDL_TimerCallback -> SDL_TimerCallback -> Bool
$cmax :: SDL_TimerCallback -> SDL_TimerCallback -> SDL_TimerCallback
max :: SDL_TimerCallback -> SDL_TimerCallback -> SDL_TimerCallback
$cmin :: SDL_TimerCallback -> SDL_TimerCallback -> SDL_TimerCallback
min :: SDL_TimerCallback -> SDL_TimerCallback -> SDL_TimerCallback
Ord, Int -> SDL_TimerCallback -> ShowS
[SDL_TimerCallback] -> ShowS
SDL_TimerCallback -> String
(Int -> SDL_TimerCallback -> ShowS)
-> (SDL_TimerCallback -> String)
-> ([SDL_TimerCallback] -> ShowS)
-> Show SDL_TimerCallback
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SDL_TimerCallback -> ShowS
showsPrec :: Int -> SDL_TimerCallback -> ShowS
$cshow :: SDL_TimerCallback -> String
show :: SDL_TimerCallback -> String
$cshowList :: [SDL_TimerCallback] -> ShowS
showList :: [SDL_TimerCallback] -> ShowS
Show)
  deriving newtype
    ( FFIType SDL_TimerCallback -> SDL_TimerCallback
SDL_TimerCallback -> FFIType SDL_TimerCallback
(SDL_TimerCallback -> FFIType SDL_TimerCallback)
-> (FFIType SDL_TimerCallback -> SDL_TimerCallback)
-> HasFFIType SDL_TimerCallback
forall a. (a -> FFIType a) -> (FFIType a -> a) -> HasFFIType a
$ctoFFIType :: SDL_TimerCallback -> FFIType SDL_TimerCallback
toFFIType :: SDL_TimerCallback -> FFIType SDL_TimerCallback
$cfromFFIType :: FFIType SDL_TimerCallback -> SDL_TimerCallback
fromFFIType :: FFIType SDL_TimerCallback -> SDL_TimerCallback
BG.HasFFIType
    , Ptr SDL_TimerCallback -> IO SDL_TimerCallback
Ptr SDL_TimerCallback -> Int -> IO SDL_TimerCallback
Ptr SDL_TimerCallback -> Int -> SDL_TimerCallback -> IO ()
Ptr SDL_TimerCallback -> SDL_TimerCallback -> IO ()
SDL_TimerCallback -> Int
(SDL_TimerCallback -> Int)
-> (SDL_TimerCallback -> Int)
-> (Ptr SDL_TimerCallback -> Int -> IO SDL_TimerCallback)
-> (Ptr SDL_TimerCallback -> Int -> SDL_TimerCallback -> IO ())
-> (forall b. Ptr b -> Int -> IO SDL_TimerCallback)
-> (forall b. Ptr b -> Int -> SDL_TimerCallback -> IO ())
-> (Ptr SDL_TimerCallback -> IO SDL_TimerCallback)
-> (Ptr SDL_TimerCallback -> SDL_TimerCallback -> IO ())
-> Storable SDL_TimerCallback
forall b. Ptr b -> Int -> IO SDL_TimerCallback
forall b. Ptr b -> Int -> SDL_TimerCallback -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: SDL_TimerCallback -> Int
sizeOf :: SDL_TimerCallback -> Int
$calignment :: SDL_TimerCallback -> Int
alignment :: SDL_TimerCallback -> Int
$cpeekElemOff :: Ptr SDL_TimerCallback -> Int -> IO SDL_TimerCallback
peekElemOff :: Ptr SDL_TimerCallback -> Int -> IO SDL_TimerCallback
$cpokeElemOff :: Ptr SDL_TimerCallback -> Int -> SDL_TimerCallback -> IO ()
pokeElemOff :: Ptr SDL_TimerCallback -> Int -> SDL_TimerCallback -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO SDL_TimerCallback
peekByteOff :: forall b. Ptr b -> Int -> IO SDL_TimerCallback
$cpokeByteOff :: forall b. Ptr b -> Int -> SDL_TimerCallback -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> SDL_TimerCallback -> IO ()
$cpeek :: Ptr SDL_TimerCallback -> IO SDL_TimerCallback
peek :: Ptr SDL_TimerCallback -> IO SDL_TimerCallback
$cpoke :: Ptr SDL_TimerCallback -> SDL_TimerCallback -> IO ()
poke :: Ptr SDL_TimerCallback -> SDL_TimerCallback -> IO ()
BG.Storable
    , Ptr SDL_TimerCallback -> IO SDL_TimerCallback
(Ptr SDL_TimerCallback -> IO SDL_TimerCallback)
-> ReadRaw SDL_TimerCallback
forall a. (Ptr a -> IO a) -> ReadRaw a
$creadRaw :: Ptr SDL_TimerCallback -> IO SDL_TimerCallback
readRaw :: Ptr SDL_TimerCallback -> IO SDL_TimerCallback
Marshal.ReadRaw
    , Proxy SDL_TimerCallback -> Int
(Proxy SDL_TimerCallback -> Int)
-> (Proxy SDL_TimerCallback -> Int) -> StaticSize SDL_TimerCallback
forall a. (Proxy a -> Int) -> (Proxy a -> Int) -> StaticSize a
$cstaticSizeOf :: Proxy SDL_TimerCallback -> Int
staticSizeOf :: Proxy SDL_TimerCallback -> Int
$cstaticAlignment :: Proxy SDL_TimerCallback -> Int
staticAlignment :: Proxy SDL_TimerCallback -> Int
Marshal.StaticSize
    , Ptr SDL_TimerCallback -> SDL_TimerCallback -> IO ()
(Ptr SDL_TimerCallback -> SDL_TimerCallback -> IO ())
-> WriteRaw SDL_TimerCallback
forall a. (Ptr a -> a -> IO ()) -> WriteRaw a
$cwriteRaw :: Ptr SDL_TimerCallback -> SDL_TimerCallback -> IO ()
writeRaw :: Ptr SDL_TimerCallback -> SDL_TimerCallback -> IO ()
Marshal.WriteRaw
    )

instance
  (ty ~ BG.FunPtr SDL_TimerCallback_Aux)
  => BG.CompatHasField.HasField "unwrap" SDL_TimerCallback ty
  where
  hasField :: SDL_TimerCallback -> (ty -> SDL_TimerCallback, ty)
hasField =
    \SDL_TimerCallback
x0 ->
      ( \ty
y1 ->
          SDL_TimerCallback{unwrap :: FunPtr SDL_TimerCallback_Aux
unwrap = ty
FunPtr SDL_TimerCallback_Aux
y1}
      , forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"unwrap" SDL_TimerCallback
x0
      )

instance
  (ty ~ BG.FunPtr SDL_TimerCallback_Aux)
  => BG.HasField "unwrap" (BG.Ptr SDL_TimerCallback) (BG.Ptr ty)
  where
  getField :: Ptr SDL_TimerCallback -> Ptr ty
getField = Proxy "unwrap"
-> Ptr SDL_TimerCallback
-> Ptr (CFieldType SDL_TimerCallback "unwrap")
forall a (field :: Symbol).
HasCField a field =>
Proxy field -> Ptr a -> Ptr (CFieldType a field)
HasCField.fromPtr (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"unwrap")

instance HasCField.HasCField SDL_TimerCallback "unwrap" where
  type
    CFieldType SDL_TimerCallback "unwrap" =
      BG.FunPtr SDL_TimerCallback_Aux

  offset# :: Proxy# SDL_TimerCallback -> Proxy# "unwrap" -> Int
offset# = \Proxy# SDL_TimerCallback
_ -> \Proxy# "unwrap"
_ -> Int
0

-- | Auxiliary type used by 'SDL_NSTimerCallback'
--
--     [C declaration]: @SDL_NSTimerCallback@, defined at @SDL3\/SDL_timer.h 394:26@
newtype SDL_NSTimerCallback_Aux = SDL_NSTimerCallback_Aux
  { SDL_NSTimerCallback_Aux
-> Ptr Void -> SDL_TimerID -> Uint64 -> IO Uint64
unwrap
      :: BG.Ptr BG.Void -> SDL_TimerID -> SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO SDL3.Sys.Bindgen.Stdinc.Uint64
  }
  deriving stock ((forall x.
 SDL_NSTimerCallback_Aux -> Rep SDL_NSTimerCallback_Aux x)
-> (forall x.
    Rep SDL_NSTimerCallback_Aux x -> SDL_NSTimerCallback_Aux)
-> Generic SDL_NSTimerCallback_Aux
forall x. Rep SDL_NSTimerCallback_Aux x -> SDL_NSTimerCallback_Aux
forall x. SDL_NSTimerCallback_Aux -> Rep SDL_NSTimerCallback_Aux x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. SDL_NSTimerCallback_Aux -> Rep SDL_NSTimerCallback_Aux x
from :: forall x. SDL_NSTimerCallback_Aux -> Rep SDL_NSTimerCallback_Aux x
$cto :: forall x. Rep SDL_NSTimerCallback_Aux x -> SDL_NSTimerCallback_Aux
to :: forall x. Rep SDL_NSTimerCallback_Aux x -> SDL_NSTimerCallback_Aux
BG.Generic)

-- __unique:__ @toSDL_NSTimerCallback_Aux@
foreign import ccall safe "wrapper"
  hs_bindgen_31fbeb64177dcacb_base
    :: ( BG.Ptr BG.Void
         -> HsBindgen.Runtime.LibC.Word32
         -> HsBindgen.Runtime.LibC.Word64
         -> IO HsBindgen.Runtime.LibC.Word64
       )
    -> IO
         ( BG.FunPtr
             ( BG.Ptr BG.Void
               -> HsBindgen.Runtime.LibC.Word32
               -> HsBindgen.Runtime.LibC.Word64
               -> IO HsBindgen.Runtime.LibC.Word64
             )
         )

-- __unique:__ @toSDL_NSTimerCallback_Aux@
hs_bindgen_31fbeb64177dcacb
  :: SDL_NSTimerCallback_Aux
  -> IO (BG.FunPtr SDL_NSTimerCallback_Aux)
hs_bindgen_31fbeb64177dcacb :: SDL_NSTimerCallback_Aux -> IO (FunPtr SDL_NSTimerCallback_Aux)
hs_bindgen_31fbeb64177dcacb =
  \SDL_NSTimerCallback_Aux
fun0 ->
    (FunPtr (Ptr Void -> Word32 -> Word64 -> IO Word64)
 -> FunPtr SDL_NSTimerCallback_Aux)
-> IO (FunPtr (Ptr Void -> Word32 -> Word64 -> IO Word64))
-> IO (FunPtr SDL_NSTimerCallback_Aux)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
      FunPtr (Ptr Void -> Word32 -> Word64 -> IO Word64)
-> FunPtr SDL_NSTimerCallback_Aux
forall a b. FunPtr a -> FunPtr b
BG.castFunPtr
      ( (Ptr Void -> Word32 -> Word64 -> IO Word64)
-> IO (FunPtr (Ptr Void -> Word32 -> Word64 -> IO Word64))
hs_bindgen_31fbeb64177dcacb_base
          ( \Ptr Void
x1 ->
              \Word32
x2 ->
                \Word64
x3 ->
                  (Uint64 -> Word64) -> IO Uint64 -> IO Word64
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
                    Uint64 -> Word64
Uint64 -> FFIType Uint64
forall a. HasFFIType a => a -> FFIType a
BG.toFFIType
                    (forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"unwrap" SDL_NSTimerCallback_Aux
fun0 (FFIType (Ptr Void) -> Ptr Void
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType Ptr Void
FFIType (Ptr Void)
x1) (FFIType SDL_TimerID -> SDL_TimerID
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType Word32
FFIType SDL_TimerID
x2) (FFIType Uint64 -> Uint64
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType Word64
FFIType Uint64
x3))
          )
      )

-- __unique:__ @fromSDL_NSTimerCallback_Aux@
foreign import ccall safe "dynamic"
  hs_bindgen_389ed0c3b28b1730_base
    :: BG.FunPtr
         ( BG.Ptr BG.Void
           -> HsBindgen.Runtime.LibC.Word32
           -> HsBindgen.Runtime.LibC.Word64
           -> IO HsBindgen.Runtime.LibC.Word64
         )
    -> BG.Ptr BG.Void
    -> HsBindgen.Runtime.LibC.Word32
    -> HsBindgen.Runtime.LibC.Word64
    -> IO HsBindgen.Runtime.LibC.Word64

-- __unique:__ @fromSDL_NSTimerCallback_Aux@
hs_bindgen_389ed0c3b28b1730
  :: BG.FunPtr SDL_NSTimerCallback_Aux
  -> SDL_NSTimerCallback_Aux
hs_bindgen_389ed0c3b28b1730 :: FunPtr SDL_NSTimerCallback_Aux -> SDL_NSTimerCallback_Aux
hs_bindgen_389ed0c3b28b1730 =
  \FunPtr SDL_NSTimerCallback_Aux
funPtr0 ->
    (Ptr Void -> SDL_TimerID -> Uint64 -> IO Uint64)
-> SDL_NSTimerCallback_Aux
SDL_NSTimerCallback_Aux
      ( \Ptr Void
x1 ->
          \SDL_TimerID
x2 ->
            \Uint64
x3 ->
              (Word64 -> Uint64) -> IO Word64 -> IO Uint64
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
                Word64 -> Uint64
FFIType Uint64 -> Uint64
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType
                ( FunPtr (Ptr Void -> Word32 -> Word64 -> IO Word64)
-> Ptr Void -> Word32 -> Word64 -> IO Word64
hs_bindgen_389ed0c3b28b1730_base
                    (FunPtr SDL_NSTimerCallback_Aux
-> FunPtr (Ptr Void -> Word32 -> Word64 -> IO Word64)
forall a b. FunPtr a -> FunPtr b
BG.castFunPtr FunPtr SDL_NSTimerCallback_Aux
funPtr0)
                    (Ptr Void -> FFIType (Ptr Void)
forall a. HasFFIType a => a -> FFIType a
BG.toFFIType Ptr Void
x1)
                    (SDL_TimerID -> FFIType SDL_TimerID
forall a. HasFFIType a => a -> FFIType a
BG.toFFIType SDL_TimerID
x2)
                    (Uint64 -> FFIType Uint64
forall a. HasFFIType a => a -> FFIType a
BG.toFFIType Uint64
x3)
                )
      )

instance BG.ToFunPtr SDL_NSTimerCallback_Aux where
  toFunPtr :: SDL_NSTimerCallback_Aux -> IO (FunPtr SDL_NSTimerCallback_Aux)
toFunPtr = SDL_NSTimerCallback_Aux -> IO (FunPtr SDL_NSTimerCallback_Aux)
hs_bindgen_31fbeb64177dcacb

instance BG.FromFunPtr SDL_NSTimerCallback_Aux where
  fromFunPtr :: FunPtr SDL_NSTimerCallback_Aux -> SDL_NSTimerCallback_Aux
fromFunPtr = FunPtr SDL_NSTimerCallback_Aux -> SDL_NSTimerCallback_Aux
hs_bindgen_389ed0c3b28b1730

instance
  ( ty
      ~ (BG.Ptr BG.Void -> SDL_TimerID -> SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO SDL3.Sys.Bindgen.Stdinc.Uint64)
  )
  => BG.CompatHasField.HasField "unwrap" SDL_NSTimerCallback_Aux ty
  where
  hasField :: SDL_NSTimerCallback_Aux -> (ty -> SDL_NSTimerCallback_Aux, ty)
hasField =
    \SDL_NSTimerCallback_Aux
x0 ->
      ( \ty
y1 ->
          SDL_NSTimerCallback_Aux{unwrap :: Ptr Void -> SDL_TimerID -> Uint64 -> IO Uint64
unwrap = ty
Ptr Void -> SDL_TimerID -> Uint64 -> IO Uint64
y1}
      , forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"unwrap" SDL_NSTimerCallback_Aux
x0
      )

instance
  ( ty
      ~ (BG.Ptr BG.Void -> SDL_TimerID -> SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO SDL3.Sys.Bindgen.Stdinc.Uint64)
  )
  => BG.HasField "unwrap" (BG.Ptr SDL_NSTimerCallback_Aux) (BG.Ptr ty)
  where
  getField :: Ptr SDL_NSTimerCallback_Aux -> Ptr ty
getField = Proxy "unwrap"
-> Ptr SDL_NSTimerCallback_Aux
-> Ptr (CFieldType SDL_NSTimerCallback_Aux "unwrap")
forall a (field :: Symbol).
HasCField a field =>
Proxy field -> Ptr a -> Ptr (CFieldType a field)
HasCField.fromPtr (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"unwrap")

instance HasCField.HasCField SDL_NSTimerCallback_Aux "unwrap" where
  type
    CFieldType SDL_NSTimerCallback_Aux "unwrap" =
      BG.Ptr BG.Void -> SDL_TimerID -> SDL3.Sys.Bindgen.Stdinc.Uint64 -> IO SDL3.Sys.Bindgen.Stdinc.Uint64

  offset# :: Proxy# SDL_NSTimerCallback_Aux -> Proxy# "unwrap" -> Int
offset# = \Proxy# SDL_NSTimerCallback_Aux
_ -> \Proxy# "unwrap"
_ -> Int
0

-- | Function prototype for the nanosecond timer callback function.
--
--     The callback function is passed the current timer interval and returns the next timer interval, in nanoseconds. If the returned value is the same as the one passed in, the periodic alarm continues, otherwise a new alarm is scheduled. If the callback returns 0, the periodic alarm is canceled and will be removed.
--
--     [@userdata@]: an arbitrary pointer provided by the app through SDL_AddTimer, for its own use.
--
--     [@timerID@]: the current timer being processed.
--
--     [@interval@]: the current callback time interval.
--
--     [Returns]: the new callback time interval, or 0 to disable further runs of the callback.
--
--     [Thread safety]: SDL may call this callback at any time from a background thread; the application is responsible for locking resources the callback touches that need to be protected.
--
--     @since 3.2.0
--
--     [See also]: 'sDL_AddTimerNS'
--
--     [C declaration]: @SDL_NSTimerCallback@, defined at @SDL3\/SDL_timer.h 394:26@
newtype SDL_NSTimerCallback = SDL_NSTimerCallback
  { SDL_NSTimerCallback -> FunPtr SDL_NSTimerCallback_Aux
unwrap :: BG.FunPtr SDL_NSTimerCallback_Aux
  }
  deriving stock ((forall x. SDL_NSTimerCallback -> Rep SDL_NSTimerCallback x)
-> (forall x. Rep SDL_NSTimerCallback x -> SDL_NSTimerCallback)
-> Generic SDL_NSTimerCallback
forall x. Rep SDL_NSTimerCallback x -> SDL_NSTimerCallback
forall x. SDL_NSTimerCallback -> Rep SDL_NSTimerCallback x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. SDL_NSTimerCallback -> Rep SDL_NSTimerCallback x
from :: forall x. SDL_NSTimerCallback -> Rep SDL_NSTimerCallback x
$cto :: forall x. Rep SDL_NSTimerCallback x -> SDL_NSTimerCallback
to :: forall x. Rep SDL_NSTimerCallback x -> SDL_NSTimerCallback
BG.Generic, SDL_NSTimerCallback -> SDL_NSTimerCallback -> Bool
(SDL_NSTimerCallback -> SDL_NSTimerCallback -> Bool)
-> (SDL_NSTimerCallback -> SDL_NSTimerCallback -> Bool)
-> Eq SDL_NSTimerCallback
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SDL_NSTimerCallback -> SDL_NSTimerCallback -> Bool
== :: SDL_NSTimerCallback -> SDL_NSTimerCallback -> Bool
$c/= :: SDL_NSTimerCallback -> SDL_NSTimerCallback -> Bool
/= :: SDL_NSTimerCallback -> SDL_NSTimerCallback -> Bool
Eq, Eq SDL_NSTimerCallback
Eq SDL_NSTimerCallback =>
(SDL_NSTimerCallback -> SDL_NSTimerCallback -> Ordering)
-> (SDL_NSTimerCallback -> SDL_NSTimerCallback -> Bool)
-> (SDL_NSTimerCallback -> SDL_NSTimerCallback -> Bool)
-> (SDL_NSTimerCallback -> SDL_NSTimerCallback -> Bool)
-> (SDL_NSTimerCallback -> SDL_NSTimerCallback -> Bool)
-> (SDL_NSTimerCallback
    -> SDL_NSTimerCallback -> SDL_NSTimerCallback)
-> (SDL_NSTimerCallback
    -> SDL_NSTimerCallback -> SDL_NSTimerCallback)
-> Ord SDL_NSTimerCallback
SDL_NSTimerCallback -> SDL_NSTimerCallback -> Bool
SDL_NSTimerCallback -> SDL_NSTimerCallback -> Ordering
SDL_NSTimerCallback -> SDL_NSTimerCallback -> SDL_NSTimerCallback
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: SDL_NSTimerCallback -> SDL_NSTimerCallback -> Ordering
compare :: SDL_NSTimerCallback -> SDL_NSTimerCallback -> Ordering
$c< :: SDL_NSTimerCallback -> SDL_NSTimerCallback -> Bool
< :: SDL_NSTimerCallback -> SDL_NSTimerCallback -> Bool
$c<= :: SDL_NSTimerCallback -> SDL_NSTimerCallback -> Bool
<= :: SDL_NSTimerCallback -> SDL_NSTimerCallback -> Bool
$c> :: SDL_NSTimerCallback -> SDL_NSTimerCallback -> Bool
> :: SDL_NSTimerCallback -> SDL_NSTimerCallback -> Bool
$c>= :: SDL_NSTimerCallback -> SDL_NSTimerCallback -> Bool
>= :: SDL_NSTimerCallback -> SDL_NSTimerCallback -> Bool
$cmax :: SDL_NSTimerCallback -> SDL_NSTimerCallback -> SDL_NSTimerCallback
max :: SDL_NSTimerCallback -> SDL_NSTimerCallback -> SDL_NSTimerCallback
$cmin :: SDL_NSTimerCallback -> SDL_NSTimerCallback -> SDL_NSTimerCallback
min :: SDL_NSTimerCallback -> SDL_NSTimerCallback -> SDL_NSTimerCallback
Ord, Int -> SDL_NSTimerCallback -> ShowS
[SDL_NSTimerCallback] -> ShowS
SDL_NSTimerCallback -> String
(Int -> SDL_NSTimerCallback -> ShowS)
-> (SDL_NSTimerCallback -> String)
-> ([SDL_NSTimerCallback] -> ShowS)
-> Show SDL_NSTimerCallback
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SDL_NSTimerCallback -> ShowS
showsPrec :: Int -> SDL_NSTimerCallback -> ShowS
$cshow :: SDL_NSTimerCallback -> String
show :: SDL_NSTimerCallback -> String
$cshowList :: [SDL_NSTimerCallback] -> ShowS
showList :: [SDL_NSTimerCallback] -> ShowS
Show)
  deriving newtype
    ( FFIType SDL_NSTimerCallback -> SDL_NSTimerCallback
SDL_NSTimerCallback -> FFIType SDL_NSTimerCallback
(SDL_NSTimerCallback -> FFIType SDL_NSTimerCallback)
-> (FFIType SDL_NSTimerCallback -> SDL_NSTimerCallback)
-> HasFFIType SDL_NSTimerCallback
forall a. (a -> FFIType a) -> (FFIType a -> a) -> HasFFIType a
$ctoFFIType :: SDL_NSTimerCallback -> FFIType SDL_NSTimerCallback
toFFIType :: SDL_NSTimerCallback -> FFIType SDL_NSTimerCallback
$cfromFFIType :: FFIType SDL_NSTimerCallback -> SDL_NSTimerCallback
fromFFIType :: FFIType SDL_NSTimerCallback -> SDL_NSTimerCallback
BG.HasFFIType
    , Ptr SDL_NSTimerCallback -> IO SDL_NSTimerCallback
Ptr SDL_NSTimerCallback -> Int -> IO SDL_NSTimerCallback
Ptr SDL_NSTimerCallback -> Int -> SDL_NSTimerCallback -> IO ()
Ptr SDL_NSTimerCallback -> SDL_NSTimerCallback -> IO ()
SDL_NSTimerCallback -> Int
(SDL_NSTimerCallback -> Int)
-> (SDL_NSTimerCallback -> Int)
-> (Ptr SDL_NSTimerCallback -> Int -> IO SDL_NSTimerCallback)
-> (Ptr SDL_NSTimerCallback -> Int -> SDL_NSTimerCallback -> IO ())
-> (forall b. Ptr b -> Int -> IO SDL_NSTimerCallback)
-> (forall b. Ptr b -> Int -> SDL_NSTimerCallback -> IO ())
-> (Ptr SDL_NSTimerCallback -> IO SDL_NSTimerCallback)
-> (Ptr SDL_NSTimerCallback -> SDL_NSTimerCallback -> IO ())
-> Storable SDL_NSTimerCallback
forall b. Ptr b -> Int -> IO SDL_NSTimerCallback
forall b. Ptr b -> Int -> SDL_NSTimerCallback -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: SDL_NSTimerCallback -> Int
sizeOf :: SDL_NSTimerCallback -> Int
$calignment :: SDL_NSTimerCallback -> Int
alignment :: SDL_NSTimerCallback -> Int
$cpeekElemOff :: Ptr SDL_NSTimerCallback -> Int -> IO SDL_NSTimerCallback
peekElemOff :: Ptr SDL_NSTimerCallback -> Int -> IO SDL_NSTimerCallback
$cpokeElemOff :: Ptr SDL_NSTimerCallback -> Int -> SDL_NSTimerCallback -> IO ()
pokeElemOff :: Ptr SDL_NSTimerCallback -> Int -> SDL_NSTimerCallback -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO SDL_NSTimerCallback
peekByteOff :: forall b. Ptr b -> Int -> IO SDL_NSTimerCallback
$cpokeByteOff :: forall b. Ptr b -> Int -> SDL_NSTimerCallback -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> SDL_NSTimerCallback -> IO ()
$cpeek :: Ptr SDL_NSTimerCallback -> IO SDL_NSTimerCallback
peek :: Ptr SDL_NSTimerCallback -> IO SDL_NSTimerCallback
$cpoke :: Ptr SDL_NSTimerCallback -> SDL_NSTimerCallback -> IO ()
poke :: Ptr SDL_NSTimerCallback -> SDL_NSTimerCallback -> IO ()
BG.Storable
    , Ptr SDL_NSTimerCallback -> IO SDL_NSTimerCallback
(Ptr SDL_NSTimerCallback -> IO SDL_NSTimerCallback)
-> ReadRaw SDL_NSTimerCallback
forall a. (Ptr a -> IO a) -> ReadRaw a
$creadRaw :: Ptr SDL_NSTimerCallback -> IO SDL_NSTimerCallback
readRaw :: Ptr SDL_NSTimerCallback -> IO SDL_NSTimerCallback
Marshal.ReadRaw
    , Proxy SDL_NSTimerCallback -> Int
(Proxy SDL_NSTimerCallback -> Int)
-> (Proxy SDL_NSTimerCallback -> Int)
-> StaticSize SDL_NSTimerCallback
forall a. (Proxy a -> Int) -> (Proxy a -> Int) -> StaticSize a
$cstaticSizeOf :: Proxy SDL_NSTimerCallback -> Int
staticSizeOf :: Proxy SDL_NSTimerCallback -> Int
$cstaticAlignment :: Proxy SDL_NSTimerCallback -> Int
staticAlignment :: Proxy SDL_NSTimerCallback -> Int
Marshal.StaticSize
    , Ptr SDL_NSTimerCallback -> SDL_NSTimerCallback -> IO ()
(Ptr SDL_NSTimerCallback -> SDL_NSTimerCallback -> IO ())
-> WriteRaw SDL_NSTimerCallback
forall a. (Ptr a -> a -> IO ()) -> WriteRaw a
$cwriteRaw :: Ptr SDL_NSTimerCallback -> SDL_NSTimerCallback -> IO ()
writeRaw :: Ptr SDL_NSTimerCallback -> SDL_NSTimerCallback -> IO ()
Marshal.WriteRaw
    )

instance
  (ty ~ BG.FunPtr SDL_NSTimerCallback_Aux)
  => BG.CompatHasField.HasField "unwrap" SDL_NSTimerCallback ty
  where
  hasField :: SDL_NSTimerCallback -> (ty -> SDL_NSTimerCallback, ty)
hasField =
    \SDL_NSTimerCallback
x0 ->
      ( \ty
y1 ->
          SDL_NSTimerCallback{unwrap :: FunPtr SDL_NSTimerCallback_Aux
unwrap = ty
FunPtr SDL_NSTimerCallback_Aux
y1}
      , forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"unwrap" SDL_NSTimerCallback
x0
      )

instance
  (ty ~ BG.FunPtr SDL_NSTimerCallback_Aux)
  => BG.HasField "unwrap" (BG.Ptr SDL_NSTimerCallback) (BG.Ptr ty)
  where
  getField :: Ptr SDL_NSTimerCallback -> Ptr ty
getField = Proxy "unwrap"
-> Ptr SDL_NSTimerCallback
-> Ptr (CFieldType SDL_NSTimerCallback "unwrap")
forall a (field :: Symbol).
HasCField a field =>
Proxy field -> Ptr a -> Ptr (CFieldType a field)
HasCField.fromPtr (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"unwrap")

instance HasCField.HasCField SDL_NSTimerCallback "unwrap" where
  type
    CFieldType SDL_NSTimerCallback "unwrap" =
      BG.FunPtr SDL_NSTimerCallback_Aux

  offset# :: Proxy# SDL_NSTimerCallback -> Proxy# "unwrap" -> Int
offset# = \Proxy# SDL_NSTimerCallback
_ -> \Proxy# "unwrap"
_ -> Int
0