module GI.GLib.Structs.TimeVal
(
TimeVal(..) ,
newZeroTimeVal ,
noTimeVal ,
TimeValAddMethodInfo ,
timeValAdd ,
timeValFromIso8601 ,
TimeValToIso8601MethodInfo ,
timeValToIso8601 ,
getTimeValTvSec ,
setTimeValTvSec ,
timeVal_tvSec ,
getTimeValTvUsec ,
setTimeValTvUsec ,
timeVal_tvUsec ,
) 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.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
newtype TimeVal = TimeVal (ManagedPtr TimeVal)
instance WrappedPtr TimeVal where
wrappedPtrCalloc = callocBytes 16
wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 16 >=> wrapPtr TimeVal)
wrappedPtrFree = Just ptr_to_g_free
newZeroTimeVal :: MonadIO m => m TimeVal
newZeroTimeVal = liftIO $ wrappedPtrCalloc >>= wrapPtr TimeVal
instance tag ~ 'AttrSet => Constructible TimeVal tag where
new _ attrs = do
o <- newZeroTimeVal
GI.Attributes.set o attrs
return o
noTimeVal :: Maybe TimeVal
noTimeVal = Nothing
getTimeValTvSec :: MonadIO m => TimeVal -> m CLong
getTimeValTvSec s = liftIO $ withManagedPtr s $ \ptr -> do
val <- peek (ptr `plusPtr` 0) :: IO CLong
return val
setTimeValTvSec :: MonadIO m => TimeVal -> CLong -> m ()
setTimeValTvSec s val = liftIO $ withManagedPtr s $ \ptr -> do
poke (ptr `plusPtr` 0) (val :: CLong)
data TimeValTvSecFieldInfo
instance AttrInfo TimeValTvSecFieldInfo where
type AttrAllowedOps TimeValTvSecFieldInfo = '[ 'AttrSet, 'AttrGet]
type AttrSetTypeConstraint TimeValTvSecFieldInfo = (~) CLong
type AttrBaseTypeConstraint TimeValTvSecFieldInfo = (~) TimeVal
type AttrGetType TimeValTvSecFieldInfo = CLong
type AttrLabel TimeValTvSecFieldInfo = "tv_sec"
type AttrOrigin TimeValTvSecFieldInfo = TimeVal
attrGet _ = getTimeValTvSec
attrSet _ = setTimeValTvSec
attrConstruct = undefined
attrClear _ = undefined
timeVal_tvSec :: AttrLabelProxy "tvSec"
timeVal_tvSec = AttrLabelProxy
getTimeValTvUsec :: MonadIO m => TimeVal -> m CLong
getTimeValTvUsec s = liftIO $ withManagedPtr s $ \ptr -> do
val <- peek (ptr `plusPtr` 8) :: IO CLong
return val
setTimeValTvUsec :: MonadIO m => TimeVal -> CLong -> m ()
setTimeValTvUsec s val = liftIO $ withManagedPtr s $ \ptr -> do
poke (ptr `plusPtr` 8) (val :: CLong)
data TimeValTvUsecFieldInfo
instance AttrInfo TimeValTvUsecFieldInfo where
type AttrAllowedOps TimeValTvUsecFieldInfo = '[ 'AttrSet, 'AttrGet]
type AttrSetTypeConstraint TimeValTvUsecFieldInfo = (~) CLong
type AttrBaseTypeConstraint TimeValTvUsecFieldInfo = (~) TimeVal
type AttrGetType TimeValTvUsecFieldInfo = CLong
type AttrLabel TimeValTvUsecFieldInfo = "tv_usec"
type AttrOrigin TimeValTvUsecFieldInfo = TimeVal
attrGet _ = getTimeValTvUsec
attrSet _ = setTimeValTvUsec
attrConstruct = undefined
attrClear _ = undefined
timeVal_tvUsec :: AttrLabelProxy "tvUsec"
timeVal_tvUsec = AttrLabelProxy
instance O.HasAttributeList TimeVal
type instance O.AttributeList TimeVal = TimeValAttributeList
type TimeValAttributeList = ('[ '("tvSec", TimeValTvSecFieldInfo), '("tvUsec", TimeValTvUsecFieldInfo)] :: [(Symbol, *)])
foreign import ccall "g_time_val_add" g_time_val_add ::
Ptr TimeVal ->
CLong ->
IO ()
timeValAdd ::
(B.CallStack.HasCallStack, MonadIO m) =>
TimeVal
-> CLong
-> m ()
timeValAdd time_ microseconds = liftIO $ do
time_' <- unsafeManagedPtrGetPtr time_
g_time_val_add time_' microseconds
touchManagedPtr time_
return ()
data TimeValAddMethodInfo
instance (signature ~ (CLong -> m ()), MonadIO m) => O.MethodInfo TimeValAddMethodInfo TimeVal signature where
overloadedMethod _ = timeValAdd
foreign import ccall "g_time_val_to_iso8601" g_time_val_to_iso8601 ::
Ptr TimeVal ->
IO CString
timeValToIso8601 ::
(B.CallStack.HasCallStack, MonadIO m) =>
TimeVal
-> m T.Text
timeValToIso8601 time_ = liftIO $ do
time_' <- unsafeManagedPtrGetPtr time_
result <- g_time_val_to_iso8601 time_'
checkUnexpectedReturnNULL "timeValToIso8601" result
result' <- cstringToText result
freeMem result
touchManagedPtr time_
return result'
data TimeValToIso8601MethodInfo
instance (signature ~ (m T.Text), MonadIO m) => O.MethodInfo TimeValToIso8601MethodInfo TimeVal signature where
overloadedMethod _ = timeValToIso8601
foreign import ccall "g_time_val_from_iso8601" g_time_val_from_iso8601 ::
CString ->
Ptr TimeVal ->
IO CInt
timeValFromIso8601 ::
(B.CallStack.HasCallStack, MonadIO m) =>
T.Text
-> m (Bool,TimeVal)
timeValFromIso8601 isoDate = liftIO $ do
isoDate' <- textToCString isoDate
time_ <- callocBytes 16 :: IO (Ptr TimeVal)
result <- g_time_val_from_iso8601 isoDate' time_
let result' = (/= 0) result
time_' <- (wrapPtr TimeVal) time_
freeMem isoDate'
return (result', time_')
type family ResolveTimeValMethod (t :: Symbol) (o :: *) :: * where
ResolveTimeValMethod "add" o = TimeValAddMethodInfo
ResolveTimeValMethod "toIso8601" o = TimeValToIso8601MethodInfo
ResolveTimeValMethod l o = O.MethodResolutionFailed l o
instance (info ~ ResolveTimeValMethod t TimeVal, O.MethodInfo info TimeVal p) => O.IsLabelProxy t (TimeVal -> p) where
fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveTimeValMethod t TimeVal, O.MethodInfo info TimeVal p) => O.IsLabel t (TimeVal -> p) where
fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif