{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (garetxe@gmail.com) Contains the public fields of a [Queue][glib-Double-ended-Queues]. -} module GI.GLib.Structs.Queue ( -- * Exported types Queue(..) , newZeroQueue , noQueue , -- * Methods -- ** queueClear QueueClearMethodInfo , queueClear , -- ** queueFree QueueFreeMethodInfo , queueFree , -- ** queueFreeFull QueueFreeFullMethodInfo , queueFreeFull , -- ** queueGetLength QueueGetLengthMethodInfo , queueGetLength , -- ** queueIndex QueueIndexMethodInfo , queueIndex , -- ** queueInit QueueInitMethodInfo , queueInit , -- ** queueIsEmpty QueueIsEmptyMethodInfo , queueIsEmpty , -- ** queuePushHead QueuePushHeadMethodInfo , queuePushHead , -- ** queuePushNth QueuePushNthMethodInfo , queuePushNth , -- ** queuePushTail QueuePushTailMethodInfo , queuePushTail , -- ** queueRemove QueueRemoveMethodInfo , queueRemove , -- ** queueRemoveAll QueueRemoveAllMethodInfo , queueRemoveAll , -- ** queueReverse QueueReverseMethodInfo , queueReverse , -- * Properties -- ** Head queueReadHead , -- ** Length queueReadLength , -- ** Tail queueReadTail , ) where import Prelude () import Data.GI.Base.ShortPrelude import qualified Data.Text as T import qualified Data.ByteString.Char8 as B import qualified Data.Map as Map import GI.GLib.Types import GI.GLib.Callbacks newtype Queue = Queue (ForeignPtr Queue) -- | Construct a `Queue` struct initialized to zero. newZeroQueue :: MonadIO m => m Queue newZeroQueue = liftIO $ callocBytes 24 >>= wrapPtr Queue noQueue :: Maybe Queue noQueue = Nothing queueReadHead :: Queue -> IO ([Ptr ()]) queueReadHead s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 0) :: IO (Ptr (GList (Ptr ()))) val' <- unpackGList val return val' queueReadTail :: Queue -> IO ([Ptr ()]) queueReadTail s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 8) :: IO (Ptr (GList (Ptr ()))) val' <- unpackGList val return val' queueReadLength :: Queue -> IO Word32 queueReadLength s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 16) :: IO Word32 return val -- method Queue::clear -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Queue", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "g_queue_clear" g_queue_clear :: Ptr Queue -> -- _obj : TInterface "GLib" "Queue" IO () queueClear :: (MonadIO m) => Queue -- _obj -> m () -- result queueClear _obj = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj g_queue_clear _obj' touchManagedPtr _obj return () data QueueClearMethodInfo instance (signature ~ (m ()), MonadIO m) => MethodInfo QueueClearMethodInfo Queue signature where overloadedMethod _ = queueClear -- method Queue::free -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Queue", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "g_queue_free" g_queue_free :: Ptr Queue -> -- _obj : TInterface "GLib" "Queue" IO () queueFree :: (MonadIO m) => Queue -- _obj -> m () -- result queueFree _obj = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj g_queue_free _obj' touchManagedPtr _obj return () data QueueFreeMethodInfo instance (signature ~ (m ()), MonadIO m) => MethodInfo QueueFreeMethodInfo Queue signature where overloadedMethod _ = queueFree -- method Queue::free_full -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Queue", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "free_func", argType = TInterface "GLib" "DestroyNotify", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "g_queue_free_full" g_queue_free_full :: Ptr Queue -> -- _obj : TInterface "GLib" "Queue" FunPtr DestroyNotifyC -> -- free_func : TInterface "GLib" "DestroyNotify" IO () queueFreeFull :: (MonadIO m) => Queue -- _obj -> DestroyNotify -- freeFunc -> m () -- result queueFreeFull _obj freeFunc = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj ptrfreeFunc <- callocMem :: IO (Ptr (FunPtr DestroyNotifyC)) freeFunc' <- mkDestroyNotify (destroyNotifyWrapper (Just ptrfreeFunc) freeFunc) poke ptrfreeFunc freeFunc' g_queue_free_full _obj' freeFunc' touchManagedPtr _obj return () data QueueFreeFullMethodInfo instance (signature ~ (DestroyNotify -> m ()), MonadIO m) => MethodInfo QueueFreeFullMethodInfo Queue signature where overloadedMethod _ = queueFreeFull -- method Queue::get_length -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Queue", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TBasicType TUInt32 -- throws : False -- Skip return : False foreign import ccall "g_queue_get_length" g_queue_get_length :: Ptr Queue -> -- _obj : TInterface "GLib" "Queue" IO Word32 queueGetLength :: (MonadIO m) => Queue -- _obj -> m Word32 -- result queueGetLength _obj = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj result <- g_queue_get_length _obj' touchManagedPtr _obj return result data QueueGetLengthMethodInfo instance (signature ~ (m Word32), MonadIO m) => MethodInfo QueueGetLengthMethodInfo Queue signature where overloadedMethod _ = queueGetLength -- method Queue::index -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Queue", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TBasicType TInt32 -- throws : False -- Skip return : False foreign import ccall "g_queue_index" g_queue_index :: Ptr Queue -> -- _obj : TInterface "GLib" "Queue" Ptr () -> -- data : TBasicType TVoid IO Int32 queueIndex :: (MonadIO m) => Queue -- _obj -> Ptr () -- data_ -> m Int32 -- result queueIndex _obj data_ = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj result <- g_queue_index _obj' data_ touchManagedPtr _obj return result data QueueIndexMethodInfo instance (signature ~ (Ptr () -> m Int32), MonadIO m) => MethodInfo QueueIndexMethodInfo Queue signature where overloadedMethod _ = queueIndex -- method Queue::init -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Queue", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "g_queue_init" g_queue_init :: Ptr Queue -> -- _obj : TInterface "GLib" "Queue" IO () queueInit :: (MonadIO m) => Queue -- _obj -> m () -- result queueInit _obj = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj g_queue_init _obj' touchManagedPtr _obj return () data QueueInitMethodInfo instance (signature ~ (m ()), MonadIO m) => MethodInfo QueueInitMethodInfo Queue signature where overloadedMethod _ = queueInit -- method Queue::is_empty -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Queue", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TBasicType TBoolean -- throws : False -- Skip return : False foreign import ccall "g_queue_is_empty" g_queue_is_empty :: Ptr Queue -> -- _obj : TInterface "GLib" "Queue" IO CInt queueIsEmpty :: (MonadIO m) => Queue -- _obj -> m Bool -- result queueIsEmpty _obj = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj result <- g_queue_is_empty _obj' let result' = (/= 0) result touchManagedPtr _obj return result' data QueueIsEmptyMethodInfo instance (signature ~ (m Bool), MonadIO m) => MethodInfo QueueIsEmptyMethodInfo Queue signature where overloadedMethod _ = queueIsEmpty -- method Queue::push_head -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Queue", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "g_queue_push_head" g_queue_push_head :: Ptr Queue -> -- _obj : TInterface "GLib" "Queue" Ptr () -> -- data : TBasicType TVoid IO () queuePushHead :: (MonadIO m) => Queue -- _obj -> Ptr () -- data_ -> m () -- result queuePushHead _obj data_ = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj g_queue_push_head _obj' data_ touchManagedPtr _obj return () data QueuePushHeadMethodInfo instance (signature ~ (Ptr () -> m ()), MonadIO m) => MethodInfo QueuePushHeadMethodInfo Queue signature where overloadedMethod _ = queuePushHead -- method Queue::push_nth -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Queue", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "n", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "g_queue_push_nth" g_queue_push_nth :: Ptr Queue -> -- _obj : TInterface "GLib" "Queue" Ptr () -> -- data : TBasicType TVoid Int32 -> -- n : TBasicType TInt32 IO () queuePushNth :: (MonadIO m) => Queue -- _obj -> Ptr () -- data_ -> Int32 -- n -> m () -- result queuePushNth _obj data_ n = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj g_queue_push_nth _obj' data_ n touchManagedPtr _obj return () data QueuePushNthMethodInfo instance (signature ~ (Ptr () -> Int32 -> m ()), MonadIO m) => MethodInfo QueuePushNthMethodInfo Queue signature where overloadedMethod _ = queuePushNth -- method Queue::push_tail -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Queue", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "g_queue_push_tail" g_queue_push_tail :: Ptr Queue -> -- _obj : TInterface "GLib" "Queue" Ptr () -> -- data : TBasicType TVoid IO () queuePushTail :: (MonadIO m) => Queue -- _obj -> Ptr () -- data_ -> m () -- result queuePushTail _obj data_ = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj g_queue_push_tail _obj' data_ touchManagedPtr _obj return () data QueuePushTailMethodInfo instance (signature ~ (Ptr () -> m ()), MonadIO m) => MethodInfo QueuePushTailMethodInfo Queue signature where overloadedMethod _ = queuePushTail -- method Queue::remove -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Queue", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TBasicType TBoolean -- throws : False -- Skip return : False foreign import ccall "g_queue_remove" g_queue_remove :: Ptr Queue -> -- _obj : TInterface "GLib" "Queue" Ptr () -> -- data : TBasicType TVoid IO CInt queueRemove :: (MonadIO m) => Queue -- _obj -> Ptr () -- data_ -> m Bool -- result queueRemove _obj data_ = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj result <- g_queue_remove _obj' data_ let result' = (/= 0) result touchManagedPtr _obj return result' data QueueRemoveMethodInfo instance (signature ~ (Ptr () -> m Bool), MonadIO m) => MethodInfo QueueRemoveMethodInfo Queue signature where overloadedMethod _ = queueRemove -- method Queue::remove_all -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Queue", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TBasicType TUInt32 -- throws : False -- Skip return : False foreign import ccall "g_queue_remove_all" g_queue_remove_all :: Ptr Queue -> -- _obj : TInterface "GLib" "Queue" Ptr () -> -- data : TBasicType TVoid IO Word32 queueRemoveAll :: (MonadIO m) => Queue -- _obj -> Ptr () -- data_ -> m Word32 -- result queueRemoveAll _obj data_ = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj result <- g_queue_remove_all _obj' data_ touchManagedPtr _obj return result data QueueRemoveAllMethodInfo instance (signature ~ (Ptr () -> m Word32), MonadIO m) => MethodInfo QueueRemoveAllMethodInfo Queue signature where overloadedMethod _ = queueRemoveAll -- method Queue::reverse -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Queue", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "g_queue_reverse" g_queue_reverse :: Ptr Queue -> -- _obj : TInterface "GLib" "Queue" IO () queueReverse :: (MonadIO m) => Queue -- _obj -> m () -- result queueReverse _obj = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj g_queue_reverse _obj' touchManagedPtr _obj return () data QueueReverseMethodInfo instance (signature ~ (m ()), MonadIO m) => MethodInfo QueueReverseMethodInfo Queue signature where overloadedMethod _ = queueReverse type family ResolveQueueMethod (t :: Symbol) (o :: *) :: * where ResolveQueueMethod "clear" o = QueueClearMethodInfo ResolveQueueMethod "free" o = QueueFreeMethodInfo ResolveQueueMethod "freeFull" o = QueueFreeFullMethodInfo ResolveQueueMethod "index" o = QueueIndexMethodInfo ResolveQueueMethod "init" o = QueueInitMethodInfo ResolveQueueMethod "isEmpty" o = QueueIsEmptyMethodInfo ResolveQueueMethod "pushHead" o = QueuePushHeadMethodInfo ResolveQueueMethod "pushNth" o = QueuePushNthMethodInfo ResolveQueueMethod "pushTail" o = QueuePushTailMethodInfo ResolveQueueMethod "remove" o = QueueRemoveMethodInfo ResolveQueueMethod "removeAll" o = QueueRemoveAllMethodInfo ResolveQueueMethod "reverse" o = QueueReverseMethodInfo ResolveQueueMethod "getLength" o = QueueGetLengthMethodInfo ResolveQueueMethod l o = MethodResolutionFailed l o instance (info ~ ResolveQueueMethod t Queue, MethodInfo info Queue p) => IsLabelProxy t (Queue -> p) where fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info) #if MIN_VERSION_base(4,9,0) instance (info ~ ResolveQueueMethod t Queue, MethodInfo info Queue p) => IsLabel t (Queue -> p) where fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info) #endif