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

module GI.GIRepository.Unions.Argument
    ( 

-- * Exported types
    Argument(..)                            ,
    noArgument                              ,


 -- * Properties
-- ** VBoolean
    argumentReadVBoolean                    ,


-- ** VDouble
    argumentReadVDouble                     ,


-- ** VFloat
    argumentReadVFloat                      ,


-- ** VInt
    argumentReadVInt                        ,


-- ** VInt16
    argumentReadVInt16                      ,


-- ** VInt32
    argumentReadVInt32                      ,


-- ** VInt64
    argumentReadVInt64                      ,


-- ** VInt8
    argumentReadVInt8                       ,


-- ** VLong
    argumentReadVLong                       ,


-- ** VPointer
    argumentReadVPointer                    ,


-- ** VShort
    argumentReadVShort                      ,


-- ** VSize
    argumentReadVSize                       ,


-- ** VSsize
    argumentReadVSsize                      ,


-- ** VString
    argumentReadVString                     ,


-- ** VUint
    argumentReadVUint                       ,


-- ** VUint16
    argumentReadVUint16                     ,


-- ** VUint32
    argumentReadVUint32                     ,


-- ** VUint64
    argumentReadVUint64                     ,


-- ** VUint8
    argumentReadVUint8                      ,


-- ** VUlong
    argumentReadVUlong                      ,


-- ** VUshort
    argumentReadVUshort                     ,




    ) 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.GIRepository.Types
import GI.GIRepository.Callbacks

newtype Argument = Argument (ForeignPtr Argument)
noArgument :: Maybe Argument
noArgument = Nothing

argumentReadVBoolean :: Argument -> IO Bool
argumentReadVBoolean s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO CInt
    let val' = (/= 0) val
    return val'

argumentReadVInt8 :: Argument -> IO Int8
argumentReadVInt8 s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Int8
    return val

argumentReadVUint8 :: Argument -> IO Word8
argumentReadVUint8 s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Word8
    return val

argumentReadVInt16 :: Argument -> IO Int16
argumentReadVInt16 s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Int16
    return val

argumentReadVUint16 :: Argument -> IO Word16
argumentReadVUint16 s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Word16
    return val

argumentReadVInt32 :: Argument -> IO Int32
argumentReadVInt32 s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Int32
    return val

argumentReadVUint32 :: Argument -> IO Word32
argumentReadVUint32 s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Word32
    return val

argumentReadVInt64 :: Argument -> IO Int64
argumentReadVInt64 s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Int64
    return val

argumentReadVUint64 :: Argument -> IO Word64
argumentReadVUint64 s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Word64
    return val

argumentReadVFloat :: Argument -> IO Float
argumentReadVFloat s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO CFloat
    let val' = realToFrac val
    return val'

argumentReadVDouble :: Argument -> IO Double
argumentReadVDouble s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO CDouble
    let val' = realToFrac val
    return val'

argumentReadVShort :: Argument -> IO Int16
argumentReadVShort s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Int16
    return val

argumentReadVUshort :: Argument -> IO Word16
argumentReadVUshort s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Word16
    return val

argumentReadVInt :: Argument -> IO Int32
argumentReadVInt s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Int32
    return val

argumentReadVUint :: Argument -> IO Word32
argumentReadVUint s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Word32
    return val

argumentReadVLong :: Argument -> IO Int64
argumentReadVLong s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Int64
    return val

argumentReadVUlong :: Argument -> IO Word64
argumentReadVUlong s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Word64
    return val

argumentReadVSsize :: Argument -> IO Int64
argumentReadVSsize s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Int64
    return val

argumentReadVSize :: Argument -> IO Word64
argumentReadVSize s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Word64
    return val

argumentReadVString :: Argument -> IO T.Text
argumentReadVString s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO CString
    val' <- cstringToText val
    return val'

argumentReadVPointer :: Argument -> IO (Ptr ())
argumentReadVPointer s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr ())
    return val