{-# LINE 1 "src/System/GLib/Quarks/Internal.hsc" #-}
{-# LANGUAGE BlockArguments, LambdaCase #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module System.GLib.Quarks.Internal (
	GQuark(..),
	gQuarkFromString, gQuarkToString, gInternString, gUninternString,
	gQuarkTryString ) where

import Foreign.Storable
import Foreign.C.String
import Data.Word

import System.IO.Unsafe



newtype GQuark = GQuark Word32 deriving (GQuark -> GQuark -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GQuark -> GQuark -> Bool
$c/= :: GQuark -> GQuark -> Bool
== :: GQuark -> GQuark -> Bool
$c== :: GQuark -> GQuark -> Bool
Eq, Ptr GQuark -> IO GQuark
Ptr GQuark -> Int -> IO GQuark
Ptr GQuark -> Int -> GQuark -> IO ()
Ptr GQuark -> GQuark -> IO ()
GQuark -> Int
forall b. Ptr b -> Int -> IO GQuark
forall b. Ptr b -> Int -> GQuark -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
poke :: Ptr GQuark -> GQuark -> IO ()
$cpoke :: Ptr GQuark -> GQuark -> IO ()
peek :: Ptr GQuark -> IO GQuark
$cpeek :: Ptr GQuark -> IO GQuark
pokeByteOff :: forall b. Ptr b -> Int -> GQuark -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> GQuark -> IO ()
peekByteOff :: forall b. Ptr b -> Int -> IO GQuark
$cpeekByteOff :: forall b. Ptr b -> Int -> IO GQuark
pokeElemOff :: Ptr GQuark -> Int -> GQuark -> IO ()
$cpokeElemOff :: Ptr GQuark -> Int -> GQuark -> IO ()
peekElemOff :: Ptr GQuark -> Int -> IO GQuark
$cpeekElemOff :: Ptr GQuark -> Int -> IO GQuark
alignment :: GQuark -> Int
$calignment :: GQuark -> Int
sizeOf :: GQuark -> Int
$csizeOf :: GQuark -> Int
Storable)
{-# LINE 19 "src/System/GLib/Quarks/Internal.hsc" #-}

instance Show GQuark where show :: GQuark -> String
show GQuark
_ = String
"GQuark"

gQuarkFromString :: String -> GQuark
gQuarkFromString :: String -> GQuark
gQuarkFromString String
s =
	forall a. IO a -> a
unsafePerformIO forall a b. (a -> b) -> a -> b
$ Word32 -> GQuark
GQuark forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. String -> (CString -> IO a) -> IO a
withCString String
s CString -> IO Word32
c_g_quark_from_string

foreign import ccall "g_quark_from_string" c_g_quark_from_string ::
	CString -> IO Word32
{-# LINE 28 "src/System/GLib/Quarks/Internal.hsc" #-}

gQuarkToString :: GQuark -> String
gQuarkToString :: GQuark -> String
gQuarkToString (GQuark Word32
q) =
	forall a. IO a -> a
unsafePerformIO forall a b. (a -> b) -> a -> b
$ CString -> IO String
peekCString forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Word32 -> IO CString
c_g_quark_to_string Word32
q

foreign import ccall "g_quark_to_string" c_g_quark_to_string ::
	Word32 -> IO CString
{-# LINE 35 "src/System/GLib/Quarks/Internal.hsc" #-}

gQuarkTryString :: String -> IO (Maybe GQuark)
gQuarkTryString :: String -> IO (Maybe GQuark)
gQuarkTryString String
s = (forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. String -> (CString -> IO a) -> IO a
withCString String
s CString -> IO Word32
c_g_quark_try_string) \case
		Word32
0 -> forall a. Maybe a
Nothing; Word32
q -> forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ Word32 -> GQuark
GQuark Word32
q

foreign import ccall "g_quark_try_string" c_g_quark_try_string ::
	CString -> IO Word32
{-# LINE 42 "src/System/GLib/Quarks/Internal.hsc" #-}

newtype InternedString = InternedString CString deriving InternedString -> InternedString -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: InternedString -> InternedString -> Bool
$c/= :: InternedString -> InternedString -> Bool
== :: InternedString -> InternedString -> Bool
$c== :: InternedString -> InternedString -> Bool
Eq

instance Show InternedString where show :: InternedString -> String
show InternedString
_ = String
"InternedString"

gInternString :: String -> InternedString
gInternString :: String -> InternedString
gInternString String
s =
	forall a. IO a -> a
unsafePerformIO forall a b. (a -> b) -> a -> b
$ CString -> InternedString
InternedString forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. String -> (CString -> IO a) -> IO a
withCString String
s CString -> IO CString
c_g_intern_string

gUninternString :: InternedString -> String
gUninternString :: InternedString -> String
gUninternString (InternedString CString
i) = forall a. IO a -> a
unsafePerformIO forall a b. (a -> b) -> a -> b
$ CString -> IO String
peekCString CString
i

foreign import ccall "g_intern_string" c_g_intern_string ::
	CString -> IO CString