gi-glib-2.0.24: GLib bindings
CopyrightWill Thompson Iñaki García Etxebarria and Jonas Platte
LicenseLGPL-2.1
MaintainerIñaki García Etxebarria
Safe HaskellNone
LanguageHaskell2010

GI.GLib.Structs.Once

Description

A Once struct controls a one-time initialization function. Any one-time initialization function must have its own unique Once struct.

Since: 2.4

Synopsis

Exported types

newtype Once Source #

Memory-managed wrapper type.

Constructors

Once (ManagedPtr Once) 

Instances

Instances details
Eq Once Source # 
Instance details

Defined in GI.GLib.Structs.Once

Methods

(==) :: Once -> Once -> Bool #

(/=) :: Once -> Once -> Bool #

ManagedPtrNewtype Once Source # 
Instance details

Defined in GI.GLib.Structs.Once

BoxedPtr Once Source # 
Instance details

Defined in GI.GLib.Structs.Once

Methods

boxedPtrCopy :: Once -> IO Once #

boxedPtrFree :: Once -> IO () #

CallocPtr Once Source # 
Instance details

Defined in GI.GLib.Structs.Once

Methods

boxedPtrCalloc :: IO (Ptr Once) #

tag ~ 'AttrSet => Constructible Once tag Source # 
Instance details

Defined in GI.GLib.Structs.Once

Methods

new :: MonadIO m => (ManagedPtr Once -> Once) -> [AttrOp Once tag] -> m Once #

newZeroOnce :: MonadIO m => m Once Source #

Construct a Once struct initialized to zero.

Methods

Overloaded methods

initEnter

onceInitEnter Source #

Arguments

:: (HasCallStack, MonadIO m) 
=> Ptr ()

location: location of a static initializable variable containing 0

-> m Bool

Returns: True if the initialization section should be entered, False and blocks otherwise

Function to be called when starting a critical initialization section. The argument location must point to a static 0-initialized variable that will be set to a value other than 0 at the end of the initialization section. In combination with onceInitLeave and the unique address valueLocation, it can be ensured that an initialization section will be executed only once during a program's life time, and that concurrent threads are blocked until initialization completed. To be used in constructs like this:

C code

 static gsize initialization_value = 0;

 if (g_once_init_enter (&initialization_value))
   {
     gsize setup_value = 42; // initialization code here

     g_once_init_leave (&initialization_value, setup_value);
   }

 // use initialization_value here

Since: 2.14

initLeave

onceInitLeave Source #

Arguments

:: (HasCallStack, MonadIO m) 
=> Ptr ()

location: location of a static initializable variable containing 0

-> Word64

result: new non-0 value for *valueLocation

-> m () 

Counterpart to onceInitEnter. Expects a location of a static 0-initialized initialization variable, and an initialization value other than 0. Sets the variable to the initialization value, and releases concurrent threads blocking in onceInitEnter on this initialization variable.

Since: 2.14

Properties

retval

the value returned by the call to the function, if status is OnceStatusReady

clearOnceRetval :: MonadIO m => Once -> m () Source #

Set the value of the “retval” field to Nothing. When overloading is enabled, this is equivalent to

clear #retval

getOnceRetval :: MonadIO m => Once -> m (Ptr ()) Source #

Get the value of the “retval” field. When overloading is enabled, this is equivalent to

get once #retval

setOnceRetval :: MonadIO m => Once -> Ptr () -> m () Source #

Set the value of the “retval” field. When overloading is enabled, this is equivalent to

set once [ #retval := value ]

status

the status of the Once

getOnceStatus :: MonadIO m => Once -> m OnceStatus Source #

Get the value of the “status” field. When overloading is enabled, this is equivalent to

get once #status

setOnceStatus :: MonadIO m => Once -> OnceStatus -> m () Source #

Set the value of the “status” field. When overloading is enabled, this is equivalent to

set once [ #status := value ]