{- |
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.WebKit.Objects.DOMMemoryInfo
    ( 

-- * Exported types
    DOMMemoryInfo(..)                       ,
    IsDOMMemoryInfo                         ,
    toDOMMemoryInfo                         ,
    noDOMMemoryInfo                         ,


 -- * Methods
-- ** getJsHeapSizeLimit #method:getJsHeapSizeLimit#
    dOMMemoryInfoGetJsHeapSizeLimit         ,


-- ** getTotalJsHeapSize #method:getTotalJsHeapSize#
    dOMMemoryInfoGetTotalJsHeapSize         ,


-- ** getUsedJsHeapSize #method:getUsedJsHeapSize#
    dOMMemoryInfoGetUsedJsHeapSize          ,




 -- * Properties
-- ** jsHeapSizeLimit #attr:jsHeapSizeLimit#
    DOMMemoryInfoJsHeapSizeLimitPropertyInfo,
    dOMMemoryInfoJsHeapSizeLimit            ,
    getDOMMemoryInfoJsHeapSizeLimit         ,


-- ** totalJsHeapSize #attr:totalJsHeapSize#
    DOMMemoryInfoTotalJsHeapSizePropertyInfo,
    dOMMemoryInfoTotalJsHeapSize            ,
    getDOMMemoryInfoTotalJsHeapSize         ,


-- ** usedJsHeapSize #attr:usedJsHeapSize#
    DOMMemoryInfoUsedJsHeapSizePropertyInfo ,
    dOMMemoryInfoUsedJsHeapSize             ,
    getDOMMemoryInfoUsedJsHeapSize          ,




    ) where

import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP

import qualified GI.GObject.Objects.Object as GObject.Object
import {-# SOURCE #-} qualified GI.WebKit.Objects.DOMObject as WebKit.DOMObject

newtype DOMMemoryInfo = DOMMemoryInfo (ManagedPtr DOMMemoryInfo)
foreign import ccall "webkit_dom_memory_info_get_type"
    c_webkit_dom_memory_info_get_type :: IO GType

instance GObject DOMMemoryInfo where
    gobjectType _ = c_webkit_dom_memory_info_get_type
    

class GObject o => IsDOMMemoryInfo o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError DOMMemoryInfo a) =>
    IsDOMMemoryInfo a
#endif
instance IsDOMMemoryInfo DOMMemoryInfo
instance WebKit.DOMObject.IsDOMObject DOMMemoryInfo
instance GObject.Object.IsObject DOMMemoryInfo

toDOMMemoryInfo :: IsDOMMemoryInfo o => o -> IO DOMMemoryInfo
toDOMMemoryInfo = unsafeCastTo DOMMemoryInfo

noDOMMemoryInfo :: Maybe DOMMemoryInfo
noDOMMemoryInfo = Nothing

type family ResolveDOMMemoryInfoMethod (t :: Symbol) (o :: *) :: * where
    ResolveDOMMemoryInfoMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveDOMMemoryInfoMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveDOMMemoryInfoMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveDOMMemoryInfoMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveDOMMemoryInfoMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveDOMMemoryInfoMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveDOMMemoryInfoMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveDOMMemoryInfoMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveDOMMemoryInfoMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveDOMMemoryInfoMethod "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo
    ResolveDOMMemoryInfoMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo
    ResolveDOMMemoryInfoMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveDOMMemoryInfoMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveDOMMemoryInfoMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveDOMMemoryInfoMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveDOMMemoryInfoMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveDOMMemoryInfoMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveDOMMemoryInfoMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveDOMMemoryInfoMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveDOMMemoryInfoMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveDOMMemoryInfoMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveDOMMemoryInfoMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveDOMMemoryInfoMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveDOMMemoryInfoMethod t DOMMemoryInfo, O.MethodInfo info DOMMemoryInfo p) => O.IsLabelProxy t (DOMMemoryInfo -> p) where
    fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveDOMMemoryInfoMethod t DOMMemoryInfo, O.MethodInfo info DOMMemoryInfo p) => O.IsLabel t (DOMMemoryInfo -> p) where
    fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif

-- VVV Prop "js-heap-size-limit"
   -- Type: TBasicType TULong
   -- Flags: [PropertyReadable]
   -- Nullable: (Nothing,Nothing)

getDOMMemoryInfoJsHeapSizeLimit :: (MonadIO m, IsDOMMemoryInfo o) => o -> m CULong
getDOMMemoryInfoJsHeapSizeLimit obj = liftIO $ getObjectPropertyULong obj "js-heap-size-limit"

data DOMMemoryInfoJsHeapSizeLimitPropertyInfo
instance AttrInfo DOMMemoryInfoJsHeapSizeLimitPropertyInfo where
    type AttrAllowedOps DOMMemoryInfoJsHeapSizeLimitPropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint DOMMemoryInfoJsHeapSizeLimitPropertyInfo = (~) ()
    type AttrBaseTypeConstraint DOMMemoryInfoJsHeapSizeLimitPropertyInfo = IsDOMMemoryInfo
    type AttrGetType DOMMemoryInfoJsHeapSizeLimitPropertyInfo = CULong
    type AttrLabel DOMMemoryInfoJsHeapSizeLimitPropertyInfo = "js-heap-size-limit"
    type AttrOrigin DOMMemoryInfoJsHeapSizeLimitPropertyInfo = DOMMemoryInfo
    attrGet _ = getDOMMemoryInfoJsHeapSizeLimit
    attrSet _ = undefined
    attrConstruct _ = undefined
    attrClear _ = undefined

-- VVV Prop "total-js-heap-size"
   -- Type: TBasicType TULong
   -- Flags: [PropertyReadable]
   -- Nullable: (Nothing,Nothing)

getDOMMemoryInfoTotalJsHeapSize :: (MonadIO m, IsDOMMemoryInfo o) => o -> m CULong
getDOMMemoryInfoTotalJsHeapSize obj = liftIO $ getObjectPropertyULong obj "total-js-heap-size"

data DOMMemoryInfoTotalJsHeapSizePropertyInfo
instance AttrInfo DOMMemoryInfoTotalJsHeapSizePropertyInfo where
    type AttrAllowedOps DOMMemoryInfoTotalJsHeapSizePropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint DOMMemoryInfoTotalJsHeapSizePropertyInfo = (~) ()
    type AttrBaseTypeConstraint DOMMemoryInfoTotalJsHeapSizePropertyInfo = IsDOMMemoryInfo
    type AttrGetType DOMMemoryInfoTotalJsHeapSizePropertyInfo = CULong
    type AttrLabel DOMMemoryInfoTotalJsHeapSizePropertyInfo = "total-js-heap-size"
    type AttrOrigin DOMMemoryInfoTotalJsHeapSizePropertyInfo = DOMMemoryInfo
    attrGet _ = getDOMMemoryInfoTotalJsHeapSize
    attrSet _ = undefined
    attrConstruct _ = undefined
    attrClear _ = undefined

-- VVV Prop "used-js-heap-size"
   -- Type: TBasicType TULong
   -- Flags: [PropertyReadable]
   -- Nullable: (Nothing,Nothing)

getDOMMemoryInfoUsedJsHeapSize :: (MonadIO m, IsDOMMemoryInfo o) => o -> m CULong
getDOMMemoryInfoUsedJsHeapSize obj = liftIO $ getObjectPropertyULong obj "used-js-heap-size"

data DOMMemoryInfoUsedJsHeapSizePropertyInfo
instance AttrInfo DOMMemoryInfoUsedJsHeapSizePropertyInfo where
    type AttrAllowedOps DOMMemoryInfoUsedJsHeapSizePropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint DOMMemoryInfoUsedJsHeapSizePropertyInfo = (~) ()
    type AttrBaseTypeConstraint DOMMemoryInfoUsedJsHeapSizePropertyInfo = IsDOMMemoryInfo
    type AttrGetType DOMMemoryInfoUsedJsHeapSizePropertyInfo = CULong
    type AttrLabel DOMMemoryInfoUsedJsHeapSizePropertyInfo = "used-js-heap-size"
    type AttrOrigin DOMMemoryInfoUsedJsHeapSizePropertyInfo = DOMMemoryInfo
    attrGet _ = getDOMMemoryInfoUsedJsHeapSize
    attrSet _ = undefined
    attrConstruct _ = undefined
    attrClear _ = undefined

instance O.HasAttributeList DOMMemoryInfo
type instance O.AttributeList DOMMemoryInfo = DOMMemoryInfoAttributeList
type DOMMemoryInfoAttributeList = ('[ '("coreObject", WebKit.DOMObject.DOMObjectCoreObjectPropertyInfo), '("jsHeapSizeLimit", DOMMemoryInfoJsHeapSizeLimitPropertyInfo), '("totalJsHeapSize", DOMMemoryInfoTotalJsHeapSizePropertyInfo), '("usedJsHeapSize", DOMMemoryInfoUsedJsHeapSizePropertyInfo)] :: [(Symbol, *)])

dOMMemoryInfoJsHeapSizeLimit :: AttrLabelProxy "jsHeapSizeLimit"
dOMMemoryInfoJsHeapSizeLimit = AttrLabelProxy

dOMMemoryInfoTotalJsHeapSize :: AttrLabelProxy "totalJsHeapSize"
dOMMemoryInfoTotalJsHeapSize = AttrLabelProxy

dOMMemoryInfoUsedJsHeapSize :: AttrLabelProxy "usedJsHeapSize"
dOMMemoryInfoUsedJsHeapSize = AttrLabelProxy

type instance O.SignalList DOMMemoryInfo = DOMMemoryInfoSignalList
type DOMMemoryInfoSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

-- method DOMMemoryInfo::get_js_heap_size_limit
-- method type : MemberFunction
-- Args : [Arg {argCName = "self", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "A #WebKitDOMMemoryInfo", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TULong)
-- throws : False
-- Skip return : False

foreign import ccall "webkit_dom_memory_info_get_js_heap_size_limit" webkit_dom_memory_info_get_js_heap_size_limit :: 
    Ptr () ->                               -- self : TBasicType TPtr
    IO CULong

{-# DEPRECATED dOMMemoryInfoGetJsHeapSizeLimit ["(Since version 2.2)"] #-}
{- |
The MemoryInfo object has been removed from WebKit, this function does nothing.
-}
dOMMemoryInfoGetJsHeapSizeLimit ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    Ptr ()
    {- ^ /@self@/: A @/WebKitDOMMemoryInfo/@ -}
    -> m CULong
    {- ^ __Returns:__ A @/gulong/@ -}
dOMMemoryInfoGetJsHeapSizeLimit self = liftIO $ do
    result <- webkit_dom_memory_info_get_js_heap_size_limit self
    return result

-- method DOMMemoryInfo::get_total_js_heap_size
-- method type : MemberFunction
-- Args : [Arg {argCName = "self", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "A #WebKitDOMMemoryInfo", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TULong)
-- throws : False
-- Skip return : False

foreign import ccall "webkit_dom_memory_info_get_total_js_heap_size" webkit_dom_memory_info_get_total_js_heap_size :: 
    Ptr () ->                               -- self : TBasicType TPtr
    IO CULong

{-# DEPRECATED dOMMemoryInfoGetTotalJsHeapSize ["(Since version 2.2)"] #-}
{- |
The MemoryInfo object has been removed from WebKit, this function does nothing.
-}
dOMMemoryInfoGetTotalJsHeapSize ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    Ptr ()
    {- ^ /@self@/: A @/WebKitDOMMemoryInfo/@ -}
    -> m CULong
    {- ^ __Returns:__ A @/gulong/@ -}
dOMMemoryInfoGetTotalJsHeapSize self = liftIO $ do
    result <- webkit_dom_memory_info_get_total_js_heap_size self
    return result

-- method DOMMemoryInfo::get_used_js_heap_size
-- method type : MemberFunction
-- Args : [Arg {argCName = "self", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "A #WebKitDOMMemoryInfo", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TULong)
-- throws : False
-- Skip return : False

foreign import ccall "webkit_dom_memory_info_get_used_js_heap_size" webkit_dom_memory_info_get_used_js_heap_size :: 
    Ptr () ->                               -- self : TBasicType TPtr
    IO CULong

{-# DEPRECATED dOMMemoryInfoGetUsedJsHeapSize ["(Since version 2.2)"] #-}
{- |
The MemoryInfo object has been removed from WebKit, this function does nothing.
-}
dOMMemoryInfoGetUsedJsHeapSize ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    Ptr ()
    {- ^ /@self@/: A @/WebKitDOMMemoryInfo/@ -}
    -> m CULong
    {- ^ __Returns:__ A @/gulong/@ -}
dOMMemoryInfoGetUsedJsHeapSize self = liftIO $ do
    result <- webkit_dom_memory_info_get_used_js_heap_size self
    return result