gi-glib-2.0.26: GLib bindings
CopyrightWill Thompson and Iñaki García Etxebarria
LicenseLGPL-2.1
MaintainerIñaki García Etxebarria
Safe HaskellSafe-Inferred
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 #

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) #

ManagedPtrNewtype Once Source # 
Instance details

Defined in GI.GLib.Structs.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

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

While location has a volatile qualifier, this is a historical artifact and the pointer passed to it should not be volatile.

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.

While location has a volatile qualifier, this is a historical artifact and the pointer passed to it should not be volatile.

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 ]