[glib/mjog/2104-short-gtypes: 2/7] gobject: Add support for G_TYPE_(U)SHORT to GValue
- From: Michael Gratton <mjog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib/mjog/2104-short-gtypes: 2/7] gobject: Add support for G_TYPE_(U)SHORT to GValue
- Date: Mon, 11 May 2020 11:37:58 +0000 (UTC)
commit 2283d3e9eb8d63b46c79b736ea9c93d21e000429
Author: Michael Gratton <mike vee net>
Date: Mon May 11 21:11:08 2020 +1000
gobject: Add support for G_TYPE_(U)SHORT to GValue
Defines and implements `G_VALUE_HOLDS_(U)SHORT`, `g_value_set_(u)short`
and `g_value_get_(s)short`.
gobject/gvaluetransform.c | 74 +++++++++++++++++++++++++++++
gobject/gvaluetypes.c | 110 ++++++++++++++++++++++++++++++++++++++++++++
gobject/gvaluetypes.h | 32 +++++++++++++
tests/gobject/gvalue-test.c | 43 +++++++++++++++++
4 files changed, 259 insertions(+)
---
diff --git a/gobject/gvaluetransform.c b/gobject/gvaluetransform.c
index a346a54f1..c3094a1ec 100644
--- a/gobject/gvaluetransform.c
+++ b/gobject/gvaluetransform.c
@@ -55,6 +55,8 @@ value_transform_##func_name (const GValue *src_value, \
DEFINE_CAST (int_s8, v_int, gint8, v_int);
DEFINE_CAST (int_u8, v_int, guint8, v_uint);
DEFINE_CAST (int_uint, v_int, guint, v_uint);
+DEFINE_CAST (int_short, v_int, gshort, v_int);
+DEFINE_CAST (int_ushort, v_int, gushort, v_uint);
DEFINE_CAST (int_long, v_int, glong, v_long);
DEFINE_CAST (int_ulong, v_int, gulong, v_ulong);
DEFINE_CAST (int_int64, v_int, gint64, v_int64);
@@ -66,12 +68,16 @@ DEFINE_CAST (uint_u8, v_uint, guint8, v_uint);
DEFINE_CAST (uint_int, v_uint, gint, v_int);
DEFINE_CAST (uint_long, v_uint, glong, v_long);
DEFINE_CAST (uint_ulong, v_uint, gulong, v_ulong);
+DEFINE_CAST (uint_short, v_uint, gshort, v_long);
+DEFINE_CAST (uint_ushort, v_uint, gushort, v_ulong);
DEFINE_CAST (uint_int64, v_uint, gint64, v_int64);
DEFINE_CAST (uint_uint64, v_uint, guint64, v_uint64);
DEFINE_CAST (uint_float, v_uint, gfloat, v_float);
DEFINE_CAST (uint_double, v_uint, gdouble, v_double);
DEFINE_CAST (long_s8, v_long, gint8, v_int);
DEFINE_CAST (long_u8, v_long, guint8, v_uint);
+DEFINE_CAST (long_short, v_long, gshort, v_int);
+DEFINE_CAST (long_ushort, v_long, gushort, v_uint);
DEFINE_CAST (long_int, v_long, gint, v_int);
DEFINE_CAST (long_uint, v_long, guint, v_uint);
DEFINE_CAST (long_ulong, v_long, gulong, v_ulong);
@@ -81,6 +87,8 @@ DEFINE_CAST (long_float, v_long, gfloat, v_float);
DEFINE_CAST (long_double, v_long, gdouble, v_double);
DEFINE_CAST (ulong_s8, v_ulong, gint8, v_int);
DEFINE_CAST (ulong_u8, v_ulong, guint8, v_uint);
+DEFINE_CAST (ulong_short, v_ulong, gshort, v_int);
+DEFINE_CAST (ulong_ushort, v_ulong, gushort, v_uint);
DEFINE_CAST (ulong_int, v_ulong, gint, v_int);
DEFINE_CAST (ulong_uint, v_ulong, guint, v_uint);
DEFINE_CAST (ulong_int64, v_ulong, gint64, v_int64);
@@ -90,6 +98,8 @@ DEFINE_CAST (ulong_float, v_ulong, gfloat, v_float);
DEFINE_CAST (ulong_double, v_ulong, gdouble, v_double);
DEFINE_CAST (int64_s8, v_int64, gint8, v_int);
DEFINE_CAST (int64_u8, v_int64, guint8, v_uint);
+DEFINE_CAST (int64_short, v_int64, gshort, v_int);
+DEFINE_CAST (int64_ushort, v_int64, gushort, v_uint);
DEFINE_CAST (int64_int, v_int64, gint, v_int);
DEFINE_CAST (int64_uint, v_int64, guint, v_uint);
DEFINE_CAST (int64_long, v_int64, glong, v_long);
@@ -99,6 +109,8 @@ DEFINE_CAST (int64_float, v_int64, gfloat, v_float);
DEFINE_CAST (int64_double, v_int64, gdouble, v_double);
DEFINE_CAST (uint64_s8, v_uint64, gint8, v_int);
DEFINE_CAST (uint64_u8, v_uint64, guint8, v_uint);
+DEFINE_CAST (uint64_short, v_uint64, gshort, v_int);
+DEFINE_CAST (uint64_ushort, v_uint64, gushort, v_uint);
DEFINE_CAST (uint64_int, v_uint64, gint, v_int);
DEFINE_CAST (uint64_uint, v_uint64, guint, v_uint);
DEFINE_CAST (uint64_long, v_uint64, glong, v_long);
@@ -108,6 +120,8 @@ DEFINE_CAST (uint64_float, v_uint64, gfloat, v_float);
DEFINE_CAST (uint64_double, v_uint64, gdouble, v_double);
DEFINE_CAST (float_s8, v_float, gint8, v_int);
DEFINE_CAST (float_u8, v_float, guint8, v_uint);
+DEFINE_CAST (float_short, v_float, gshort, v_int);
+DEFINE_CAST (float_ushort, v_float, gushort, v_uint);
DEFINE_CAST (float_int, v_float, gint, v_int);
DEFINE_CAST (float_uint, v_float, guint, v_uint);
DEFINE_CAST (float_long, v_float, glong, v_long);
@@ -119,6 +133,8 @@ DEFINE_CAST (double_s8, v_double, gint8, v_int);
DEFINE_CAST (double_u8, v_double, guint8, v_uint);
DEFINE_CAST (double_int, v_double, gint, v_int);
DEFINE_CAST (double_uint, v_double, guint, v_uint);
+DEFINE_CAST (double_short, v_double, gshort, v_int);
+DEFINE_CAST (double_ushort, v_double, gushort, v_uint);
DEFINE_CAST (double_long, v_double, glong, v_long);
DEFINE_CAST (double_ulong, v_double, gulong, v_ulong);
DEFINE_CAST (double_int64, v_double, gint64, v_int64);
@@ -244,6 +260,8 @@ _g_value_transforms_init (void)
g_value_register_transform_func (G_TYPE_CHAR, G_TYPE_CHAR, value_transform_int_int);
g_value_register_transform_func (G_TYPE_CHAR, G_TYPE_UCHAR, value_transform_int_u8);
g_value_register_transform_func (G_TYPE_CHAR, G_TYPE_BOOLEAN, value_transform_int_bool);
+ g_value_register_transform_func (G_TYPE_CHAR, G_TYPE_SHORT, value_transform_int_short);
+ g_value_register_transform_func (G_TYPE_CHAR, G_TYPE_USHORT, value_transform_int_ushort);
g_value_register_transform_func (G_TYPE_CHAR, G_TYPE_INT, value_transform_int_int);
g_value_register_transform_func (G_TYPE_CHAR, G_TYPE_UINT, value_transform_int_uint);
g_value_register_transform_func (G_TYPE_CHAR, G_TYPE_LONG, value_transform_int_long);
@@ -258,6 +276,8 @@ _g_value_transforms_init (void)
g_value_register_transform_func (G_TYPE_UCHAR, G_TYPE_CHAR, value_transform_uint_s8);
g_value_register_transform_func (G_TYPE_UCHAR, G_TYPE_UCHAR, value_transform_uint_uint);
g_value_register_transform_func (G_TYPE_UCHAR, G_TYPE_BOOLEAN, value_transform_uint_bool);
+ g_value_register_transform_func (G_TYPE_UCHAR, G_TYPE_SHORT, value_transform_uint_short);
+ g_value_register_transform_func (G_TYPE_UCHAR, G_TYPE_USHORT, value_transform_uint_ushort);
g_value_register_transform_func (G_TYPE_UCHAR, G_TYPE_INT, value_transform_uint_int);
g_value_register_transform_func (G_TYPE_UCHAR, G_TYPE_UINT, value_transform_uint_uint);
g_value_register_transform_func (G_TYPE_UCHAR, G_TYPE_LONG, value_transform_uint_long);
@@ -272,6 +292,8 @@ _g_value_transforms_init (void)
g_value_register_transform_func (G_TYPE_BOOLEAN, G_TYPE_CHAR, value_transform_int_s8);
g_value_register_transform_func (G_TYPE_BOOLEAN, G_TYPE_UCHAR, value_transform_int_u8);
g_value_register_transform_func (G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, value_transform_int_int);
+ g_value_register_transform_func (G_TYPE_BOOLEAN, G_TYPE_SHORT, value_transform_int_short);
+ g_value_register_transform_func (G_TYPE_BOOLEAN, G_TYPE_USHORT, value_transform_int_ushort);
g_value_register_transform_func (G_TYPE_BOOLEAN, G_TYPE_INT, value_transform_int_int);
g_value_register_transform_func (G_TYPE_BOOLEAN, G_TYPE_UINT, value_transform_int_uint);
g_value_register_transform_func (G_TYPE_BOOLEAN, G_TYPE_LONG, value_transform_int_long);
@@ -283,9 +305,43 @@ _g_value_transforms_init (void)
SKIP____register_transform_func (G_TYPE_BOOLEAN, G_TYPE_FLOAT, value_transform_int_float);
SKIP____register_transform_func (G_TYPE_BOOLEAN, G_TYPE_DOUBLE, value_transform_int_double);
g_value_register_transform_func (G_TYPE_BOOLEAN, G_TYPE_STRING, value_transform_bool_string);
+ g_value_register_transform_func (G_TYPE_SHORT, G_TYPE_CHAR, value_transform_int_s8);
+ g_value_register_transform_func (G_TYPE_SHORT, G_TYPE_UCHAR, value_transform_int_u8);
+ g_value_register_transform_func (G_TYPE_SHORT, G_TYPE_BOOLEAN, value_transform_int_bool);
+ g_value_register_transform_func (G_TYPE_SHORT, G_TYPE_SHORT, value_transform_int_short);
+ g_value_register_transform_func (G_TYPE_SHORT, G_TYPE_USHORT, value_transform_int_ushort);
+ g_value_register_transform_func (G_TYPE_SHORT, G_TYPE_INT, value_transform_int_int);
+ g_value_register_transform_func (G_TYPE_SHORT, G_TYPE_UINT, value_transform_int_uint);
+ g_value_register_transform_func (G_TYPE_SHORT, G_TYPE_LONG, value_transform_int_long);
+ g_value_register_transform_func (G_TYPE_SHORT, G_TYPE_ULONG, value_transform_int_ulong);
+ g_value_register_transform_func (G_TYPE_SHORT, G_TYPE_INT64, value_transform_int_int64);
+ g_value_register_transform_func (G_TYPE_SHORT, G_TYPE_UINT64, value_transform_int_uint64);
+ g_value_register_transform_func (G_TYPE_SHORT, G_TYPE_ENUM, value_transform_int_long);
+ g_value_register_transform_func (G_TYPE_SHORT, G_TYPE_FLAGS, value_transform_int_ulong);
+ g_value_register_transform_func (G_TYPE_SHORT, G_TYPE_FLOAT, value_transform_int_float);
+ g_value_register_transform_func (G_TYPE_SHORT, G_TYPE_DOUBLE, value_transform_int_double);
+ g_value_register_transform_func (G_TYPE_SHORT, G_TYPE_STRING, value_transform_int_string);
+ g_value_register_transform_func (G_TYPE_USHORT, G_TYPE_CHAR, value_transform_uint_s8);
+ g_value_register_transform_func (G_TYPE_USHORT, G_TYPE_UCHAR, value_transform_uint_u8);
+ g_value_register_transform_func (G_TYPE_USHORT, G_TYPE_BOOLEAN, value_transform_uint_bool);
+ g_value_register_transform_func (G_TYPE_USHORT, G_TYPE_SHORT, value_transform_uint_short);
+ g_value_register_transform_func (G_TYPE_USHORT, G_TYPE_USHORT, value_transform_uint_ushort);
+ g_value_register_transform_func (G_TYPE_USHORT, G_TYPE_INT, value_transform_uint_int);
+ g_value_register_transform_func (G_TYPE_USHORT, G_TYPE_UINT, value_transform_uint_uint);
+ g_value_register_transform_func (G_TYPE_USHORT, G_TYPE_LONG, value_transform_uint_long);
+ g_value_register_transform_func (G_TYPE_USHORT, G_TYPE_ULONG, value_transform_uint_ulong);
+ g_value_register_transform_func (G_TYPE_USHORT, G_TYPE_INT64, value_transform_uint_int64);
+ g_value_register_transform_func (G_TYPE_USHORT, G_TYPE_UINT64, value_transform_uint_uint64);
+ g_value_register_transform_func (G_TYPE_USHORT, G_TYPE_ENUM, value_transform_uint_long);
+ g_value_register_transform_func (G_TYPE_USHORT, G_TYPE_FLAGS, value_transform_uint_ulong);
+ g_value_register_transform_func (G_TYPE_USHORT, G_TYPE_FLOAT, value_transform_uint_float);
+ g_value_register_transform_func (G_TYPE_USHORT, G_TYPE_DOUBLE, value_transform_uint_double);
+ g_value_register_transform_func (G_TYPE_USHORT, G_TYPE_STRING, value_transform_uint_string);
g_value_register_transform_func (G_TYPE_INT, G_TYPE_CHAR, value_transform_int_s8);
g_value_register_transform_func (G_TYPE_INT, G_TYPE_UCHAR, value_transform_int_u8);
g_value_register_transform_func (G_TYPE_INT, G_TYPE_BOOLEAN, value_transform_int_bool);
+ g_value_register_transform_func (G_TYPE_INT, G_TYPE_SHORT, value_transform_int_short);
+ g_value_register_transform_func (G_TYPE_INT, G_TYPE_USHORT, value_transform_int_ushort);
g_value_register_transform_func (G_TYPE_INT, G_TYPE_INT, value_transform_int_int);
g_value_register_transform_func (G_TYPE_INT, G_TYPE_UINT, value_transform_int_uint);
g_value_register_transform_func (G_TYPE_INT, G_TYPE_LONG, value_transform_int_long);
@@ -300,6 +356,8 @@ _g_value_transforms_init (void)
g_value_register_transform_func (G_TYPE_UINT, G_TYPE_CHAR, value_transform_uint_s8);
g_value_register_transform_func (G_TYPE_UINT, G_TYPE_UCHAR, value_transform_uint_u8);
g_value_register_transform_func (G_TYPE_UINT, G_TYPE_BOOLEAN, value_transform_uint_bool);
+ g_value_register_transform_func (G_TYPE_UINT, G_TYPE_SHORT, value_transform_uint_short);
+ g_value_register_transform_func (G_TYPE_UINT, G_TYPE_USHORT, value_transform_uint_ushort);
g_value_register_transform_func (G_TYPE_UINT, G_TYPE_INT, value_transform_uint_int);
g_value_register_transform_func (G_TYPE_UINT, G_TYPE_UINT, value_transform_uint_uint);
g_value_register_transform_func (G_TYPE_UINT, G_TYPE_LONG, value_transform_uint_long);
@@ -314,6 +372,8 @@ _g_value_transforms_init (void)
g_value_register_transform_func (G_TYPE_LONG, G_TYPE_CHAR, value_transform_long_s8);
g_value_register_transform_func (G_TYPE_LONG, G_TYPE_UCHAR, value_transform_long_u8);
g_value_register_transform_func (G_TYPE_LONG, G_TYPE_BOOLEAN, value_transform_long_bool);
+ g_value_register_transform_func (G_TYPE_LONG, G_TYPE_SHORT, value_transform_long_short);
+ g_value_register_transform_func (G_TYPE_LONG, G_TYPE_USHORT, value_transform_long_ushort);
g_value_register_transform_func (G_TYPE_LONG, G_TYPE_INT, value_transform_long_int);
g_value_register_transform_func (G_TYPE_LONG, G_TYPE_UINT, value_transform_long_uint);
g_value_register_transform_func (G_TYPE_LONG, G_TYPE_LONG, value_transform_long_long);
@@ -328,6 +388,8 @@ _g_value_transforms_init (void)
g_value_register_transform_func (G_TYPE_ULONG, G_TYPE_CHAR, value_transform_ulong_s8);
g_value_register_transform_func (G_TYPE_ULONG, G_TYPE_UCHAR, value_transform_ulong_u8);
g_value_register_transform_func (G_TYPE_ULONG, G_TYPE_BOOLEAN, value_transform_ulong_bool);
+ g_value_register_transform_func (G_TYPE_ULONG, G_TYPE_SHORT, value_transform_ulong_short);
+ g_value_register_transform_func (G_TYPE_ULONG, G_TYPE_USHORT,
value_transform_ulong_ushort);
g_value_register_transform_func (G_TYPE_ULONG, G_TYPE_INT, value_transform_ulong_int);
g_value_register_transform_func (G_TYPE_ULONG, G_TYPE_UINT, value_transform_ulong_uint);
g_value_register_transform_func (G_TYPE_ULONG, G_TYPE_LONG, value_transform_ulong_long);
@@ -342,6 +404,8 @@ _g_value_transforms_init (void)
g_value_register_transform_func (G_TYPE_INT64, G_TYPE_CHAR, value_transform_int64_s8);
g_value_register_transform_func (G_TYPE_INT64, G_TYPE_UCHAR, value_transform_int64_u8);
g_value_register_transform_func (G_TYPE_INT64, G_TYPE_BOOLEAN, value_transform_int64_bool);
+ g_value_register_transform_func (G_TYPE_INT64, G_TYPE_SHORT, value_transform_int64_short);
+ g_value_register_transform_func (G_TYPE_INT64, G_TYPE_USHORT,
value_transform_int64_ushort);
g_value_register_transform_func (G_TYPE_INT64, G_TYPE_INT, value_transform_int64_int);
g_value_register_transform_func (G_TYPE_INT64, G_TYPE_UINT, value_transform_int64_uint);
g_value_register_transform_func (G_TYPE_INT64, G_TYPE_LONG, value_transform_int64_long);
@@ -356,6 +420,8 @@ _g_value_transforms_init (void)
g_value_register_transform_func (G_TYPE_UINT64, G_TYPE_CHAR, value_transform_uint64_s8);
g_value_register_transform_func (G_TYPE_UINT64, G_TYPE_UCHAR, value_transform_uint64_u8);
g_value_register_transform_func (G_TYPE_UINT64, G_TYPE_BOOLEAN, value_transform_uint64_bool);
+ g_value_register_transform_func (G_TYPE_UINT64, G_TYPE_SHORT,
value_transform_uint64_short);
+ g_value_register_transform_func (G_TYPE_UINT64, G_TYPE_USHORT,
value_transform_uint64_ushort);
g_value_register_transform_func (G_TYPE_UINT64, G_TYPE_INT, value_transform_uint64_int);
g_value_register_transform_func (G_TYPE_UINT64, G_TYPE_UINT, value_transform_uint64_uint);
g_value_register_transform_func (G_TYPE_UINT64, G_TYPE_LONG, value_transform_uint64_long);
@@ -370,6 +436,8 @@ _g_value_transforms_init (void)
g_value_register_transform_func (G_TYPE_ENUM, G_TYPE_CHAR, value_transform_long_s8);
g_value_register_transform_func (G_TYPE_ENUM, G_TYPE_UCHAR, value_transform_long_u8);
SKIP____register_transform_func (G_TYPE_ENUM, G_TYPE_BOOLEAN, value_transform_long_bool);
+ g_value_register_transform_func (G_TYPE_ENUM, G_TYPE_SHORT, value_transform_long_short);
+ g_value_register_transform_func (G_TYPE_ENUM, G_TYPE_USHORT, value_transform_long_ushort);
g_value_register_transform_func (G_TYPE_ENUM, G_TYPE_INT, value_transform_long_int);
g_value_register_transform_func (G_TYPE_ENUM, G_TYPE_UINT, value_transform_long_uint);
g_value_register_transform_func (G_TYPE_ENUM, G_TYPE_LONG, value_transform_long_long);
@@ -384,6 +452,8 @@ _g_value_transforms_init (void)
g_value_register_transform_func (G_TYPE_FLAGS, G_TYPE_CHAR, value_transform_ulong_s8);
g_value_register_transform_func (G_TYPE_FLAGS, G_TYPE_UCHAR, value_transform_ulong_u8);
SKIP____register_transform_func (G_TYPE_FLAGS, G_TYPE_BOOLEAN, value_transform_ulong_bool);
+ g_value_register_transform_func (G_TYPE_FLAGS, G_TYPE_SHORT, value_transform_ulong_short);
+ g_value_register_transform_func (G_TYPE_FLAGS, G_TYPE_USHORT,
value_transform_ulong_ushort);
g_value_register_transform_func (G_TYPE_FLAGS, G_TYPE_INT, value_transform_ulong_int);
g_value_register_transform_func (G_TYPE_FLAGS, G_TYPE_UINT, value_transform_ulong_uint);
g_value_register_transform_func (G_TYPE_FLAGS, G_TYPE_LONG, value_transform_ulong_long);
@@ -398,6 +468,8 @@ _g_value_transforms_init (void)
g_value_register_transform_func (G_TYPE_FLOAT, G_TYPE_CHAR, value_transform_float_s8);
g_value_register_transform_func (G_TYPE_FLOAT, G_TYPE_UCHAR, value_transform_float_u8);
SKIP____register_transform_func (G_TYPE_FLOAT, G_TYPE_BOOLEAN, value_transform_float_bool);
+ g_value_register_transform_func (G_TYPE_FLOAT, G_TYPE_SHORT, value_transform_float_short);
+ g_value_register_transform_func (G_TYPE_FLOAT, G_TYPE_USHORT,
value_transform_float_ushort);
g_value_register_transform_func (G_TYPE_FLOAT, G_TYPE_INT, value_transform_float_int);
g_value_register_transform_func (G_TYPE_FLOAT, G_TYPE_UINT, value_transform_float_uint);
g_value_register_transform_func (G_TYPE_FLOAT, G_TYPE_LONG, value_transform_float_long);
@@ -412,6 +484,8 @@ _g_value_transforms_init (void)
g_value_register_transform_func (G_TYPE_DOUBLE, G_TYPE_CHAR, value_transform_double_s8);
g_value_register_transform_func (G_TYPE_DOUBLE, G_TYPE_UCHAR, value_transform_double_u8);
SKIP____register_transform_func (G_TYPE_DOUBLE, G_TYPE_BOOLEAN, value_transform_double_bool);
+ g_value_register_transform_func (G_TYPE_DOUBLE, G_TYPE_SHORT,
value_transform_double_short);
+ g_value_register_transform_func (G_TYPE_DOUBLE, G_TYPE_USHORT,
value_transform_double_ushort);
g_value_register_transform_func (G_TYPE_DOUBLE, G_TYPE_INT, value_transform_double_int);
g_value_register_transform_func (G_TYPE_DOUBLE, G_TYPE_UINT, value_transform_double_uint);
g_value_register_transform_func (G_TYPE_DOUBLE, G_TYPE_LONG, value_transform_double_long);
diff --git a/gobject/gvaluetypes.c b/gobject/gvaluetypes.c
index 35b85c684..d3c41ce7d 100644
--- a/gobject/gvaluetypes.c
+++ b/gobject/gvaluetypes.c
@@ -107,6 +107,22 @@ value_lcopy_int (const GValue *value,
return NULL;
}
+static gchar*
+value_lcopy_short (const GValue *value,
+ guint n_collect_values,
+ GTypeCValue *collect_values,
+ guint collect_flags)
+{
+ gshort *short_p = collect_values[0].v_pointer;
+
+ if (!short_p)
+ return g_strdup_printf ("value location for '%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+
+ *short_p = value->data[0].v_int;
+
+ return NULL;
+}
+
static gchar*
value_collect_long (GValue *value,
guint n_collect_values,
@@ -624,6 +640,26 @@ _g_value_types_init (void)
type = g_type_register_fundamental (G_TYPE_VARIANT, g_intern_static_string ("GVariant"), &info, &finfo,
0);
g_assert (type == G_TYPE_VARIANT);
}
+
+ /* G_TYPE_SHORT / G_TYPE_USHORT
+ */
+ {
+ static const GTypeValueTable value_table = {
+ value_init_long0, /* value_init */
+ NULL, /* value_free */
+ value_copy_long0, /* value_copy */
+ NULL, /* value_peek_pointer */
+ "i", /* collect_format */
+ value_collect_int, /* collect_value */
+ "p", /* lcopy_format */
+ value_lcopy_short, /* lcopy_value */
+ };
+ info.value_table = &value_table;
+ type = g_type_register_fundamental (G_TYPE_SHORT, g_intern_static_string ("gshort"), &info, &finfo, 0);
+ g_assert (type == G_TYPE_SHORT);
+ type = g_type_register_fundamental (G_TYPE_USHORT, g_intern_static_string ("gushort"), &info, &finfo, 0);
+ g_assert (type == G_TYPE_USHORT);
+ }
}
@@ -764,12 +800,86 @@ g_value_get_boolean (const GValue *value)
return value->data[0].v_int;
}
+/**
+ * g_value_set_short:
+ * @value: a valid #GValue of type %G_TYPE_SHORT
+ * @v_short: signed 16 bit integer to be set
+ *
+ * Set the contents of a %G_TYPE_SHORT #GValue to @v_short.
+ *
+ * Since: 2.66
+ */
+void
+g_value_set_short (GValue *value,
+ gshort v_short)
+{
+ g_return_if_fail (G_VALUE_HOLDS_SHORT (value));
+
+ value->data[0].v_int = v_short;
+}
+
+/**
+ * g_value_get_short:
+ * @value: a valid #GValue of type %G_TYPE_SHORT
+ *
+ * Get the contents of a %G_TYPE_SHORT #GValue.
+ *
+ * Returns: signed 16 bit integer contents of @value
+ *
+ * Since: 2.66
+ */
+gshort
+g_value_get_short (const GValue *value)
+{
+ g_return_val_if_fail (G_VALUE_HOLDS_SHORT (value), 0);
+
+ return value->data[0].v_int;
+}
+
+/**
+ * g_value_set_ushort:
+ * @value: a valid #GValue of type %G_TYPE_USHORT
+ * @v_ushort: unsigned short value to be set
+ *
+ * Set the contents of a %G_TYPE_USHORT #GValue to @v_ushort.
+ *
+ * Since: 2.66
+ */
+void
+g_value_set_ushort (GValue *value,
+ gushort v_ushort)
+{
+ g_return_if_fail (G_VALUE_HOLDS_USHORT (value));
+
+ value->data[0].v_uint = v_ushort;
+}
+
+/**
+ * g_value_get_ushort:
+ * @value: a valid #GValue of type %G_TYPE_USHORT
+ *
+ * Get the contents of a %G_TYPE_USHORT #GValue.
+ *
+ * Returns: unsigned short contents of @value
+ *
+ * Since: 2.66
+ */
+gushort
+g_value_get_ushort (const GValue *value)
+{
+ g_return_val_if_fail (G_VALUE_HOLDS_USHORT (value), 0);
+
+ return value->data[0].v_uint;
+}
+
/**
* g_value_set_int:
* @value: a valid #GValue of type %G_TYPE_INT
* @v_int: integer value to be set
*
* Set the contents of a %G_TYPE_INT #GValue to @v_int.
+ *
+ * Since: 2.66
*/
void
g_value_set_int (GValue *value,
diff --git a/gobject/gvaluetypes.h b/gobject/gvaluetypes.h
index 927443532..daf9b523b 100644
--- a/gobject/gvaluetypes.h
+++ b/gobject/gvaluetypes.h
@@ -55,6 +55,28 @@ G_BEGIN_DECLS
* Returns: %TRUE on success.
*/
#define G_VALUE_HOLDS_BOOLEAN(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_BOOLEAN))
+/**
+ * G_VALUE_HOLDS_SHORT:
+ * @value: a valid #GValue structure
+ *
+ * Checks whether the given #GValue can hold values of type %G_TYPE_SHORT.
+ *
+ * Returns: %TRUE on success.
+ *
+ * Since: 2.66
+ */
+#define G_VALUE_HOLDS_SHORT(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_SHORT))
+/**
+ * G_VALUE_HOLDS_USHORT:
+ * @value: a valid #GValue structure
+ *
+ * Checks whether the given #GValue can hold values of type %G_TYPE_USHORT.
+ *
+ * Returns: %TRUE on success.
+ *
+ * Since: 2.66
+ */
+#define G_VALUE_HOLDS_USHORT(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_USHORT))
/**
* G_VALUE_HOLDS_INT:
* @value: a valid #GValue structure
@@ -196,6 +218,16 @@ void g_value_set_boolean (GValue *value,
GLIB_AVAILABLE_IN_ALL
gboolean g_value_get_boolean (const GValue *value);
GLIB_AVAILABLE_IN_ALL
+void g_value_set_short (GValue *value,
+ gshort v_short);
+GLIB_AVAILABLE_IN_ALL
+gshort g_value_get_short (const GValue *value);
+GLIB_AVAILABLE_IN_ALL
+void g_value_set_ushort (GValue *value,
+ gushort v_ushort);
+GLIB_AVAILABLE_IN_ALL
+gushort g_value_get_ushort (const GValue *value);
+GLIB_AVAILABLE_IN_ALL
void g_value_set_int (GValue *value,
gint v_int);
GLIB_AVAILABLE_IN_ALL
diff --git a/tests/gobject/gvalue-test.c b/tests/gobject/gvalue-test.c
index b73fe3150..e3b92b7eb 100644
--- a/tests/gobject/gvalue-test.c
+++ b/tests/gobject/gvalue-test.c
@@ -55,6 +55,16 @@ test_enum_transformation (void)
g_value_transform (&orig, &xform);
g_assert (g_value_get_uchar (&xform) == 1);
+ memset (&xform, 0, sizeof (GValue));
+ g_value_init (&xform, G_TYPE_SHORT);
+ g_value_transform (&orig, &xform);
+ g_assert (g_value_get_short (&xform) == 1);
+
+ memset (&xform, 0, sizeof (GValue));
+ g_value_init (&xform, G_TYPE_USHORT);
+ g_value_transform (&orig, &xform);
+ g_assert (g_value_get_ushort (&xform) == 1);
+
memset (&xform, 0, sizeof (GValue));
g_value_init (&xform, G_TYPE_INT);
g_value_transform (&orig, &xform);
@@ -226,6 +236,18 @@ test_collection (void)
g_assert (g_variant_is_of_type (g_value_get_variant (&value), G_VARIANT_TYPE ("u")));
g_assert_cmpuint (g_variant_get_uint32 (g_value_get_variant (&value)), ==, 42);
+ g_value_unset (&value);
+ g_value_init (&value, G_TYPE_SHORT);
+ error = collect (&value, G_MAXSHORT);
+ g_assert (error == NULL);
+ g_assert (g_value_get_short (&value) == G_MAXSHORT);
+
+ g_value_unset (&value);
+ g_value_init (&value, G_TYPE_USHORT);
+ error = collect (&value, G_MAXUSHORT);
+ g_assert (error == NULL);
+ g_assert (g_value_get_ushort (&value) == G_MAXUSHORT);
+
g_value_unset (&value);
}
@@ -381,6 +403,27 @@ test_copying (void)
g_variant_unref (c);
g_value_unset (&value);
}
+
+ {
+ gshort c = 0;
+
+ g_value_init (&value, G_TYPE_SHORT);
+ g_value_set_short (&value, G_MAXSHORT);
+ error = lcopy (&value, &c);
+ g_assert (error == NULL);
+ g_assert (c == G_MAXSHORT);
+ }
+
+ {
+ gushort c = 0;
+
+ g_value_unset (&value);
+ g_value_init (&value, G_TYPE_USHORT);
+ g_value_set_ushort (&value, G_MAXUSHORT);
+ error = lcopy (&value, &c);
+ g_assert (error == NULL);
+ g_assert (c == G_MAXUSHORT);
+ }
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]