/*
 * Distributed under the Boost Software License, Version 1.0.
 *    (See accompanying file LICENSE_1_0.txt or copy at
 *          http://www.boost.org/LICENSE_1_0.txt)
 */
module glib.gquark;

import glib.gtypes;

import std..string : format;

alias GQuark = guint32;


extern (C) {
    GQuark g_quark_try_string (const(gchar) *str);

    GQuark g_quark_from_static_string (const(gchar) *str);

    GQuark g_quark_from_string (const(gchar) *str);

    const(gchar) * g_quark_to_string (GQuark quark);


    const(gchar) * g_intern_string (const(gchar) *str);

    const(gchar) * g_intern_static_string (const(gchar) *str);
}

// TODO: check this
mixin template G_DEFINE_QUARK(string QN, string q_n)
{
    mixin(q{
        extern(C) GQuark %s_quark() {
            static GQuark q;
            if (q==0)
                q = g_quark_from_static_string("%s");
            return q;
        }
    }.format(q_n, QN));
}
//#define G_DEFINE_QUARK(QN, q_n)                                         \
//    GQuark                                                                  \
//    q_n##_quark (void)                                                      \
//    {                                                                       \
//    static GQuark q;                                                      \
//                                                                        \
//    if G_UNLIKELY (q == 0)                                                \
//    q = g_quark_from_static_string (#QN);                               \
//                                                                        \
//    return q;                                                             \
//    }