{-# LINE 1 "Data/GI/Base/GType.hsc" #-}
{-# LANGUAGE OverloadedStrings #-}

-- | Basic `GType`s.
module Data.GI.Base.GType
    ( gtypeString
    , gtypePointer
    , gtypeInt
    , gtypeUInt
    , gtypeLong
    , gtypeULong
    , gtypeInt64
    , gtypeUInt64
    , gtypeFloat
    , gtypeDouble
    , gtypeBoolean
    , gtypeError
    , gtypeGType
    , gtypeStrv
    , gtypeBoxed
    , gtypeObject
    , gtypeVariant
    , gtypeByteArray
    , gtypeInvalid
    , gtypeParam

    , gtypeStablePtr
    ) where

import Data.GI.Base.BasicTypes (GType(..), CGType)



{-| [Note: compile-time vs run-time GTypes]

Notice that there are two types of GType's: the fundamental ones,
which are created with G_TYPE_MAKE_FUNDAMENTAL(n) and always have the
same runtime representation, and the ones that are registered in the
GObject type system at runtime, and whose `CGType` may change for each
program run (and generally does).

For the first type it is safe to use hsc to read the numerical values
of the CGType at compile type, but for the second type it is essential
to call the corresponding _get_type() function at runtime, and not use
the value of the corresponding "constant" at compile time via hsc.
-}

{- Fundamental types -}

-- | `GType` of strings.
gtypeString :: GType
gtypeString = GType 64
{-# LINE 52 "Data/GI/Base/GType.hsc" #-}

-- | `GType` of pointers.
gtypePointer :: GType
gtypePointer = GType 68
{-# LINE 56 "Data/GI/Base/GType.hsc" #-}

-- | `GType` for signed integers (@gint@ or @gint32@).
gtypeInt :: GType
gtypeInt = GType 24
{-# LINE 60 "Data/GI/Base/GType.hsc" #-}

-- | `GType` for unsigned integers (@guint@ or @guint32@).
gtypeUInt :: GType
gtypeUInt = GType 28
{-# LINE 64 "Data/GI/Base/GType.hsc" #-}

-- | `GType` for @glong@.
gtypeLong :: GType
gtypeLong = GType 32
{-# LINE 68 "Data/GI/Base/GType.hsc" #-}

-- | `GType` for @gulong@.
gtypeULong :: GType
gtypeULong = GType 36
{-# LINE 72 "Data/GI/Base/GType.hsc" #-}

-- | `GType` for signed 64 bit integers.
gtypeInt64 :: GType
gtypeInt64 = GType 40
{-# LINE 76 "Data/GI/Base/GType.hsc" #-}

-- | `GType` for unsigned 64 bit integers.
gtypeUInt64 :: GType
gtypeUInt64 = GType 44
{-# LINE 80 "Data/GI/Base/GType.hsc" #-}

-- | `GType` for floating point values.
gtypeFloat :: GType
gtypeFloat = GType 56
{-# LINE 84 "Data/GI/Base/GType.hsc" #-}

-- | `GType` for gdouble.
gtypeDouble :: GType
gtypeDouble = GType 60
{-# LINE 88 "Data/GI/Base/GType.hsc" #-}

-- | `GType` corresponding to gboolean.
gtypeBoolean :: GType
gtypeBoolean = GType 20
{-# LINE 92 "Data/GI/Base/GType.hsc" #-}

-- | `GType` corresponding to a boxed object.
gtypeBoxed :: GType
gtypeBoxed = GType 72
{-# LINE 96 "Data/GI/Base/GType.hsc" #-}

-- | `GType` corresponding to a @GObject@.
gtypeObject :: GType
gtypeObject = GType 80
{-# LINE 100 "Data/GI/Base/GType.hsc" #-}

-- | An invalid `GType` used as error return value in some functions
-- which return a `GType`.
gtypeInvalid :: GType
gtypeInvalid = GType 0
{-# LINE 105 "Data/GI/Base/GType.hsc" #-}

-- | The `GType` corresponding to a @GVariant@.
gtypeVariant :: GType
gtypeVariant = GType 84
{-# LINE 109 "Data/GI/Base/GType.hsc" #-}

-- | The `GType` corresponding to 'Data.GI.Base.GError.GError'.
gtypeError :: GType
gtypeError = GType 93982759286928
{-# LINE 113 "Data/GI/Base/GType.hsc" #-}

-- | The `GType` corresponding to 'Data.GI.Base.BasicTypes.GParamSpec'.
gtypeParam :: GType
gtypeParam = GType 76
{-# LINE 117 "Data/GI/Base/GType.hsc" #-}

{- Run-time types -}

foreign import ccall "g_gtype_get_type" g_gtype_get_type :: CGType

-- | `GType` corresponding to a `GType` itself.
gtypeGType :: GType
gtypeGType = GType g_gtype_get_type

foreign import ccall "g_strv_get_type" g_strv_get_type :: CGType

-- | `GType` for a NULL terminated array of strings.
gtypeStrv :: GType
gtypeStrv = GType g_strv_get_type

foreign import ccall "g_byte_array_get_type" g_byte_array_get_type :: CGType

-- | `GType` for a boxed type holding a @GByteArray@.
gtypeByteArray :: GType
gtypeByteArray = GType g_byte_array_get_type

foreign import ccall haskell_gi_StablePtr_get_type :: CGType

-- | The `GType` for boxed `StablePtr`s.
gtypeStablePtr :: GType
gtypeStablePtr = GType haskell_gi_StablePtr_get_type