1
<refentry id="glib-Quarks">
3
<refentrytitle role="top_of_page">Quarks</refentrytitle>
4
<manvolnum>3</manvolnum>
5
<refmiscinfo>GLIB Library</refmiscinfo>
9
<refname>Quarks</refname>
10
<refpurpose>a 2-way association between a string and a unique integer identifier.</refpurpose>
11
<!--[<xref linkend="desc" endterm="desc.title"/>]-->
14
<refsynopsisdiv role="synopsis">
15
<title role="synopsis.title">Synopsis</title>
19
#include <glib.h>
22
typedef <link linkend="GQuark">GQuark</link>;
23
<link linkend="GQuark">GQuark</link> <link linkend="g-quark-from-string">g_quark_from_string</link> (const <link linkend="gchar">gchar</link> *string);
24
<link linkend="GQuark">GQuark</link> <link linkend="g-quark-from-static-string">g_quark_from_static_string</link> (const <link linkend="gchar">gchar</link> *string);
25
const <link linkend="gchar">gchar</link>* <link linkend="g-quark-to-string">g_quark_to_string</link> (<link linkend="GQuark">GQuark</link> quark);
26
<link linkend="GQuark">GQuark</link> <link linkend="g-quark-try-string">g_quark_try_string</link> (const <link linkend="gchar">gchar</link> *string);
27
const <link linkend="gchar">gchar</link>* <link linkend="g-intern-string">g_intern_string</link> (const <link linkend="gchar">gchar</link> *string);
28
const <link linkend="gchar">gchar</link>* <link linkend="g-intern-static-string">g_intern_static_string</link> (const <link linkend="gchar">gchar</link> *string);
40
<refsect1 role="desc">
41
<title role="desc.title">Description</title>
43
Quarks are associations between strings and integer identifiers.
44
Given either the string or the <link linkend="GQuark"><type>GQuark</type></link> identifier it is possible to
48
Quarks are used for both
49
<link linkend="glib-datasets">Datasets</link> and
50
<link linkend="glib-keyed-data-lists">Keyed Data Lists</link>.
53
To create a new quark from a string, use <link linkend="g-quark-from-string"><function>g_quark_from_string()</function></link> or
54
<link linkend="g-quark-from-static-string"><function>g_quark_from_static_string()</function></link>.
57
To find the string corresponding to a given <link linkend="GQuark"><type>GQuark</type></link>, use <link linkend="g-quark-to-string"><function>g_quark_to_string()</function></link>.
60
To find the <link linkend="GQuark"><type>GQuark</type></link> corresponding to a given string, use <link linkend="g-quark-try-string"><function>g_quark_try_string()</function></link>.
63
Another use for the string pool maintained for the quark functions is string
64
interning, using <link linkend="g-intern-string"><function>g_intern_string()</function></link> or <link linkend="g-intern-static-string"><function>g_intern_static_string()</function></link>. An interned string
65
is a canonical representation for a string. One important advantage of interned strings
66
is that they can be compared for equality by a simple pointer comparision, rather than
67
using <link linkend="strcmp"><function>strcmp()</function></link>.
71
<refsect1 role="details">
72
<title role="details.title">Details</title>
74
<title><anchor id="GQuark" role="typedef"/>GQuark</title>
75
<indexterm><primary>GQuark</primary></indexterm><programlisting>typedef guint32 GQuark;
78
A GQuark is an integer which uniquely identifies a particular string.
81
<title><anchor id="g-quark-from-string" role="function"/>g_quark_from_string ()</title>
82
<indexterm><primary>g_quark_from_string</primary></indexterm><programlisting><link linkend="GQuark">GQuark</link> g_quark_from_string (const <link linkend="gchar">gchar</link> *string);</programlisting>
84
Gets the <link linkend="GQuark"><type>GQuark</type></link> identifying the given string.
85
If the string does not currently have an associated <link linkend="GQuark"><type>GQuark</type></link>, a new
86
<link linkend="GQuark"><type>GQuark</type></link> is created, using a copy of the string.
87
</para><variablelist role="params">
88
<varlistentry><term><parameter>string</parameter> :</term>
89
<listitem><simpara>a string.
90
</simpara></listitem></varlistentry>
91
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara>the <link linkend="GQuark"><type>GQuark</type></link> identifying the string.
94
</simpara></listitem></varlistentry>
95
</variablelist></refsect2>
97
<title><anchor id="g-quark-from-static-string" role="function"/>g_quark_from_static_string ()</title>
98
<indexterm><primary>g_quark_from_static_string</primary></indexterm><programlisting><link linkend="GQuark">GQuark</link> g_quark_from_static_string (const <link linkend="gchar">gchar</link> *string);</programlisting>
100
Gets the <link linkend="GQuark"><type>GQuark</type></link> identifying the given (static) string.
101
If the string does not currently have an associated <link linkend="GQuark"><type>GQuark</type></link>, a new
102
<link linkend="GQuark"><type>GQuark</type></link> is created, linked to the given string.
105
Note that this function is identical to <link linkend="g-quark-from-string"><function>g_quark_from_string()</function></link> except
106
that if a new <link linkend="GQuark"><type>GQuark</type></link> is created the string itself is used rather than
107
a copy. This saves memory, but can only be used if the string will
108
<emphasis>always</emphasis> exist. It can be used with statically
109
allocated strings in the main program, but not with statically
110
allocated memory in dynamically loaded modules, if you expect to
111
ever unload the module again (e.g. do not use this function in
113
</para><variablelist role="params">
114
<varlistentry><term><parameter>string</parameter> :</term>
115
<listitem><simpara>a string.
116
</simpara></listitem></varlistentry>
117
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara>the <link linkend="GQuark"><type>GQuark</type></link> identifying the string.
120
</simpara></listitem></varlistentry>
121
</variablelist></refsect2>
123
<title><anchor id="g-quark-to-string" role="function"/>g_quark_to_string ()</title>
124
<indexterm><primary>g_quark_to_string</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* g_quark_to_string (<link linkend="GQuark">GQuark</link> quark);</programlisting>
126
Gets the string associated with the given <link linkend="GQuark"><type>GQuark</type></link>.
127
</para><variablelist role="params">
128
<varlistentry><term><parameter>quark</parameter> :</term>
129
<listitem><simpara>a <link linkend="GQuark"><type>GQuark</type></link>.
130
</simpara></listitem></varlistentry>
131
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara>the string associated with the <link linkend="GQuark"><type>GQuark</type></link>.
134
</simpara></listitem></varlistentry>
135
</variablelist></refsect2>
137
<title><anchor id="g-quark-try-string" role="function"/>g_quark_try_string ()</title>
138
<indexterm><primary>g_quark_try_string</primary></indexterm><programlisting><link linkend="GQuark">GQuark</link> g_quark_try_string (const <link linkend="gchar">gchar</link> *string);</programlisting>
140
Gets the <link linkend="GQuark"><type>GQuark</type></link> associated with the given string, or 0 if the string has
141
no associated <link linkend="GQuark"><type>GQuark</type></link>.
144
If you want the GQuark to be created if it doesn't already exist, use
145
<link linkend="g-quark-from-string"><function>g_quark_from_string()</function></link> or <link linkend="g-quark-from-static-string"><function>g_quark_from_static_string()</function></link>.
146
</para><variablelist role="params">
147
<varlistentry><term><parameter>string</parameter> :</term>
148
<listitem><simpara>a string.
149
</simpara></listitem></varlistentry>
150
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara>the <link linkend="GQuark"><type>GQuark</type></link> associated with the string, or 0 if there is no
151
<link linkend="GQuark"><type>GQuark</type></link> associated with the string.
154
</simpara></listitem></varlistentry>
155
</variablelist></refsect2>
157
<title><anchor id="g-intern-string" role="function" condition="since:2.10"/>g_intern_string ()</title>
158
<indexterm role="2.10"><primary>g_intern_string</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* g_intern_string (const <link linkend="gchar">gchar</link> *string);</programlisting>
160
Returns a canonical representation for <parameter>string</parameter>. Interned strings can
161
be compared for equality by comparing the pointers, instead of using <link linkend="strcmp"><function>strcmp()</function></link>.</para>
164
</para><variablelist role="params">
165
<varlistentry><term><parameter>string</parameter> :</term>
166
<listitem><simpara> a string
167
</simpara></listitem></varlistentry>
168
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> a canonical representation for the string
170
</simpara></listitem></varlistentry>
171
</variablelist><para role="since">Since 2.10
174
<title><anchor id="g-intern-static-string" role="function" condition="since:2.10"/>g_intern_static_string ()</title>
175
<indexterm role="2.10"><primary>g_intern_static_string</primary></indexterm><programlisting>const <link linkend="gchar">gchar</link>* g_intern_static_string (const <link linkend="gchar">gchar</link> *string);</programlisting>
177
Returns a canonical representation for <parameter>string</parameter>. Interned strings can
178
be compared for equality by comparing the pointers, instead of using <link linkend="strcmp"><function>strcmp()</function></link>.
179
<link linkend="g-intern-static-string"><function>g_intern_static_string()</function></link> does not copy the string, therefore <parameter>string</parameter> must
180
not be freed or modified.</para>
183
</para><variablelist role="params">
184
<varlistentry><term><parameter>string</parameter> :</term>
185
<listitem><simpara> a static string
186
</simpara></listitem></varlistentry>
187
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> a canonical representation for the string
189
</simpara></listitem></varlistentry>
190
</variablelist><para role="since">Since 2.10