gi-glib-0.2.46.15: GI/GLib/Structs/Node.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)
The #GNode struct represents one node in a [n-ary tree][glib-N-ary-Trees].
-}
module GI.GLib.Structs.Node
(
-- * Exported types
Node(..) ,
newZeroNode ,
noNode ,
-- * Methods
-- ** nodeChildIndex
NodeChildIndexMethodInfo ,
nodeChildIndex ,
-- ** nodeChildPosition
NodeChildPositionMethodInfo ,
nodeChildPosition ,
-- ** nodeDepth
NodeDepthMethodInfo ,
nodeDepth ,
-- ** nodeDestroy
NodeDestroyMethodInfo ,
nodeDestroy ,
-- ** nodeIsAncestor
NodeIsAncestorMethodInfo ,
nodeIsAncestor ,
-- ** nodeMaxHeight
NodeMaxHeightMethodInfo ,
nodeMaxHeight ,
-- ** nodeNChildren
NodeNChildrenMethodInfo ,
nodeNChildren ,
-- ** nodeNNodes
NodeNNodesMethodInfo ,
nodeNNodes ,
-- ** nodeReverseChildren
NodeReverseChildrenMethodInfo ,
nodeReverseChildren ,
-- ** nodeUnlink
NodeUnlinkMethodInfo ,
nodeUnlink ,
-- * Properties
-- ** Children
nodeChildren ,
nodeClearChildren ,
nodeReadChildren ,
nodeWriteChildren ,
-- ** Data
nodeClearData ,
nodeData ,
nodeReadData ,
nodeWriteData ,
-- ** Next
nodeClearNext ,
nodeNext ,
nodeReadNext ,
nodeWriteNext ,
-- ** Parent
nodeClearParent ,
nodeParent ,
nodeReadParent ,
nodeWriteParent ,
-- ** Prev
nodeClearPrev ,
nodePrev ,
nodeReadPrev ,
nodeWritePrev ,
) 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 Node = Node (ForeignPtr Node)
instance WrappedPtr Node where
wrappedPtrCalloc = callocBytes 40
wrappedPtrCopy = copyPtr 40
wrappedPtrFree = Just ptr_to_g_free
-- | Construct a `Node` struct initialized to zero.
newZeroNode :: MonadIO m => m Node
newZeroNode = liftIO $ wrappedPtrCalloc >>= wrapPtr Node
instance tag ~ 'AttrSet => Constructible Node tag where
new _ attrs = do
o <- newZeroNode
GI.Attributes.set o attrs
return o
noNode :: Maybe Node
noNode = Nothing
nodeReadData :: MonadIO m => Node -> m (Ptr ())
nodeReadData s = liftIO $ withManagedPtr s $ \ptr -> do
val <- peek (ptr `plusPtr` 0) :: IO (Ptr ())
return val
nodeWriteData :: MonadIO m => Node -> Ptr () -> m ()
nodeWriteData s val = liftIO $ withManagedPtr s $ \ptr -> do
poke (ptr `plusPtr` 0) (val :: Ptr ())
nodeClearData :: MonadIO m => Node -> m ()
nodeClearData s = liftIO $ withManagedPtr s $ \ptr -> do
poke (ptr `plusPtr` 0) (nullPtr :: Ptr ())
data NodeDataFieldInfo
instance AttrInfo NodeDataFieldInfo where
type AttrAllowedOps NodeDataFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
type AttrSetTypeConstraint NodeDataFieldInfo = (~) (Ptr ())
type AttrBaseTypeConstraint NodeDataFieldInfo = (~) Node
type AttrGetType NodeDataFieldInfo = Ptr ()
type AttrLabel NodeDataFieldInfo = "data"
attrGet _ = nodeReadData
attrSet _ = nodeWriteData
attrConstruct = undefined
attrClear _ = nodeClearData
nodeData :: AttrLabelProxy "data"
nodeData = AttrLabelProxy
nodeReadNext :: MonadIO m => Node -> m (Maybe Node)
nodeReadNext s = liftIO $ withManagedPtr s $ \ptr -> do
val <- peek (ptr `plusPtr` 8) :: IO (Ptr Node)
result <- convertIfNonNull val $ \val' -> do
val'' <- (newPtr Node) val'
return val''
return result
nodeWriteNext :: MonadIO m => Node -> Ptr Node -> m ()
nodeWriteNext s val = liftIO $ withManagedPtr s $ \ptr -> do
poke (ptr `plusPtr` 8) (val :: Ptr Node)
nodeClearNext :: MonadIO m => Node -> m ()
nodeClearNext s = liftIO $ withManagedPtr s $ \ptr -> do
poke (ptr `plusPtr` 8) (nullPtr :: Ptr Node)
data NodeNextFieldInfo
instance AttrInfo NodeNextFieldInfo where
type AttrAllowedOps NodeNextFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
type AttrSetTypeConstraint NodeNextFieldInfo = (~) (Ptr Node)
type AttrBaseTypeConstraint NodeNextFieldInfo = (~) Node
type AttrGetType NodeNextFieldInfo = Maybe Node
type AttrLabel NodeNextFieldInfo = "next"
attrGet _ = nodeReadNext
attrSet _ = nodeWriteNext
attrConstruct = undefined
attrClear _ = nodeClearNext
nodeNext :: AttrLabelProxy "next"
nodeNext = AttrLabelProxy
nodeReadPrev :: MonadIO m => Node -> m (Maybe Node)
nodeReadPrev s = liftIO $ withManagedPtr s $ \ptr -> do
val <- peek (ptr `plusPtr` 16) :: IO (Ptr Node)
result <- convertIfNonNull val $ \val' -> do
val'' <- (newPtr Node) val'
return val''
return result
nodeWritePrev :: MonadIO m => Node -> Ptr Node -> m ()
nodeWritePrev s val = liftIO $ withManagedPtr s $ \ptr -> do
poke (ptr `plusPtr` 16) (val :: Ptr Node)
nodeClearPrev :: MonadIO m => Node -> m ()
nodeClearPrev s = liftIO $ withManagedPtr s $ \ptr -> do
poke (ptr `plusPtr` 16) (nullPtr :: Ptr Node)
data NodePrevFieldInfo
instance AttrInfo NodePrevFieldInfo where
type AttrAllowedOps NodePrevFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
type AttrSetTypeConstraint NodePrevFieldInfo = (~) (Ptr Node)
type AttrBaseTypeConstraint NodePrevFieldInfo = (~) Node
type AttrGetType NodePrevFieldInfo = Maybe Node
type AttrLabel NodePrevFieldInfo = "prev"
attrGet _ = nodeReadPrev
attrSet _ = nodeWritePrev
attrConstruct = undefined
attrClear _ = nodeClearPrev
nodePrev :: AttrLabelProxy "prev"
nodePrev = AttrLabelProxy
nodeReadParent :: MonadIO m => Node -> m (Maybe Node)
nodeReadParent s = liftIO $ withManagedPtr s $ \ptr -> do
val <- peek (ptr `plusPtr` 24) :: IO (Ptr Node)
result <- convertIfNonNull val $ \val' -> do
val'' <- (newPtr Node) val'
return val''
return result
nodeWriteParent :: MonadIO m => Node -> Ptr Node -> m ()
nodeWriteParent s val = liftIO $ withManagedPtr s $ \ptr -> do
poke (ptr `plusPtr` 24) (val :: Ptr Node)
nodeClearParent :: MonadIO m => Node -> m ()
nodeClearParent s = liftIO $ withManagedPtr s $ \ptr -> do
poke (ptr `plusPtr` 24) (nullPtr :: Ptr Node)
data NodeParentFieldInfo
instance AttrInfo NodeParentFieldInfo where
type AttrAllowedOps NodeParentFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
type AttrSetTypeConstraint NodeParentFieldInfo = (~) (Ptr Node)
type AttrBaseTypeConstraint NodeParentFieldInfo = (~) Node
type AttrGetType NodeParentFieldInfo = Maybe Node
type AttrLabel NodeParentFieldInfo = "parent"
attrGet _ = nodeReadParent
attrSet _ = nodeWriteParent
attrConstruct = undefined
attrClear _ = nodeClearParent
nodeParent :: AttrLabelProxy "parent"
nodeParent = AttrLabelProxy
nodeReadChildren :: MonadIO m => Node -> m (Maybe Node)
nodeReadChildren s = liftIO $ withManagedPtr s $ \ptr -> do
val <- peek (ptr `plusPtr` 32) :: IO (Ptr Node)
result <- convertIfNonNull val $ \val' -> do
val'' <- (newPtr Node) val'
return val''
return result
nodeWriteChildren :: MonadIO m => Node -> Ptr Node -> m ()
nodeWriteChildren s val = liftIO $ withManagedPtr s $ \ptr -> do
poke (ptr `plusPtr` 32) (val :: Ptr Node)
nodeClearChildren :: MonadIO m => Node -> m ()
nodeClearChildren s = liftIO $ withManagedPtr s $ \ptr -> do
poke (ptr `plusPtr` 32) (nullPtr :: Ptr Node)
data NodeChildrenFieldInfo
instance AttrInfo NodeChildrenFieldInfo where
type AttrAllowedOps NodeChildrenFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
type AttrSetTypeConstraint NodeChildrenFieldInfo = (~) (Ptr Node)
type AttrBaseTypeConstraint NodeChildrenFieldInfo = (~) Node
type AttrGetType NodeChildrenFieldInfo = Maybe Node
type AttrLabel NodeChildrenFieldInfo = "children"
attrGet _ = nodeReadChildren
attrSet _ = nodeWriteChildren
attrConstruct = undefined
attrClear _ = nodeClearChildren
nodeChildren :: AttrLabelProxy "children"
nodeChildren = AttrLabelProxy
type instance AttributeList Node = NodeAttributeList
type NodeAttributeList = ('[ '("data", NodeDataFieldInfo), '("next", NodeNextFieldInfo), '("prev", NodePrevFieldInfo), '("parent", NodeParentFieldInfo), '("children", NodeChildrenFieldInfo)] :: [(Symbol, *)])
-- method Node::child_index
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Node", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TInt)
-- throws : False
-- Skip return : False
foreign import ccall "g_node_child_index" g_node_child_index ::
Ptr Node -> -- _obj : TInterface "GLib" "Node"
Ptr () -> -- data : TBasicType TPtr
IO Int32
nodeChildIndex ::
(MonadIO m) =>
Node -- _obj
-> Ptr () -- data_
-> m Int32 -- result
nodeChildIndex _obj data_ = liftIO $ do
let _obj' = unsafeManagedPtrGetPtr _obj
result <- g_node_child_index _obj' data_
touchManagedPtr _obj
return result
data NodeChildIndexMethodInfo
instance (signature ~ (Ptr () -> m Int32), MonadIO m) => MethodInfo NodeChildIndexMethodInfo Node signature where
overloadedMethod _ = nodeChildIndex
-- method Node::child_position
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Node", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "child", argType = TInterface "GLib" "Node", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TInt)
-- throws : False
-- Skip return : False
foreign import ccall "g_node_child_position" g_node_child_position ::
Ptr Node -> -- _obj : TInterface "GLib" "Node"
Ptr Node -> -- child : TInterface "GLib" "Node"
IO Int32
nodeChildPosition ::
(MonadIO m) =>
Node -- _obj
-> Node -- child
-> m Int32 -- result
nodeChildPosition _obj child = liftIO $ do
let _obj' = unsafeManagedPtrGetPtr _obj
let child' = unsafeManagedPtrGetPtr child
result <- g_node_child_position _obj' child'
touchManagedPtr _obj
touchManagedPtr child
return result
data NodeChildPositionMethodInfo
instance (signature ~ (Node -> m Int32), MonadIO m) => MethodInfo NodeChildPositionMethodInfo Node signature where
overloadedMethod _ = nodeChildPosition
-- method Node::depth
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Node", 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_node_depth" g_node_depth ::
Ptr Node -> -- _obj : TInterface "GLib" "Node"
IO Word32
nodeDepth ::
(MonadIO m) =>
Node -- _obj
-> m Word32 -- result
nodeDepth _obj = liftIO $ do
let _obj' = unsafeManagedPtrGetPtr _obj
result <- g_node_depth _obj'
touchManagedPtr _obj
return result
data NodeDepthMethodInfo
instance (signature ~ (m Word32), MonadIO m) => MethodInfo NodeDepthMethodInfo Node signature where
overloadedMethod _ = nodeDepth
-- method Node::destroy
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Node", 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_node_destroy" g_node_destroy ::
Ptr Node -> -- _obj : TInterface "GLib" "Node"
IO ()
nodeDestroy ::
(MonadIO m) =>
Node -- _obj
-> m () -- result
nodeDestroy _obj = liftIO $ do
let _obj' = unsafeManagedPtrGetPtr _obj
g_node_destroy _obj'
touchManagedPtr _obj
return ()
data NodeDestroyMethodInfo
instance (signature ~ (m ()), MonadIO m) => MethodInfo NodeDestroyMethodInfo Node signature where
overloadedMethod _ = nodeDestroy
-- method Node::is_ancestor
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Node", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "descendant", argType = TInterface "GLib" "Node", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False
foreign import ccall "g_node_is_ancestor" g_node_is_ancestor ::
Ptr Node -> -- _obj : TInterface "GLib" "Node"
Ptr Node -> -- descendant : TInterface "GLib" "Node"
IO CInt
nodeIsAncestor ::
(MonadIO m) =>
Node -- _obj
-> Node -- descendant
-> m Bool -- result
nodeIsAncestor _obj descendant = liftIO $ do
let _obj' = unsafeManagedPtrGetPtr _obj
let descendant' = unsafeManagedPtrGetPtr descendant
result <- g_node_is_ancestor _obj' descendant'
let result' = (/= 0) result
touchManagedPtr _obj
touchManagedPtr descendant
return result'
data NodeIsAncestorMethodInfo
instance (signature ~ (Node -> m Bool), MonadIO m) => MethodInfo NodeIsAncestorMethodInfo Node signature where
overloadedMethod _ = nodeIsAncestor
-- method Node::max_height
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Node", 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_node_max_height" g_node_max_height ::
Ptr Node -> -- _obj : TInterface "GLib" "Node"
IO Word32
nodeMaxHeight ::
(MonadIO m) =>
Node -- _obj
-> m Word32 -- result
nodeMaxHeight _obj = liftIO $ do
let _obj' = unsafeManagedPtrGetPtr _obj
result <- g_node_max_height _obj'
touchManagedPtr _obj
return result
data NodeMaxHeightMethodInfo
instance (signature ~ (m Word32), MonadIO m) => MethodInfo NodeMaxHeightMethodInfo Node signature where
overloadedMethod _ = nodeMaxHeight
-- method Node::n_children
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Node", 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_node_n_children" g_node_n_children ::
Ptr Node -> -- _obj : TInterface "GLib" "Node"
IO Word32
nodeNChildren ::
(MonadIO m) =>
Node -- _obj
-> m Word32 -- result
nodeNChildren _obj = liftIO $ do
let _obj' = unsafeManagedPtrGetPtr _obj
result <- g_node_n_children _obj'
touchManagedPtr _obj
return result
data NodeNChildrenMethodInfo
instance (signature ~ (m Word32), MonadIO m) => MethodInfo NodeNChildrenMethodInfo Node signature where
overloadedMethod _ = nodeNChildren
-- method Node::n_nodes
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Node", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flags", argType = TInterface "GLib" "TraverseFlags", 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_node_n_nodes" g_node_n_nodes ::
Ptr Node -> -- _obj : TInterface "GLib" "Node"
CUInt -> -- flags : TInterface "GLib" "TraverseFlags"
IO Word32
nodeNNodes ::
(MonadIO m) =>
Node -- _obj
-> [TraverseFlags] -- flags
-> m Word32 -- result
nodeNNodes _obj flags = liftIO $ do
let _obj' = unsafeManagedPtrGetPtr _obj
let flags' = gflagsToWord flags
result <- g_node_n_nodes _obj' flags'
touchManagedPtr _obj
return result
data NodeNNodesMethodInfo
instance (signature ~ ([TraverseFlags] -> m Word32), MonadIO m) => MethodInfo NodeNNodesMethodInfo Node signature where
overloadedMethod _ = nodeNNodes
-- method Node::reverse_children
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Node", 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_node_reverse_children" g_node_reverse_children ::
Ptr Node -> -- _obj : TInterface "GLib" "Node"
IO ()
nodeReverseChildren ::
(MonadIO m) =>
Node -- _obj
-> m () -- result
nodeReverseChildren _obj = liftIO $ do
let _obj' = unsafeManagedPtrGetPtr _obj
g_node_reverse_children _obj'
touchManagedPtr _obj
return ()
data NodeReverseChildrenMethodInfo
instance (signature ~ (m ()), MonadIO m) => MethodInfo NodeReverseChildrenMethodInfo Node signature where
overloadedMethod _ = nodeReverseChildren
-- method Node::unlink
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GLib" "Node", 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_node_unlink" g_node_unlink ::
Ptr Node -> -- _obj : TInterface "GLib" "Node"
IO ()
nodeUnlink ::
(MonadIO m) =>
Node -- _obj
-> m () -- result
nodeUnlink _obj = liftIO $ do
let _obj' = unsafeManagedPtrGetPtr _obj
g_node_unlink _obj'
touchManagedPtr _obj
return ()
data NodeUnlinkMethodInfo
instance (signature ~ (m ()), MonadIO m) => MethodInfo NodeUnlinkMethodInfo Node signature where
overloadedMethod _ = nodeUnlink
type family ResolveNodeMethod (t :: Symbol) (o :: *) :: * where
ResolveNodeMethod "childIndex" o = NodeChildIndexMethodInfo
ResolveNodeMethod "childPosition" o = NodeChildPositionMethodInfo
ResolveNodeMethod "depth" o = NodeDepthMethodInfo
ResolveNodeMethod "destroy" o = NodeDestroyMethodInfo
ResolveNodeMethod "isAncestor" o = NodeIsAncestorMethodInfo
ResolveNodeMethod "maxHeight" o = NodeMaxHeightMethodInfo
ResolveNodeMethod "nChildren" o = NodeNChildrenMethodInfo
ResolveNodeMethod "nNodes" o = NodeNNodesMethodInfo
ResolveNodeMethod "reverseChildren" o = NodeReverseChildrenMethodInfo
ResolveNodeMethod "unlink" o = NodeUnlinkMethodInfo
ResolveNodeMethod l o = MethodResolutionFailed l o
instance (info ~ ResolveNodeMethod t Node, MethodInfo info Node p) => IsLabelProxy t (Node -> p) where
fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveNodeMethod t Node, MethodInfo info Node p) => IsLabel t (Node -> p) where
fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
#endif