58
58
<a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> <a class="link" href="glib-Keyed-Data-Lists.html#g-datalist-id-remove-no-notify" title="g_datalist_id_remove_no_notify ()">g_datalist_id_remove_no_notify</a> (<em class="parameter"><code><a class="link" href="glib-Keyed-Data-Lists.html#GData" title="GData"><span class="type">GData</span></a> **datalist</code></em>,
59
59
<em class="parameter"><code><a class="link" href="glib-Quarks.html#GQuark" title="GQuark"><span class="type">GQuark</span></a> key_id</code></em>);
60
<a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> (<a class="link" href="glib-Keyed-Data-Lists.html#GDuplicateFunc" title="GDuplicateFunc ()">*GDuplicateFunc</a>) (<em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> data</code></em>,
61
<em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
62
<a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> <a class="link" href="glib-Keyed-Data-Lists.html#g-datalist-id-dup-data" title="g_datalist_id_dup_data ()">g_datalist_id_dup_data</a> (<em class="parameter"><code><a class="link" href="glib-Keyed-Data-Lists.html#GData" title="GData"><span class="type">GData</span></a> **datalist</code></em>,
63
<em class="parameter"><code><a class="link" href="glib-Quarks.html#GQuark" title="GQuark"><span class="type">GQuark</span></a> key_id</code></em>,
64
<em class="parameter"><code><a class="link" href="glib-Keyed-Data-Lists.html#GDuplicateFunc" title="GDuplicateFunc ()"><span class="type">GDuplicateFunc</span></a> dup_func</code></em>,
65
<em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
66
<a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="glib-Keyed-Data-Lists.html#g-datalist-id-replace-data" title="g_datalist_id_replace_data ()">g_datalist_id_replace_data</a> (<em class="parameter"><code><a class="link" href="glib-Keyed-Data-Lists.html#GData" title="GData"><span class="type">GData</span></a> **datalist</code></em>,
67
<em class="parameter"><code><a class="link" href="glib-Quarks.html#GQuark" title="GQuark"><span class="type">GQuark</span></a> key_id</code></em>,
68
<em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> oldval</code></em>,
69
<em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> newval</code></em>,
70
<em class="parameter"><code><a class="link" href="glib-Datasets.html#GDestroyNotify" title="GDestroyNotify ()"><span class="type">GDestroyNotify</span></a> destroy</code></em>,
71
<em class="parameter"><code><a class="link" href="glib-Datasets.html#GDestroyNotify" title="GDestroyNotify ()"><span class="type">GDestroyNotify</span></a> *old_destroy</code></em>);
61
73
#define <a class="link" href="glib-Keyed-Data-Lists.html#g-datalist-set-data" title="g_datalist_set_data()">g_datalist_set_data</a> (dl,
315
327
<div class="refsect2">
328
<a name="GDuplicateFunc"></a><h3>GDuplicateFunc ()</h3>
329
<pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> (*GDuplicateFunc) (<em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> data</code></em>,
330
<em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
332
The type of functions that are used to 'duplicate' an object.
333
What this means depends on the context, it could just be
334
incrementing the reference count, if <em class="parameter"><code>data</code></em> is a ref-counted
337
<div class="variablelist"><table border="0" class="variablelist">
339
<col align="left" valign="top">
344
<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
345
<td>the data to duplicate</td>
348
<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
349
<td>user data that was specified in <a class="link" href="glib-Keyed-Data-Lists.html#g-datalist-id-dup-data" title="g_datalist_id_dup_data ()"><code class="function">g_datalist_id_dup_data()</code></a>
353
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
354
<td>a duplicate of data</td>
360
<div class="refsect2">
361
<a name="g-datalist-id-dup-data"></a><h3>g_datalist_id_dup_data ()</h3>
362
<pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="returnvalue">gpointer</span></a> g_datalist_id_dup_data (<em class="parameter"><code><a class="link" href="glib-Keyed-Data-Lists.html#GData" title="GData"><span class="type">GData</span></a> **datalist</code></em>,
363
<em class="parameter"><code><a class="link" href="glib-Quarks.html#GQuark" title="GQuark"><span class="type">GQuark</span></a> key_id</code></em>,
364
<em class="parameter"><code><a class="link" href="glib-Keyed-Data-Lists.html#GDuplicateFunc" title="GDuplicateFunc ()"><span class="type">GDuplicateFunc</span></a> dup_func</code></em>,
365
<em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
367
This is a variant of <a class="link" href="glib-Keyed-Data-Lists.html#g-datalist-id-get-data" title="g_datalist_id_get_data ()"><code class="function">g_datalist_id_get_data()</code></a> which
368
returns a 'duplicate' of the value. <em class="parameter"><code>dup_func</code></em> defines the
369
meaning of 'duplicate' in this context, it could e.g.
370
take a reference on a ref-counted object.
373
If the <em class="parameter"><code>key_id</code></em> is not set in the datalist then <em class="parameter"><code>dup_func</code></em>
374
will be called with a <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> argument.
377
Note that <em class="parameter"><code>dup_func</code></em> is called while the datalist is locked, so it
378
is not allowed to read or modify the datalist.
381
This function can be useful to avoid races when multiple
382
threads are using the same datalist and the same key.
384
<div class="variablelist"><table border="0" class="variablelist">
386
<col align="left" valign="top">
391
<td><p><span class="term"><em class="parameter"><code>datalist</code></em> :</span></p></td>
392
<td>location of a datalist</td>
395
<td><p><span class="term"><em class="parameter"><code>key_id</code></em> :</span></p></td>
396
<td>the <a class="link" href="glib-Quarks.html#GQuark" title="GQuark"><span class="type">GQuark</span></a> identifying a data element</td>
399
<td><p><span class="term"><em class="parameter"><code>dup_func</code></em> :</span></p></td>
400
<td>function to duplicate the old value. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
404
<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
405
<td>passed as user_data to <em class="parameter"><code>dup_func</code></em>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
409
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
410
<td>the result of calling <em class="parameter"><code>dup_func</code></em> on the value
411
associated with <em class="parameter"><code>key_id</code></em> in <em class="parameter"><code>datalist</code></em>, or <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a> if not set.
412
If <em class="parameter"><code>dup_func</code></em> is <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a>, the value is returned unmodified.</td>
416
<p class="since">Since 2.34</p>
419
<div class="refsect2">
420
<a name="g-datalist-id-replace-data"></a><h3>g_datalist_id_replace_data ()</h3>
421
<pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a> g_datalist_id_replace_data (<em class="parameter"><code><a class="link" href="glib-Keyed-Data-Lists.html#GData" title="GData"><span class="type">GData</span></a> **datalist</code></em>,
422
<em class="parameter"><code><a class="link" href="glib-Quarks.html#GQuark" title="GQuark"><span class="type">GQuark</span></a> key_id</code></em>,
423
<em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> oldval</code></em>,
424
<em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> newval</code></em>,
425
<em class="parameter"><code><a class="link" href="glib-Datasets.html#GDestroyNotify" title="GDestroyNotify ()"><span class="type">GDestroyNotify</span></a> destroy</code></em>,
426
<em class="parameter"><code><a class="link" href="glib-Datasets.html#GDestroyNotify" title="GDestroyNotify ()"><span class="type">GDestroyNotify</span></a> *old_destroy</code></em>);</pre>
428
Compares the member that is associated with <em class="parameter"><code>key_id</code></em> in
429
<em class="parameter"><code>datalist</code></em> to <em class="parameter"><code>oldval</code></em>, and if they are the same, replace
430
<em class="parameter"><code>oldval</code></em> with <em class="parameter"><code>newval</code></em>.
433
This is like a typical atomic compare-and-exchange
434
operation, for a member of <em class="parameter"><code>datalist</code></em>.
437
If the previous value was replaced then ownership of the
438
old value (<em class="parameter"><code>oldval</code></em>) is passed to the caller, including
439
the registred destroy notify for it (passed out in <em class="parameter"><code>old_destroy</code></em>).
440
Its up to the caller to free this as he wishes, which may
441
or may not include using <em class="parameter"><code>old_destroy</code></em> as sometimes replacement
442
should not destroy the object in the normal way.
445
Return: <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a> if the existing value for <em class="parameter"><code>key_id</code></em> was replaced
446
by <em class="parameter"><code>newval</code></em>, <a class="link" href="glib-Standard-Macros.html#FALSE:CAPS" title="FALSE"><code class="literal">FALSE</code></a> otherwise.
448
<div class="variablelist"><table border="0" class="variablelist">
450
<col align="left" valign="top">
455
<td><p><span class="term"><em class="parameter"><code>datalist</code></em> :</span></p></td>
456
<td>location of a datalist</td>
459
<td><p><span class="term"><em class="parameter"><code>key_id</code></em> :</span></p></td>
460
<td>the <a class="link" href="glib-Quarks.html#GQuark" title="GQuark"><span class="type">GQuark</span></a> identifying a data element</td>
463
<td><p><span class="term"><em class="parameter"><code>oldval</code></em> :</span></p></td>
464
<td>the old value to compare against. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
468
<td><p><span class="term"><em class="parameter"><code>newval</code></em> :</span></p></td>
469
<td>the new value to replace it with. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
473
<td><p><span class="term"><em class="parameter"><code>destroy</code></em> :</span></p></td>
474
<td>destroy notify for the new value. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
478
<td><p><span class="term"><em class="parameter"><code>old_destroy</code></em> :</span></p></td>
479
<td>destroy notify for the existing value. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
484
<p class="since">Since 2.34</p>
487
<div class="refsect2">
316
488
<a name="g-datalist-set-data"></a><h3>g_datalist_set_data()</h3>
317
489
<pre class="programlisting">#define g_datalist_set_data(dl, k, d)</pre>