[glib/mjog/2104-short-gtypes: 2/7] gobject: Add support for G_TYPE_(U)SHORT to GValue



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]