Class Once

All Implemented Interfaces:
Proxy

@Generated("org.javagi.JavaGI") public class Once extends ProxyInstance
A GOnce struct controls a one-time initialization function. Any one-time initialization function must have its own unique GOnce struct.
Since:
2.4
  • Constructor Details

    • Once

      public Once(MemorySegment address)
      Create a Once proxy instance for the provided memory address.
      Parameters:
      address - the memory address of the native object
    • Once

      public Once(Arena arena)
      Allocate a new Once.
      Parameters:
      arena - to control the memory allocation scope
    • Once

      public Once()
      Allocate a new Once. The memory is allocated with Arena.ofAuto().
    • Once

      public Once(OnceStatus status, MemorySegment retval, Arena arena)
      Allocate a new Once with the fields set to the provided values.
      Parameters:
      status - value for the field status
      retval - value for the field retval
      arena - to control the memory allocation scope
    • Once

      public Once(OnceStatus status, MemorySegment retval)
      Allocate a new Once with the fields set to the provided values. The memory is allocated with Arena.ofAuto().
      Parameters:
      status - value for the field status
      retval - value for the field retval
  • Method Details

    • getMemoryLayout

      public static MemoryLayout getMemoryLayout()
      The memory layout of the native struct.
      Returns:
      the memory layout
    • readStatus

      public OnceStatus readStatus()
      Read the value of the field status.
      Returns:
      The value of the field status
    • writeStatus

      public void writeStatus(OnceStatus status)
      Write a value in the field status.
      Parameters:
      status - The new value for the field status
    • readRetval

      public MemorySegment readRetval()
      Read the value of the field retval.
      Returns:
      The value of the field retval
    • writeRetval

      public void writeRetval(MemorySegment retval)
      Write a value in the field retval.
      Parameters:
      retval - The new value for the field retval
    • initEnter

      public static boolean initEnter(Out<MemorySegment> location)

      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 g_once_init_leave() 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:

        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.

      Parameters:
      location - location of a static initializable variable containing 0
      Returns:
      true if the initialization section should be entered, false and blocks otherwise
      Since:
      2.14
    • initEnterImpl

      public static boolean initEnterImpl(MemorySegment location)
    • initEnterPointer

      public 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 (or guintptr) instead of gsize.

        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 containing NULL
      Returns:
      true if the initialization section should be entered, false and blocks otherwise
      Since:
      2.80
    • initLeave

      public static void initLeave(Out<MemorySegment> location, long result)

      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 a volatile qualifier, this is a historical artifact and the pointer passed to it should not be volatile.

      Parameters:
      location - location of a static initializable variable containing 0
      result - new non-0 value for *value_location
      Since:
      2.14
    • initLeavePointer

      public static void initLeavePointer(MemorySegment location, @Nullable MemorySegment result)

      Counterpart to g_once_init_enter_pointer(). Expects a location of a static NULL-initialized initialization variable, and an initialization value other than NULL. 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 of gsize.

      Parameters:
      location - location of a static initializable variable containing NULL
      result - new non-NULL value for *location
      Since:
      2.80
    • impl

      public @Nullable MemorySegment impl(@Nullable ThreadFunc func, @Nullable MemorySegment arg)