module Data.Time.Clock.Internal.CTimeval where
#ifndef mingw32_HOST_OS
#if __GLASGOW_HASKELL__ >= 709
import Foreign
#else
import Foreign.Safe
#endif
import Foreign.C
data CTimeval = MkCTimeval CLong CLong
instance Storable CTimeval where
sizeOf :: CTimeval -> Int
sizeOf _ = (CLong -> Int
forall a. Storable a => a -> Int
sizeOf (CLong
forall a. HasCallStack => a
undefined :: CLong)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* 2
alignment :: CTimeval -> Int
alignment _ = CLong -> Int
forall a. Storable a => a -> Int
alignment (CLong
forall a. HasCallStack => a
undefined :: CLong)
peek :: Ptr CTimeval -> IO CTimeval
peek p :: Ptr CTimeval
p = do
CLong
s <- Ptr CLong -> Int -> IO CLong
forall a. Storable a => Ptr a -> Int -> IO a
peekElemOff (Ptr CTimeval -> Ptr CLong
forall a b. Ptr a -> Ptr b
castPtr Ptr CTimeval
p) 0
CLong
mus <- Ptr CLong -> Int -> IO CLong
forall a. Storable a => Ptr a -> Int -> IO a
peekElemOff (Ptr CTimeval -> Ptr CLong
forall a b. Ptr a -> Ptr b
castPtr Ptr CTimeval
p) 1
CTimeval -> IO CTimeval
forall (m :: * -> *) a. Monad m => a -> m a
return (CLong -> CLong -> CTimeval
MkCTimeval CLong
s CLong
mus)
poke :: Ptr CTimeval -> CTimeval -> IO ()
poke p :: Ptr CTimeval
p (MkCTimeval s :: CLong
s mus :: CLong
mus) = do
Ptr CLong -> Int -> CLong -> IO ()
forall a. Storable a => Ptr a -> Int -> a -> IO ()
pokeElemOff (Ptr CTimeval -> Ptr CLong
forall a b. Ptr a -> Ptr b
castPtr Ptr CTimeval
p) 0 CLong
s
Ptr CLong -> Int -> CLong -> IO ()
forall a. Storable a => Ptr a -> Int -> a -> IO ()
pokeElemOff (Ptr CTimeval -> Ptr CLong
forall a b. Ptr a -> Ptr b
castPtr Ptr CTimeval
p) 1 CLong
mus
foreign import ccall unsafe "time.h gettimeofday" gettimeofday :: Ptr CTimeval -> Ptr () -> IO CInt
getCTimeval :: IO CTimeval
getCTimeval :: IO CTimeval
getCTimeval = CTimeval -> (Ptr CTimeval -> IO CTimeval) -> IO CTimeval
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with (CLong -> CLong -> CTimeval
MkCTimeval 0 0) (\ptval :: Ptr CTimeval
ptval -> do
String -> IO CInt -> IO ()
forall a. (Eq a, Num a) => String -> IO a -> IO ()
throwErrnoIfMinus1_ "gettimeofday" (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CTimeval -> Ptr () -> IO CInt
gettimeofday Ptr CTimeval
ptval Ptr ()
forall a. Ptr a
nullPtr
Ptr CTimeval -> IO CTimeval
forall a. Storable a => Ptr a -> IO a
peek Ptr CTimeval
ptval
)
#endif