Package org.gnome.glib
Class Once
java.lang.Object
io.github.jwharm.javagi.base.ProxyInstance
org.gnome.glib.Once
- All Implemented Interfaces:
Proxy
A
GOnce
struct controls a one-time initialization function. Any
one-time initialization function must have its own unique GOnce
struct.-
Constructor Summary
ConstructorDescriptionOnce()
Allocate a new Once.Allocate a new Once.Once
(MemorySegment address) Create a Once proxy instance for the provided memory address.Once
(OnceStatus status, MemorySegment retval) Allocate a new Once with the fields set to the provided values.Once
(OnceStatus status, MemorySegment retval, Arena arena) Allocate a new Once with the fields set to the provided values. -
Method Summary
Modifier and TypeMethodDescriptionstatic MemoryLayout
The memory layout of the native struct.impl
(ThreadFunc func, @Nullable MemorySegment arg) static boolean
initEnter
(Out<MemorySegment> location) Function to be called when starting a critical initialization section.static boolean
initEnterImpl
(MemorySegment location) static boolean
initEnterPointer
(MemorySegment location) This functions behaves in the same way as g_once_init_enter(), but can can be used to initialize pointers (orguintptr
) instead ofgsize
.static void
initLeave
(Out<MemorySegment> location, long result) Counterpart to g_once_init_enter().static void
initLeavePointer
(MemorySegment location, @Nullable MemorySegment result) Counterpart to g_once_init_enter_pointer().Read the value of the fieldretval
.Read the value of the fieldstatus
.void
writeRetval
(MemorySegment retval) Write a value in the fieldretval
.void
writeStatus
(OnceStatus status) Write a value in the fieldstatus
.Methods inherited from class io.github.jwharm.javagi.base.ProxyInstance
equals, handle, hashCode
-
Constructor Details
-
Once
Create a Once proxy instance for the provided memory address.- Parameters:
address
- the memory address of the native object
-
Once
Allocate a new Once.- Parameters:
arena
- to control the memory allocation scope
-
Once
public Once()Allocate a new Once. The memory is allocated withArena.ofAuto()
. -
Once
Allocate a new Once with the fields set to the provided values.- Parameters:
status
- value for the fieldstatus
retval
- value for the fieldretval
arena
- to control the memory allocation scope
-
Once
Allocate a new Once with the fields set to the provided values. The memory is allocated withArena.ofAuto()
.- Parameters:
status
- value for the fieldstatus
retval
- value for the fieldretval
-
-
Method Details
-
getMemoryLayout
The memory layout of the native struct.- Returns:
- the memory layout
-
readStatus
Read the value of the fieldstatus
.- Returns:
- The value of the field
status
-
writeStatus
Write a value in the fieldstatus
.- Parameters:
status
- The new value for the fieldstatus
-
readRetval
Read the value of the fieldretval
.- Returns:
- The value of the field
retval
-
writeRetval
Write a value in the fieldretval
.- Parameters:
retval
- The new value for the fieldretval
-
initEnter
Function to be called when starting a critical initialization section. The argumentlocation
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 g_once_init_leave() and the unique addressvalueLocation
, 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: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 avolatile
qualifier, this is a historical artifact and the pointer passed to it should not bevolatile
.- Parameters:
location
- location of a static initializable variable containing 0- Returns:
true
if the initialization section should be entered,false
and blocks otherwise
-
initEnterImpl
-
initEnterPointer
This functions behaves in the same way as g_once_init_enter(), but can can be used to initialize pointers (orguintptr
) instead ofgsize
.static MyStruct *interesting_struct = NULL; if (g_once_init_enter_pointer (&interesting_struct)) { MyStruct *setup_value = allocate_my_struct (); // initialization code here g_once_init_leave_pointer (&interesting_struct, g_steal_pointer (&setup_value)); } // use interesting_struct here
- Parameters:
location
- location of a static initializable variable containingNULL
- Returns:
true
if the initialization section should be entered,false
and blocks otherwise
-
initLeave
Counterpart to g_once_init_enter(). 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 g_once_init_enter() on this initialization variable.While
location
has avolatile
qualifier, this is a historical artifact and the pointer passed to it should not bevolatile
.- Parameters:
location
- location of a static initializable variable containing 0result
- new non-0 value for *valueLocation
-
initLeavePointer
public static void initLeavePointer(MemorySegment location, @Nullable @Nullable MemorySegment result) Counterpart to g_once_init_enter_pointer(). Expects a location of a staticNULL
-initialized initialization variable, and an initialization value other thanNULL
. Sets the variable to the initialization value, and releases concurrent threads blocking in g_once_init_enter_pointer() on this initialization variable.This functions behaves in the same way as g_once_init_leave(), but can be used to initialize pointers (or
guintptr
) instead ofgsize
.- Parameters:
location
- location of a static initializable variable containingNULL
result
- new non-NULL
value for*location
-
impl
-