packages feed

gi-glib-0.2.46.15: GI/GLib/Structs/HashTableIter.hs


{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)

A GHashTableIter structure represents an iterator that can be used
to iterate over the elements of a #GHashTable. GHashTableIter
structures are typically allocated on the stack and then initialized
with g_hash_table_iter_init().
-}

module GI.GLib.Structs.HashTableIter
    ( 

-- * Exported types
    HashTableIter(..)                       ,
    newZeroHashTableIter                    ,
    noHashTableIter                         ,


 -- * Methods
-- ** hashTableIterInit
    HashTableIterInitMethodInfo             ,
    hashTableIterInit                       ,


-- ** hashTableIterNext
    HashTableIterNextMethodInfo             ,
    hashTableIterNext                       ,


-- ** hashTableIterRemove
    HashTableIterRemoveMethodInfo           ,
    hashTableIterRemove                     ,


-- ** hashTableIterReplace
    HashTableIterReplaceMethodInfo          ,
    hashTableIterReplace                    ,


-- ** hashTableIterSteal
    HashTableIterStealMethodInfo            ,
    hashTableIterSteal                      ,




    ) where

import Data.GI.Base.ShortPrelude

import qualified Data.GI.Base.Attributes as GI.Attributes
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 HashTableIter = HashTableIter (ForeignPtr HashTableIter)
instance WrappedPtr HashTableIter where
    wrappedPtrCalloc = callocBytes 40
    wrappedPtrCopy = copyPtr 40
    wrappedPtrFree = Just ptr_to_g_free

-- | Construct a `HashTableIter` struct initialized to zero.
newZeroHashTableIter :: MonadIO m => m HashTableIter
newZeroHashTableIter = liftIO $ wrappedPtrCalloc >>= wrapPtr HashTableIter

instance tag ~ 'AttrSet => Constructible HashTableIter tag where
    new _ attrs = do
        o <- newZeroHashTableIter
        GI.Attributes.set o attrs
        return o


noHashTableIter :: Maybe HashTableIter
noHashTableIter = Nothing


type instance AttributeList HashTableIter = HashTableIterAttributeList
type HashTableIterAttributeList = ('[ ] :: [(Symbol, *)])

-- method HashTableIter::init
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "HashTableIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "hash_table", argType = TGHash (TBasicType TPtr) (TBasicType TPtr), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "g_hash_table_iter_init" g_hash_table_iter_init :: 
    Ptr HashTableIter ->                    -- _obj : TInterface "GLib" "HashTableIter"
    Ptr (GHashTable (Ptr ()) (Ptr ())) ->   -- hash_table : TGHash (TBasicType TPtr) (TBasicType TPtr)
    IO ()


hashTableIterInit ::
    (MonadIO m) =>
    HashTableIter                           -- _obj
    -> Map.Map (Ptr ()) (Ptr ())            -- hashTable
    -> m ()                                 -- result
hashTableIterInit _obj hashTable = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    let hashTable' = Map.toList hashTable
    let hashTable'' = mapFirst ptrPackPtr hashTable'
    let hashTable''' = mapSecond ptrPackPtr hashTable''
    hashTable'''' <- packGHashTable gDirectHash gDirectEqual Nothing Nothing hashTable'''
    g_hash_table_iter_init _obj' hashTable''''
    touchManagedPtr _obj
    unrefGHashTable hashTable''''
    return ()

data HashTableIterInitMethodInfo
instance (signature ~ (Map.Map (Ptr ()) (Ptr ()) -> m ()), MonadIO m) => MethodInfo HashTableIterInitMethodInfo HashTableIter signature where
    overloadedMethod _ = hashTableIterInit

-- method HashTableIter::next
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "HashTableIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "key", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "g_hash_table_iter_next" g_hash_table_iter_next :: 
    Ptr HashTableIter ->                    -- _obj : TInterface "GLib" "HashTableIter"
    Ptr () ->                               -- key : TBasicType TPtr
    Ptr () ->                               -- value : TBasicType TPtr
    IO CInt


hashTableIterNext ::
    (MonadIO m) =>
    HashTableIter                           -- _obj
    -> Ptr ()                               -- key
    -> Ptr ()                               -- value
    -> m Bool                               -- result
hashTableIterNext _obj key value = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    result <- g_hash_table_iter_next _obj' key value
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'

data HashTableIterNextMethodInfo
instance (signature ~ (Ptr () -> Ptr () -> m Bool), MonadIO m) => MethodInfo HashTableIterNextMethodInfo HashTableIter signature where
    overloadedMethod _ = hashTableIterNext

-- method HashTableIter::remove
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "HashTableIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "g_hash_table_iter_remove" g_hash_table_iter_remove :: 
    Ptr HashTableIter ->                    -- _obj : TInterface "GLib" "HashTableIter"
    IO ()


hashTableIterRemove ::
    (MonadIO m) =>
    HashTableIter                           -- _obj
    -> m ()                                 -- result
hashTableIterRemove _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    g_hash_table_iter_remove _obj'
    touchManagedPtr _obj
    return ()

data HashTableIterRemoveMethodInfo
instance (signature ~ (m ()), MonadIO m) => MethodInfo HashTableIterRemoveMethodInfo HashTableIter signature where
    overloadedMethod _ = hashTableIterRemove

-- method HashTableIter::replace
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "HashTableIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "g_hash_table_iter_replace" g_hash_table_iter_replace :: 
    Ptr HashTableIter ->                    -- _obj : TInterface "GLib" "HashTableIter"
    Ptr () ->                               -- value : TBasicType TPtr
    IO ()


hashTableIterReplace ::
    (MonadIO m) =>
    HashTableIter                           -- _obj
    -> Ptr ()                               -- value
    -> m ()                                 -- result
hashTableIterReplace _obj value = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    g_hash_table_iter_replace _obj' value
    touchManagedPtr _obj
    return ()

data HashTableIterReplaceMethodInfo
instance (signature ~ (Ptr () -> m ()), MonadIO m) => MethodInfo HashTableIterReplaceMethodInfo HashTableIter signature where
    overloadedMethod _ = hashTableIterReplace

-- method HashTableIter::steal
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "HashTableIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "g_hash_table_iter_steal" g_hash_table_iter_steal :: 
    Ptr HashTableIter ->                    -- _obj : TInterface "GLib" "HashTableIter"
    IO ()


hashTableIterSteal ::
    (MonadIO m) =>
    HashTableIter                           -- _obj
    -> m ()                                 -- result
hashTableIterSteal _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    g_hash_table_iter_steal _obj'
    touchManagedPtr _obj
    return ()

data HashTableIterStealMethodInfo
instance (signature ~ (m ()), MonadIO m) => MethodInfo HashTableIterStealMethodInfo HashTableIter signature where
    overloadedMethod _ = hashTableIterSteal

type family ResolveHashTableIterMethod (t :: Symbol) (o :: *) :: * where
    ResolveHashTableIterMethod "init" o = HashTableIterInitMethodInfo
    ResolveHashTableIterMethod "next" o = HashTableIterNextMethodInfo
    ResolveHashTableIterMethod "remove" o = HashTableIterRemoveMethodInfo
    ResolveHashTableIterMethod "replace" o = HashTableIterReplaceMethodInfo
    ResolveHashTableIterMethod "steal" o = HashTableIterStealMethodInfo
    ResolveHashTableIterMethod l o = MethodResolutionFailed l o

instance (info ~ ResolveHashTableIterMethod t HashTableIter, MethodInfo info HashTableIter p) => IsLabelProxy t (HashTableIter -> p) where
    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveHashTableIterMethod t HashTableIter, MethodInfo info HashTableIter p) => IsLabel t (HashTableIter -> p) where
    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
#endif