297
<td class="listing_code"><pre class="programlisting"><span class="preproc">#include</span><span class="normal"> </span><span class="string"><glib-object.h></span>
299
<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
300
<span class="function">int2string</span><span class="normal"> </span><span class="symbol">(</span><span class="keyword">const</span><span class="normal"> </span><span class="usertype">GValue</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">src_value</span><span class="symbol">,</span>
301
<span class="normal"> </span><span class="usertype">GValue</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">dest_value</span><span class="symbol">)</span>
302
<span class="cbracket">{</span>
303
<span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="function"><a href="gobject-Standard-Parameter-and-Value-Types.html#g-value-get-int">g_value_get_int</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">src_value</span><span class="symbol">)</span><span class="normal"> </span><span class="symbol">==</span><span class="normal"> </span><span class="number">42</span><span class="symbol">)</span>
304
<span class="normal"> </span><span class="function"><a href="gobject-Standard-Parameter-and-Value-Types.html#g-value-set-static-string">g_value_set_static_string</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">dest_value</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"An important number"</span><span class="symbol">);</span>
305
<span class="normal"> </span><span class="keyword">else</span>
306
<span class="normal"> </span><span class="function"><a href="gobject-Standard-Parameter-and-Value-Types.html#g-value-set-static-string">g_value_set_static_string</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">dest_value</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"What's that?"</span><span class="symbol">);</span>
307
<span class="cbracket">}</span>
309
<span class="type">int</span>
310
<span class="function">main</span><span class="normal"> </span><span class="symbol">(</span><span class="type">int</span><span class="normal"> argc</span><span class="symbol">,</span>
311
<span class="normal"> </span><span class="type">char</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">argv</span><span class="symbol">[])</span>
312
<span class="cbracket">{</span>
313
<span class="normal"> </span><span class="comment">// GValues must be initialized</span>
314
<span class="normal"> </span><span class="usertype">GValue</span><span class="normal"> a </span><span class="symbol">=</span><span class="normal"> <a href="gobject-Generic-values.html#G-VALUE-INIT:CAPS">G_VALUE_INIT</a></span><span class="symbol">;</span>
315
<span class="normal"> </span><span class="usertype">GValue</span><span class="normal"> b </span><span class="symbol">=</span><span class="normal"> <a href="gobject-Generic-values.html#G-VALUE-INIT:CAPS">G_VALUE_INIT</a></span><span class="symbol">;</span>
316
<span class="normal"> </span><span class="keyword">const</span><span class="normal"> </span><span class="usertype">gchar</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">message</span><span class="symbol">;</span>
318
<span class="normal"> </span><span class="comment">// The GValue starts empty</span>
319
<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Testing.html#g-assert">g_assert</a></span><span class="normal"> </span><span class="symbol">(!</span><span class="function"><a href="gobject-Standard-Parameter-and-Value-Types.html#G-VALUE-HOLDS-STRING:CAPS">G_VALUE_HOLDS_STRING</a></span><span class="normal"> </span><span class="symbol">(&</span><span class="normal">a</span><span class="symbol">));</span>
321
<span class="normal"> </span><span class="comment">// Put a string in it</span>
322
<span class="normal"> </span><span class="function"><a href="gobject-Generic-values.html#g-value-init">g_value_init</a></span><span class="normal"> </span><span class="symbol">(&</span><span class="normal">a</span><span class="symbol">,</span><span class="normal"> <a href="gobject-Type-Information.html#G-TYPE-STRING:CAPS">G_TYPE_STRING</a></span><span class="symbol">);</span>
323
<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Testing.html#g-assert">g_assert</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function"><a href="gobject-Standard-Parameter-and-Value-Types.html#G-VALUE-HOLDS-STRING:CAPS">G_VALUE_HOLDS_STRING</a></span><span class="normal"> </span><span class="symbol">(&</span><span class="normal">a</span><span class="symbol">));</span>
324
<span class="normal"> </span><span class="function"><a href="gobject-Standard-Parameter-and-Value-Types.html#g-value-set-static-string">g_value_set_static_string</a></span><span class="normal"> </span><span class="symbol">(&</span><span class="normal">a</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"Hello, world!"</span><span class="symbol">);</span>
325
<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-String-Utility-Functions.html#g-printf">g_printf</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"%s</span><span class="specialchar">\n</span><span class="string">"</span><span class="symbol">,</span><span class="normal"> </span><span class="function"><a href="gobject-Standard-Parameter-and-Value-Types.html#g-value-get-string">g_value_get_string</a></span><span class="normal"> </span><span class="symbol">(&</span><span class="normal">a</span><span class="symbol">));</span>
327
<span class="normal"> </span><span class="comment">// Reset it to its pristine state</span>
328
<span class="normal"> </span><span class="function"><a href="gobject-Generic-values.html#g-value-unset">g_value_unset</a></span><span class="normal"> </span><span class="symbol">(&</span><span class="normal">a</span><span class="symbol">);</span>
330
<span class="normal"> </span><span class="comment">// It can then be reused for another type</span>
331
<span class="normal"> </span><span class="function"><a href="gobject-Generic-values.html#g-value-init">g_value_init</a></span><span class="normal"> </span><span class="symbol">(&</span><span class="normal">a</span><span class="symbol">,</span><span class="normal"> <a href="gobject-Type-Information.html#G-TYPE-INT:CAPS">G_TYPE_INT</a></span><span class="symbol">);</span>
332
<span class="normal"> </span><span class="function"><a href="gobject-Standard-Parameter-and-Value-Types.html#g-value-set-int">g_value_set_int</a></span><span class="normal"> </span><span class="symbol">(&</span><span class="normal">a</span><span class="symbol">,</span><span class="normal"> </span><span class="number">42</span><span class="symbol">);</span>
334
<span class="normal"> </span><span class="comment">// Attempt to transform it into a GValue of type STRING</span>
335
<span class="normal"> </span><span class="function"><a href="gobject-Generic-values.html#g-value-init">g_value_init</a></span><span class="normal"> </span><span class="symbol">(&</span><span class="normal">b</span><span class="symbol">,</span><span class="normal"> <a href="gobject-Type-Information.html#G-TYPE-STRING:CAPS">G_TYPE_STRING</a></span><span class="symbol">);</span>
337
<span class="normal"> </span><span class="comment">// An INT is transformable to a STRING</span>
338
<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Testing.html#g-assert">g_assert</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function"><a href="gobject-Generic-values.html#g-value-type-transformable">g_value_type_transformable</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal"><a href="gobject-Type-Information.html#G-TYPE-INT:CAPS">G_TYPE_INT</a></span><span class="symbol">,</span><span class="normal"> <a href="gobject-Type-Information.html#G-TYPE-STRING:CAPS">G_TYPE_STRING</a></span><span class="symbol">));</span>
340
<span class="normal"> </span><span class="function"><a href="gobject-Generic-values.html#g-value-transform">g_value_transform</a></span><span class="normal"> </span><span class="symbol">(&</span><span class="normal">a</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">&</span><span class="normal">b</span><span class="symbol">);</span>
341
<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-String-Utility-Functions.html#g-printf">g_printf</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"%s</span><span class="specialchar">\n</span><span class="string">"</span><span class="symbol">,</span><span class="normal"> </span><span class="function"><a href="gobject-Standard-Parameter-and-Value-Types.html#g-value-get-string">g_value_get_string</a></span><span class="normal"> </span><span class="symbol">(&</span><span class="normal">b</span><span class="symbol">));</span>
343
<span class="normal"> </span><span class="comment">// Attempt to transform it again using a custom transform function</span>
344
<span class="normal"> </span><span class="function"><a href="gobject-Generic-values.html#g-value-register-transform-func">g_value_register_transform_func</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal"><a href="gobject-Type-Information.html#G-TYPE-INT:CAPS">G_TYPE_INT</a></span><span class="symbol">,</span><span class="normal"> <a href="gobject-Type-Information.html#G-TYPE-STRING:CAPS">G_TYPE_STRING</a></span><span class="symbol">,</span><span class="normal"> int2string</span><span class="symbol">);</span>
345
<span class="normal"> </span><span class="function"><a href="gobject-Generic-values.html#g-value-transform">g_value_transform</a></span><span class="normal"> </span><span class="symbol">(&</span><span class="normal">a</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">&</span><span class="normal">b</span><span class="symbol">);</span>
346
<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-String-Utility-Functions.html#g-printf">g_printf</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"%s</span><span class="specialchar">\n</span><span class="string">"</span><span class="symbol">,</span><span class="normal"> </span><span class="function"><a href="gobject-Standard-Parameter-and-Value-Types.html#g-value-get-string">g_value_get_string</a></span><span class="normal"> </span><span class="symbol">(&</span><span class="normal">b</span><span class="symbol">));</span>
347
<span class="normal"> </span><span class="keyword">return</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span>
348
<span class="cbracket">}</span></pre></td>
297
<td class="listing_code"><pre class="programlisting"><span class="gtkdoc ppc">#include <glib-object.h></span>
299
<span class="gtkdoc kwb">static void</span>
300
<span class="function">int2string</span> <span class="gtkdoc opt">(</span><span class="gtkdoc kwb">const</span> GValue <span class="gtkdoc opt">*</span>src_value<span class="gtkdoc opt">,</span>
301
GValue <span class="gtkdoc opt">*</span>dest_value<span class="gtkdoc opt">)</span>
302
<span class="gtkdoc opt">{</span>
303
<span class="keyword">if</span> <span class="gtkdoc opt">(</span><span class="function"><a href="gobject-Standard-Parameter-and-Value-Types.html#g-value-get-int">g_value_get_int</a></span> <span class="gtkdoc opt">(</span>src_value<span class="gtkdoc opt">) ==</span> <span class="number">42</span><span class="gtkdoc opt">)</span>
304
<span class="function"><a href="gobject-Standard-Parameter-and-Value-Types.html#g-value-set-static-string">g_value_set_static_string</a></span> <span class="gtkdoc opt">(</span>dest_value<span class="gtkdoc opt">,</span> <span class="string">"An important number"</span><span class="gtkdoc opt">);</span>
305
<span class="keyword">else</span>
306
<span class="function"><a href="gobject-Standard-Parameter-and-Value-Types.html#g-value-set-static-string">g_value_set_static_string</a></span> <span class="gtkdoc opt">(</span>dest_value<span class="gtkdoc opt">,</span> <span class="string">"What's that?"</span><span class="gtkdoc opt">);</span>
307
<span class="gtkdoc opt">}</span>
309
<span class="gtkdoc kwb">int</span>
310
<span class="function">main</span> <span class="gtkdoc opt">(</span><span class="gtkdoc kwb">int</span> argc<span class="gtkdoc opt">,</span>
311
<span class="gtkdoc kwb">char</span> <span class="gtkdoc opt">*</span>argv<span class="gtkdoc opt">[])</span>
312
<span class="gtkdoc opt">{</span>
313
<span class="gtkdoc slc">// GValues must be initialized</span>
314
GValue a <span class="gtkdoc opt">=</span> G_VALUE_INIT<span class="gtkdoc opt">;</span>
315
GValue b <span class="gtkdoc opt">=</span> G_VALUE_INIT<span class="gtkdoc opt">;</span>
316
<span class="gtkdoc kwb">const</span> gchar <span class="gtkdoc opt">*</span>message<span class="gtkdoc opt">;</span>
318
<span class="gtkdoc slc">// The GValue starts empty</span>
319
<span class="function"><a href="../glib/glib-Testing.html#g-assert">g_assert</a></span> <span class="gtkdoc opt">(!</span><span class="function"><a href="gobject-Standard-Parameter-and-Value-Types.html#G-VALUE-HOLDS-STRING:CAPS">G_VALUE_HOLDS_STRING</a></span> <span class="gtkdoc opt">(&</span>a<span class="gtkdoc opt">));</span>
321
<span class="gtkdoc slc">// Put a string in it</span>
322
<span class="function"><a href="gobject-Generic-values.html#g-value-init">g_value_init</a></span> <span class="gtkdoc opt">(&</span>a<span class="gtkdoc opt">,</span> G_TYPE_STRING<span class="gtkdoc opt">);</span>
323
<span class="function"><a href="../glib/glib-Testing.html#g-assert">g_assert</a></span> <span class="gtkdoc opt">(</span><span class="function"><a href="gobject-Standard-Parameter-and-Value-Types.html#G-VALUE-HOLDS-STRING:CAPS">G_VALUE_HOLDS_STRING</a></span> <span class="gtkdoc opt">(&</span>a<span class="gtkdoc opt">));</span>
324
<span class="function"><a href="gobject-Standard-Parameter-and-Value-Types.html#g-value-set-static-string">g_value_set_static_string</a></span> <span class="gtkdoc opt">(&</span>a<span class="gtkdoc opt">,</span> <span class="string">"Hello, world!"</span><span class="gtkdoc opt">);</span>
325
<span class="function"><a href="../glib/glib-String-Utility-Functions.html#g-printf">g_printf</a></span> <span class="gtkdoc opt">(</span><span class="string">"%s</span><span class="gtkdoc esc">\n</span><span class="string">"</span><span class="gtkdoc opt">,</span> <span class="function"><a href="gobject-Standard-Parameter-and-Value-Types.html#g-value-get-string">g_value_get_string</a></span> <span class="gtkdoc opt">(&</span>a<span class="gtkdoc opt">));</span>
327
<span class="gtkdoc slc">// Reset it to its pristine state</span>
328
<span class="function"><a href="gobject-Generic-values.html#g-value-unset">g_value_unset</a></span> <span class="gtkdoc opt">(&</span>a<span class="gtkdoc opt">);</span>
330
<span class="gtkdoc slc">// It can then be reused for another type</span>
331
<span class="function"><a href="gobject-Generic-values.html#g-value-init">g_value_init</a></span> <span class="gtkdoc opt">(&</span>a<span class="gtkdoc opt">,</span> G_TYPE_INT<span class="gtkdoc opt">);</span>
332
<span class="function"><a href="gobject-Standard-Parameter-and-Value-Types.html#g-value-set-int">g_value_set_int</a></span> <span class="gtkdoc opt">(&</span>a<span class="gtkdoc opt">,</span> <span class="number">42</span><span class="gtkdoc opt">);</span>
334
<span class="gtkdoc slc">// Attempt to transform it into a GValue of type STRING</span>
335
<span class="function"><a href="gobject-Generic-values.html#g-value-init">g_value_init</a></span> <span class="gtkdoc opt">(&</span>b<span class="gtkdoc opt">,</span> G_TYPE_STRING<span class="gtkdoc opt">);</span>
337
<span class="gtkdoc slc">// An INT is transformable to a STRING</span>
338
<span class="function"><a href="../glib/glib-Testing.html#g-assert">g_assert</a></span> <span class="gtkdoc opt">(</span><span class="function"><a href="gobject-Generic-values.html#g-value-type-transformable">g_value_type_transformable</a></span> <span class="gtkdoc opt">(</span>G_TYPE_INT<span class="gtkdoc opt">,</span> G_TYPE_STRING<span class="gtkdoc opt">));</span>
340
<span class="function"><a href="gobject-Generic-values.html#g-value-transform">g_value_transform</a></span> <span class="gtkdoc opt">(&</span>a<span class="gtkdoc opt">, &</span>b<span class="gtkdoc opt">);</span>
341
<span class="function"><a href="../glib/glib-String-Utility-Functions.html#g-printf">g_printf</a></span> <span class="gtkdoc opt">(</span><span class="string">"%s</span><span class="gtkdoc esc">\n</span><span class="string">"</span><span class="gtkdoc opt">,</span> <span class="function"><a href="gobject-Standard-Parameter-and-Value-Types.html#g-value-get-string">g_value_get_string</a></span> <span class="gtkdoc opt">(&</span>b<span class="gtkdoc opt">));</span>
343
<span class="gtkdoc slc">// Attempt to transform it again using a custom transform function</span>
344
<span class="function"><a href="gobject-Generic-values.html#g-value-register-transform-func">g_value_register_transform_func</a></span> <span class="gtkdoc opt">(</span>G_TYPE_INT<span class="gtkdoc opt">,</span> G_TYPE_STRING<span class="gtkdoc opt">,</span> int2string<span class="gtkdoc opt">);</span>
345
<span class="function"><a href="gobject-Generic-values.html#g-value-transform">g_value_transform</a></span> <span class="gtkdoc opt">(&</span>a<span class="gtkdoc opt">, &</span>b<span class="gtkdoc opt">);</span>
346
<span class="function"><a href="../glib/glib-String-Utility-Functions.html#g-printf">g_printf</a></span> <span class="gtkdoc opt">(</span><span class="string">"%s</span><span class="gtkdoc esc">\n</span><span class="string">"</span><span class="gtkdoc opt">,</span> <span class="function"><a href="gobject-Standard-Parameter-and-Value-Types.html#g-value-get-string">g_value_get_string</a></span> <span class="gtkdoc opt">(&</span>b<span class="gtkdoc opt">));</span>
347
<span class="keyword">return</span> <span class="number">0</span><span class="gtkdoc opt">;</span>
348
<span class="gtkdoc opt">}</span></pre></td>