packages feed

gi-glib-0.2.46.15: GI/GLib/Structs/TrashStack.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)

Each piece of memory that is pushed onto the stack
is cast to a GTrashStack*.
-}

module GI.GLib.Structs.TrashStack
    ( 

-- * Exported types
    TrashStack(..)                          ,
    newZeroTrashStack                       ,
    noTrashStack                            ,


 -- * Methods
-- ** trashStackHeight
    trashStackHeight                        ,


-- ** trashStackPush
    trashStackPush                          ,




 -- * Properties
-- ** Next
    trashStackClearNext                     ,
    trashStackNext                          ,
    trashStackReadNext                      ,
    trashStackWriteNext                     ,




    ) 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 TrashStack = TrashStack (ForeignPtr TrashStack)
instance WrappedPtr TrashStack where
    wrappedPtrCalloc = callocBytes 8
    wrappedPtrCopy = copyPtr 8
    wrappedPtrFree = Just ptr_to_g_free

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

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


noTrashStack :: Maybe TrashStack
noTrashStack = Nothing

trashStackReadNext :: MonadIO m => TrashStack -> m (Maybe TrashStack)
trashStackReadNext s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr TrashStack)
    result <- convertIfNonNull val $ \val' -> do
        val'' <- (newPtr TrashStack) val'
        return val''
    return result

trashStackWriteNext :: MonadIO m => TrashStack -> Ptr TrashStack -> m ()
trashStackWriteNext s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 0) (val :: Ptr TrashStack)

trashStackClearNext :: MonadIO m => TrashStack -> m ()
trashStackClearNext s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 0) (nullPtr :: Ptr TrashStack)

data TrashStackNextFieldInfo
instance AttrInfo TrashStackNextFieldInfo where
    type AttrAllowedOps TrashStackNextFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint TrashStackNextFieldInfo = (~) (Ptr TrashStack)
    type AttrBaseTypeConstraint TrashStackNextFieldInfo = (~) TrashStack
    type AttrGetType TrashStackNextFieldInfo = Maybe TrashStack
    type AttrLabel TrashStackNextFieldInfo = "next"
    attrGet _ = trashStackReadNext
    attrSet _ = trashStackWriteNext
    attrConstruct = undefined
    attrClear _ = trashStackClearNext

trashStackNext :: AttrLabelProxy "next"
trashStackNext = AttrLabelProxy



type instance AttributeList TrashStack = TrashStackAttributeList
type TrashStackAttributeList = ('[ '("next", TrashStackNextFieldInfo)] :: [(Symbol, *)])

-- method TrashStack::height
-- method type : MemberFunction
-- Args : [Arg {argCName = "stack_p", argType = TInterface "GLib" "TrashStack", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUInt)
-- throws : False
-- Skip return : False

foreign import ccall "g_trash_stack_height" g_trash_stack_height :: 
    Ptr TrashStack ->                       -- stack_p : TInterface "GLib" "TrashStack"
    IO Word32


trashStackHeight ::
    (MonadIO m) =>
    TrashStack                              -- stackP
    -> m Word32                             -- result
trashStackHeight stackP = liftIO $ do
    let stackP' = unsafeManagedPtrGetPtr stackP
    result <- g_trash_stack_height stackP'
    touchManagedPtr stackP
    return result

-- method TrashStack::push
-- method type : MemberFunction
-- Args : [Arg {argCName = "stack_p", argType = TInterface "GLib" "TrashStack", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "data_p", 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_trash_stack_push" g_trash_stack_push :: 
    Ptr TrashStack ->                       -- stack_p : TInterface "GLib" "TrashStack"
    Ptr () ->                               -- data_p : TBasicType TPtr
    IO ()


trashStackPush ::
    (MonadIO m) =>
    TrashStack                              -- stackP
    -> Ptr ()                               -- dataP
    -> m ()                                 -- result
trashStackPush stackP dataP = liftIO $ do
    let stackP' = unsafeManagedPtrGetPtr stackP
    g_trash_stack_push stackP' dataP
    touchManagedPtr stackP
    return ()

type family ResolveTrashStackMethod (t :: Symbol) (o :: *) :: * where
    ResolveTrashStackMethod l o = MethodResolutionFailed l o

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

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