    -- GENERATED by C->Haskell Compiler, version 0.13.13 (gtk2hs branch) "Bin IO", 27 May 2012 (Haskell)
    -- Edit the ORIGINAL .chs file instead!

    {-# LINE 1 "./System/Glib/GValue.chs" #-}
    -- -*-haskell-*-
    --  GIMP Toolkit (GTK) GValue
    --
    --  Author : Axel Simon
    --
    --  Created: 1 June 2001
    --
    --  Copyright (c) 1999..2002 Axel Simon
    --
    --  This library is free software; you can redistribute it and/or
    --  modify it under the terms of the GNU Lesser General Public
    --  License as published by the Free Software Foundation; either
    --  version 2.1 of the License, or (at your option) any later version.
    --
    --  This library is distributed in the hope that it will be useful,
    --  but WITHOUT ANY WARRANTY; without even the implied warranty of
    --  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    --  Lesser General Public License for more details.
    --
    -- |
    -- Maintainer  : gtk2hs-users@lists.sourceforge.net
    -- Stability   : provisional
    -- Portability : portable (depends on GHC)
    --
    -- This module implements only the necessities for the GTK binding.
    --
    -- * Everything here is only used by "Graphics.UI.Gtk.TreeList.TreeModel" and
    -- friends.
    --
    module System.Glib.GValue (
      GValue(GValue),
      valueInit,
      valueGetType,
      allocaGValue
      ) where

    import System.Glib.FFI
    import System.Glib.GType        (GType)

    {-# LINE 40 "./System/Glib/GValue.chs" #-}

    newtype GValue = GValue (Ptr (GValue))
    {-# LINE 42 "./System/Glib/GValue.chs" #-}

    -- | Clear a GValue.
    --
    valueInit :: GValue -> GType -> IO ()
    valueInit :: GValue -> CULong -> IO ()
    valueInit GValue
    gv CULong
    gt = do
      -- The g_type field of the value must be zero or g_value_init will fail.
      (\(GValue Ptr GValue
    arg1) CULong
    arg2 -> Ptr GValue -> CULong -> IO (Ptr GValue)
    g_value_init Ptr GValue
    arg1 CULong
    arg2) GValue
    gv CULong
    gt
      () -> IO ()
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- | Get the type of the value stored in the GValue
    --
    valueGetType :: GValue -> IO GType
    valueGetType :: GValue -> IO CULong
    valueGetType (GValue Ptr GValue
    gvPtr) = (\Ptr GValue
    ptr -> do {Ptr GValue -> Int -> IO CULong
    forall b. Ptr b -> Int -> IO CULong
    forall a b. Storable a => Ptr b -> Int -> IO a
    peekByteOff Ptr GValue
    ptr Int
    0 ::IO CULong}) Ptr GValue
    gvPtr

    -- | Temporarily allocate a GValue.
    --
    allocaGValue :: (GValue -> IO b) -> IO b
    allocaGValue :: forall b. (GValue -> IO b) -> IO b
    allocaGValue GValue -> IO b
    body =
      -- c2hs is broken in that it can't handle arrays of compound arrays in the
      -- sizeof hook
      Int -> (Ptr GValue -> IO b) -> IO b
    forall a b. Int -> (Ptr a -> IO b) -> IO b
    allocaBytes (Int
    8Int -> Int -> Int
    forall a. Num a => a -> a -> a
    + Int
    2Int -> Int -> Int
    forall a. Num a => a -> a -> a
    * Int
    8) ((Ptr GValue -> IO b) -> IO b) -> (Ptr GValue -> IO b) -> IO b
    forall a b. (a -> b) -> a -> b
    $ \Ptr GValue
    gvPtr -> do
      -- The g_type field of the value must be zero or g_value_init will fail.
      (\Ptr GValue
    ptr CULong
    val -> do {Ptr GValue -> Int -> CULong -> IO ()
    forall b. Ptr b -> Int -> CULong -> IO ()
    forall a b. Storable a => Ptr b -> Int -> a -> IO ()
    pokeByteOff Ptr GValue
    ptr Int
    0 (CULong
    val::CULong)}) Ptr GValue
    gvPtr (CULong
    0 :: GType)
      b
    result <- GValue -> IO b
    body (Ptr GValue -> GValue
    GValue Ptr GValue
    gvPtr)
      (\(GValue Ptr GValue
    arg1) -> Ptr GValue -> IO ()
    g_value_unset Ptr GValue
    arg1) (Ptr GValue -> GValue
    GValue Ptr GValue
    gvPtr)
      b -> IO b
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return b
    result

    foreign import ccall unsafe "g_value_init"
      g_value_init :: ((Ptr GValue) -> (CULong -> (IO (Ptr GValue))))

    foreign import ccall unsafe "g_value_unset"
      g_value_unset :: ((Ptr GValue) -> (IO ()))