/* * Licensed under the GNU Lesser General Public License Version 3 * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the license, or * (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library. If not, see . */ // generated automatically - do not change module glib.Once; private import glib.c.functions; public import glib.c.types; /** * A #GOnce struct controls a one-time initialization function. Any * one-time initialization function must have its own unique #GOnce * struct. * * Since: 2.4 */ public class Once { /** the main Gtk struct */ protected GOnce* gOnce; protected bool ownedRef; /** Get the main Gtk struct */ public GOnce* getOnceStruct(bool transferOwnership = false) { if (transferOwnership) ownedRef = false; return gOnce; } /** the main Gtk struct as a void* */ protected void* getStruct() { return cast(void*)gOnce; } /** * Sets our main struct and passes it to the parent class. */ public this (GOnce* gOnce, bool ownedRef = false) { this.gOnce = gOnce; this.ownedRef = ownedRef; } /** */ public void* impl(GThreadFunc func, void* arg) { return g_once_impl(gOnce, func, arg); } /** * 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 @value_location, 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 * ]| * * Params: * 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 */ public static bool initEnter(void* location) { return g_once_init_enter(location) != 0; } /** * 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. * * Params: * location = location of a static initializable variable containing 0 * result = new non-0 value for *@value_location * * Since: 2.14 */ public static void initLeave(void* location, size_t result) { g_once_init_leave(location, result); } }