{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc) A file descriptor object. -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.Gst.Structs.PollFD ( -- * Exported types PollFD(..) , newZeroPollFD , noPollFD , -- * Methods -- ** init #method:init# #if ENABLE_OVERLOADING PollFDInitMethodInfo , #endif pollFDInit , -- * Properties -- ** fd #attr:fd# {- | a file descriptor -} getPollFDFd , #if ENABLE_OVERLOADING pollFD_fd , #endif setPollFDFd , ) 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.GClosure as B.GClosure import qualified Data.GI.Base.GError as B.GError 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.Text as T 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 -- | Memory-managed wrapper type. newtype PollFD = PollFD (ManagedPtr PollFD) instance WrappedPtr PollFD where wrappedPtrCalloc = callocBytes 8 wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 8 >=> wrapPtr PollFD) wrappedPtrFree = Just ptr_to_g_free -- | Construct a `PollFD` struct initialized to zero. newZeroPollFD :: MonadIO m => m PollFD newZeroPollFD = liftIO $ wrappedPtrCalloc >>= wrapPtr PollFD instance tag ~ 'AttrSet => Constructible PollFD tag where new _ attrs = do o <- newZeroPollFD GI.Attributes.set o attrs return o -- | A convenience alias for `Nothing` :: `Maybe` `PollFD`. noPollFD :: Maybe PollFD noPollFD = Nothing {- | Get the value of the “@fd@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' pollFD #fd @ -} getPollFDFd :: MonadIO m => PollFD -> m Int32 getPollFDFd s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 0) :: IO Int32 return val {- | Set the value of the “@fd@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' pollFD [ #fd 'Data.GI.Base.Attributes.:=' value ] @ -} setPollFDFd :: MonadIO m => PollFD -> Int32 -> m () setPollFDFd s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 0) (val :: Int32) #if ENABLE_OVERLOADING data PollFDFdFieldInfo instance AttrInfo PollFDFdFieldInfo where type AttrAllowedOps PollFDFdFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint PollFDFdFieldInfo = (~) Int32 type AttrBaseTypeConstraint PollFDFdFieldInfo = (~) PollFD type AttrGetType PollFDFdFieldInfo = Int32 type AttrLabel PollFDFdFieldInfo = "fd" type AttrOrigin PollFDFdFieldInfo = PollFD attrGet _ = getPollFDFd attrSet _ = setPollFDFd attrConstruct = undefined attrClear _ = undefined pollFD_fd :: AttrLabelProxy "fd" pollFD_fd = AttrLabelProxy #endif #if ENABLE_OVERLOADING instance O.HasAttributeList PollFD type instance O.AttributeList PollFD = PollFDAttributeList type PollFDAttributeList = ('[ '("fd", PollFDFdFieldInfo)] :: [(Symbol, *)]) #endif -- method PollFD::init -- method type : OrdinaryMethod -- Args : [Arg {argCName = "fd", argType = TInterface (Name {namespace = "Gst", name = "PollFD"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstPollFD", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "gst_poll_fd_init" gst_poll_fd_init :: Ptr PollFD -> -- fd : TInterface (Name {namespace = "Gst", name = "PollFD"}) IO () {- | Initializes /@fd@/. Alternatively you can initialize it with @/GST_POLL_FD_INIT/@. -} pollFDInit :: (B.CallStack.HasCallStack, MonadIO m) => PollFD {- ^ /@fd@/: a 'GI.Gst.Structs.PollFD.PollFD' -} -> m () pollFDInit fd = liftIO $ do fd' <- unsafeManagedPtrGetPtr fd gst_poll_fd_init fd' touchManagedPtr fd return () #if ENABLE_OVERLOADING data PollFDInitMethodInfo instance (signature ~ (m ()), MonadIO m) => O.MethodInfo PollFDInitMethodInfo PollFD signature where overloadedMethod _ = pollFDInit #endif #if ENABLE_OVERLOADING type family ResolvePollFDMethod (t :: Symbol) (o :: *) :: * where ResolvePollFDMethod "init" o = PollFDInitMethodInfo ResolvePollFDMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolvePollFDMethod t PollFD, O.MethodInfo info PollFD p) => OL.IsLabel t (PollFD -> p) where #if MIN_VERSION_base(4,10,0) fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #else fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #endif #endif