From 886c0e0d81e5d7e2b1658de59fe9498928f39d72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Lindqvist?= Date: Fri, 22 Aug 2008 18:23:05 +0000 Subject: [PATCH] =?UTF-8?q?Bug=20523939=20=E2=80=93=20Example=20program=20?= =?UTF-8?q?for=20GValue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2008-08-22 Björn Lindqvist Bug 523939 – Example program for GValue * gobject/gvalue.c: Add code example that demonstrates GValue's features. svn path=/trunk/; revision=7387 --- ChangeLog | 7 ++++++ gobject/gvalue.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/ChangeLog b/ChangeLog index 6aed61c8e..65d32e29f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-08-22 Björn Lindqvist + + Bug 523939 – Example program for GValue + + * gobject/gvalue.c: Add code example that demonstrates GValue's + features. + 2008-08-21 Tor Lillqvist * glib/giowin32.c: Minor comment improvements. Improve run-time diff --git a/gobject/gvalue.c b/gobject/gvalue.c index 02089f6f1..85187b7d5 100644 --- a/gobject/gvalue.c +++ b/gobject/gvalue.c @@ -53,6 +53,66 @@ * by the #GTypeValueTable associated with the type ID stored in the #GValue. * Other #GValue operations (such as converting values between types) are * provided by this interface. + * + * The code in the example program below demonstrates #GValue's + * features. + * + * |[ + * #include <glib-object.h> + * + * static void + * int2string (const GValue *src_value, + * GValue *dest_value) + * { + * if (g_value_get_int (src_value) == 42) + * g_value_set_static_string (dest_value, "An important number"); + * else + * g_value_set_static_string (dest_value, "What's that?"); + * } + * + * int + * main (int argc, + * char *argv[]) + * { + * /* GValues must start zero-filled */ + * GValue a = {0}; + * GValue b = {0}; + * const gchar *message; + * + * g_type_init (); + * + * /* The GValue starts empty */ + * g_assert (!G_VALUE_HOLDS_STRING (&a)); + * + * /* Put a string in it */ + * g_value_init (&a, G_TYPE_STRING); + * g_assert (G_VALUE_HOLDS_STRING (&a)); + * g_value_set_static_string (&a, "Hello, world!"); + * g_printf ("%s\n", g_value_get_string (&a)); + * + * /* Reset it to its pristine state */ + * g_value_unset (&a); + * + * /* It can then be reused for another type */ + * g_value_init (&a, G_TYPE_INT); + * g_value_set_int (&a, 42); + * + * /* Attempt to transform it into a GValue of type STRING */ + * g_value_init (&b, G_TYPE_STRING); + * + * /* An INT is transformable to a STRING */ + * g_assert (g_value_type_transformable (G_TYPE_INT, G_TYPE_STRING)); + * + * g_value_transform (&a, &b); + * g_printf ("%s\n", g_value_get_string (&b)); + * + * /* Attempt to transform it again using a custom transform function */ + * g_value_register_transform_func (G_TYPE_INT, G_TYPE_STRING, int2string); + * g_value_transform (&a, &b); + * g_printf ("%s\n", g_value_get_string (&b)); + * return 0; + * } + * ]| */