[gst-devel] glib quad support

vishnu at pobox.com vishnu at pobox.com
Sat Sep 15 12:08:02 CEST 2001


Here's an untested patch.

-- 
Victory to the Divine Mother!!
  http://sahajayoga.org
-------------- next part --------------
Index: docs/reference/gobject/tmpl/types.sgml
===================================================================
RCS file: /cvs/gnome/glib/docs/reference/gobject/tmpl/types.sgml,v
retrieving revision 1.18
diff -u -p -u -p -r1.18 types.sgml
--- docs/reference/gobject/tmpl/types.sgml	2001/08/12 00:56:22	1.18
+++ docs/reference/gobject/tmpl/types.sgml	2001/09/15 18:56:26
@@ -188,6 +188,8 @@ The predefined identifiers of the reserv
 @G_TYPE_UINT: 			Identifier for the built-in type "guint".
 @G_TYPE_LONG: 			Identifier for the built-in type "glong".
 @G_TYPE_ULONG: 			Identifier for the built-in type "gulong".
+ at G_TYPE_QUAD: 			Identifier for the built-in type "gquad".
+ at G_TYPE_UQUAD: 			Identifier for the built-in type "guquad".
 @G_TYPE_ENUM: 			Identifier for the "#GEnum" type.
 @G_TYPE_FLAGS: 			Identifier for the "#GFlags" type.
 @G_TYPE_FLOAT: 			Identifier for the built-in type "gfloat".
@@ -211,6 +213,8 @@ The predefined identifiers of the reserv
 @G_TYPE_PARAM_UINT: 		Identifier for the "#GParamSpecUInt" type.
 @G_TYPE_PARAM_LONG: 		Identifier for the "#GParamSpecLong" type.
 @G_TYPE_PARAM_ULONG: 		Identifier for the "#GParamSpecULong" type.
+ at G_TYPE_PARAM_QUAD: 		Identifier for the "#GParamSpecQuad" type.
+ at G_TYPE_PARAM_UQUAD: 		Identifier for the "#GParamSpecUQuad" type.
 @G_TYPE_PARAM_UNICHAR: 
 @G_TYPE_PARAM_ENUM: 		Identifier for the "#GParamSpecEnum" type.
 @G_TYPE_PARAM_FLAGS: 		Identifier for the "#GParamSpecFlags" type.
Index: glib/gtypes.h
===================================================================
RCS file: /cvs/gnome/glib/glib/gtypes.h,v
retrieving revision 1.10
diff -u -p -u -p -r1.10 gtypes.h
--- glib/gtypes.h	2001/07/27 10:46:13	1.10
+++ glib/gtypes.h	2001/09/15 18:56:26
@@ -49,6 +49,14 @@ typedef unsigned short  gushort;
 typedef unsigned long   gulong;
 typedef unsigned int    guint;
 
+#ifdef G_HAVE_GINT64
+typedef gint64  gquad;
+typedef guint64 guquad;
+#else
+typedef glong  gquad;
+typedef gulong guquad;
+#endif
+
 typedef float   gfloat;
 typedef double  gdouble;
 
Index: gobject/glib-genmarshal.c
===================================================================
RCS file: /cvs/gnome/glib/gobject/glib-genmarshal.c,v
retrieving revision 1.9
diff -u -p -u -p -r1.9 glib-genmarshal.c
--- gobject/glib-genmarshal.c	2001/07/26 10:36:01	1.9
+++ gobject/glib-genmarshal.c	2001/09/15 18:56:26
@@ -144,6 +144,8 @@ complete_in_arg (InArgument *iarg)
     { "UINT",		"UINT",		"guint",	"g_value_get_uint",	},
     { "LONG",		"LONG",		"glong",	"g_value_get_long",	},
     { "ULONG",		"ULONG",	"gulong",	"g_value_get_ulong",	},
+    { "QUAD",		"QUAD",		"gquad",	"g_value_get_quad",	},
+    { "UQUAD",		"UQUAD",	"guquad",	"g_value_get_uquad",	},
     { "ENUM",		"ENUM",		"gint",		"g_value_get_enum",	},
     { "FLAGS",		"FLAGS",	"guint",	"g_value_get_flags",	},
     { "FLOAT",		"FLOAT",	"gfloat",	"g_value_get_float",	},
@@ -187,6 +189,8 @@ complete_out_arg (OutArgument *oarg)
     { "UINT",		"UINT",		"guint",	"g_value_set_uint",	NULL,			NULL          },
     { "LONG",		"LONG",		"glong",	"g_value_set_long",	NULL,			NULL          },
     { "ULONG",		"ULONG",	"gulong",	"g_value_set_ulong",	NULL,			NULL          },
+    { "QUAD",		"QUAD",		"gquad",	"g_value_set_quad",	NULL,			NULL          },
+    { "UQUAD",		"UQUAD",	"guquad",	"g_value_set_uquad",	NULL,			NULL          },
     { "ENUM",		"ENUM",		"gint",		"g_value_set_enum",	NULL,			NULL          },
     { "FLAGS",		"FLAGS",	"guint",	"g_value_set_flags",	NULL,			NULL          },
     { "FLOAT",		"FLOAT",	"gfloat",	"g_value_set_float",	NULL,			NULL          },
Index: gobject/gparamspecs.c
===================================================================
RCS file: /cvs/gnome/glib/gobject/gparamspecs.c,v
retrieving revision 1.16
diff -u -p -u -p -r1.16 gparamspecs.c
--- gobject/gparamspecs.c	2001/05/10 13:58:40	1.16
+++ gobject/gparamspecs.c	2001/09/15 18:56:26
@@ -279,6 +279,91 @@ param_ulong_values_cmp (GParamSpec   *ps
 }
 
 static void
+param_quad_init (GParamSpec *pspec)
+{
+  GParamSpecQuad *lspec = G_PARAM_SPEC_QUAD (pspec);
+  
+#if SIZEOF_LONG_LONG == 8
+  lspec->minimum = 0x7fffffffffffffff;
+  lspec->maximum = 0x8000000000000000;
+#else
+  lspec->minimum = 0x7fffffff;
+  lspec->maximum = 0x80000000;
+#endif
+  lspec->default_value = 0;
+}
+
+static void
+param_quad_set_default (GParamSpec *pspec,
+			GValue     *value)
+{
+  value->data[0].v_quad = G_PARAM_SPEC_QUAD (pspec)->default_value;
+}
+
+static gboolean
+param_quad_validate (GParamSpec *pspec,
+		     GValue     *value)
+{
+  GParamSpecQuad *lspec = G_PARAM_SPEC_QUAD (pspec);
+  gquad oval = value->data[0].v_quad;
+  
+  value->data[0].v_quad = CLAMP (value->data[0].v_quad, lspec->minimum, lspec->maximum);
+  
+  return value->data[0].v_quad != oval;
+}
+
+static gint
+param_quad_values_cmp (GParamSpec   *pspec,
+		       const GValue *value1,
+		       const GValue *value2)
+{
+  if (value1->data[0].v_quad < value2->data[0].v_quad)
+    return -1;
+  else
+    return value1->data[0].v_quad > value2->data[0].v_quad;
+}
+
+static void
+param_uquad_init (GParamSpec *pspec)
+{
+  GParamSpecUQuad *uspec = G_PARAM_SPEC_UQUAD (pspec);
+  
+  uspec->minimum = 0;
+  uspec->maximum = ~0;
+  uspec->default_value = 0;
+}
+
+static void
+param_uquad_set_default (GParamSpec *pspec,
+			 GValue     *value)
+{
+  value->data[0].v_uquad = G_PARAM_SPEC_UQUAD (pspec)->default_value;
+}
+
+static gboolean
+param_uquad_validate (GParamSpec *pspec,
+		      GValue     *value)
+{
+  GParamSpecUQuad *uspec = G_PARAM_SPEC_UQUAD (pspec);
+  guquad oval = value->data[0].v_uquad;
+  
+  value->data[0].v_uquad = CLAMP (value->data[0].v_uquad, uspec->minimum, uspec->maximum);
+  
+  return value->data[0].v_uquad != oval;
+}
+
+static gint
+param_uquad_values_cmp (GParamSpec   *pspec,
+			const GValue *value1,
+			const GValue *value2)
+{
+  if (value1->data[0].v_uquad < value2->data[0].v_uquad)
+    return -1;
+  else
+    return value1->data[0].v_uquad > value2->data[0].v_uquad;
+}
+
+static void
 param_unichar_init (GParamSpec *pspec)
 {
   GParamSpecUnichar *uspec = G_PARAM_SPEC_UNICHAR (pspec);
@@ -1040,6 +1125,40 @@ g_param_spec_types_init (void)	/* sync w
     };
     type = g_param_type_register_static ("GParamULong", &pspec_info);
     g_assert (type == G_TYPE_PARAM_ULONG);
+  }
+
+  /* G_TYPE_PARAM_QUAD
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecQuad),  /* instance_size */
+      16,                       /* n_preallocs */
+      param_quad_init,          /* instance_init */
+      G_TYPE_QUAD,		/* value_type */
+      NULL,			/* finalize */
+      param_quad_set_default,	/* value_set_default */
+      param_quad_validate,	/* value_validate */
+      param_quad_values_cmp,	/* values_cmp */
+    };
+    type = g_param_type_register_static ("GParamQuad", &pspec_info);
+    g_assert (type == G_TYPE_PARAM_QUAD);
+  }
+  
+  /* G_TYPE_PARAM_UQUAD
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecUQuad), /* instance_size */
+      16,                       /* n_preallocs */
+      param_uquad_init,         /* instance_init */
+      G_TYPE_UQUAD,		/* value_type */
+      NULL,			/* finalize */
+      param_uquad_set_default,	/* value_set_default */
+      param_uquad_validate,	/* value_validate */
+      param_uquad_values_cmp,	/* values_cmp */
+    };
+    type = g_param_type_register_static ("GParamUQuad", &pspec_info);
+    g_assert (type == G_TYPE_PARAM_UQUAD);
   }
 
   /* G_TYPE_PARAM_UNICHAR
Index: gobject/gparamspecs.h
===================================================================
RCS file: /cvs/gnome/glib/gobject/gparamspecs.h,v
retrieving revision 1.12
diff -u -p -u -p -r1.12 gparamspecs.h
--- gobject/gparamspecs.h	2001/06/21 00:41:55	1.12
+++ gobject/gparamspecs.h	2001/09/15 18:56:26
@@ -43,9 +43,13 @@ G_BEGIN_DECLS
 #define G_IS_PARAM_SPEC_LONG(pspec)        (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_LONG))
 #define G_PARAM_SPEC_LONG(pspec)           (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_LONG, GParamSpecLong))
 #define G_IS_PARAM_SPEC_ULONG(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_ULONG))
-#define G_PARAM_SPEC_UNICHAR(pspec)        (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_UNICHAR, GParamSpecUnichar))
-#define G_IS_PARAM_SPEC_UNICHAR(pspec)     (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UNICHAR))
 #define G_PARAM_SPEC_ULONG(pspec)          (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_ULONG, GParamSpecULong))
+#define G_IS_PARAM_SPEC_QUAD(pspec)        (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_QUAD))
+#define G_PARAM_SPEC_QUAD(pspec)           (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_QUAD, GParamSpecQuad))
+#define G_IS_PARAM_SPEC_UQUAD(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UQUAD))
+#define G_PARAM_SPEC_UQUAD(pspec)          (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_UQUAD, GParamSpecUQuad))
+#define G_IS_PARAM_SPEC_UNICHAR(pspec)     (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UNICHAR))
+#define G_PARAM_SPEC_UNICHAR(pspec)        (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_UNICHAR, GParamSpecUnichar))
 #define G_IS_PARAM_SPEC_ENUM(pspec)        (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_ENUM))
 #define G_PARAM_SPEC_ENUM(pspec)           (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_ENUM, GParamSpecEnum))
 #define G_IS_PARAM_SPEC_FLAGS(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_FLAGS))
@@ -78,6 +82,8 @@ typedef struct _GParamSpecInt        GPa
 typedef struct _GParamSpecUInt       GParamSpecUInt;
 typedef struct _GParamSpecLong       GParamSpecLong;
 typedef struct _GParamSpecULong      GParamSpecULong;
+typedef struct _GParamSpecQuad       GParamSpecQuad;
+typedef struct _GParamSpecUQuad      GParamSpecUQuad;
 typedef struct _GParamSpecUnichar    GParamSpecUnichar;
 typedef struct _GParamSpecEnum       GParamSpecEnum;
 typedef struct _GParamSpecFlags      GParamSpecFlags;
@@ -144,6 +150,22 @@ struct _GParamSpecULong
   gulong        maximum;
   gulong        default_value;
 };
+struct _GParamSpecQuad
+{
+  GParamSpec    parent_instance;
+  
+  gquad         minimum;
+  gquad         maximum;
+  gquad         default_value;
+};
+struct _GParamSpecUQuad
+{
+  GParamSpec    parent_instance;
+  
+  guquad        minimum;
+  guquad        maximum;
+  guquad        default_value;
+};
 struct _GParamSpecUnichar
 {
   GParamSpec    parent_instance;
@@ -268,6 +290,20 @@ GParamSpec*	g_param_spec_ulong	 (const g
 					  gulong	  minimum,
 					  gulong	  maximum,
 					  gulong	  default_value,
+					  GParamFlags	  flags);
+GParamSpec*	g_param_spec_quad	 (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  gquad		  minimum,
+					  gquad		  maximum,
+					  gquad		  default_value,
+					  GParamFlags	  flags);
+GParamSpec*	g_param_spec_uquad	 (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  guquad	  minimum,
+					  guquad	  maximum,
+					  guquad	  default_value,
 					  GParamFlags	  flags);
 GParamSpec*    g_param_spec_unichar      (const gchar    *name,
 				          const gchar    *nick,
Index: gobject/gtype.c
===================================================================
RCS file: /cvs/gnome/glib/gobject/gtype.c,v
retrieving revision 1.33
diff -u -p -u -p -r1.33 gtype.c
--- gobject/gtype.c	2001/09/10 18:03:31	1.33
+++ gobject/gtype.c	2001/09/15 18:56:27
@@ -629,6 +629,7 @@ check_collect_format_I (const gchar *col
 {
   const gchar *p = collect_format;
   gchar valid_format[] = { G_VALUE_COLLECT_INT, G_VALUE_COLLECT_LONG,
+			   G_VALUE_COLLECT_QUAD,
 			   G_VALUE_COLLECT_DOUBLE, G_VALUE_COLLECT_POINTER,
 			   0 };
 
Index: gobject/gtype.h
===================================================================
RCS file: /cvs/gnome/glib/gobject/gtype.h,v
retrieving revision 1.31
diff -u -p -u -p -r1.31 gtype.h
--- gobject/gtype.h	2001/09/10 18:03:31	1.31
+++ gobject/gtype.h	2001/09/15 18:56:27
@@ -50,6 +50,8 @@ typedef enum    /*< skip >*/
   G_TYPE_UINT,
   G_TYPE_LONG,
   G_TYPE_ULONG,
+  G_TYPE_QUAD,
+  G_TYPE_UQUAD,
   G_TYPE_ENUM,
   G_TYPE_FLAGS,
   G_TYPE_FLOAT,
@@ -79,18 +81,20 @@ typedef enum    /*< skip >*/
   G_TYPE_PARAM_UINT		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 5),
   G_TYPE_PARAM_LONG		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 6),
   G_TYPE_PARAM_ULONG		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 7),
-  G_TYPE_PARAM_UNICHAR		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 8),
-  G_TYPE_PARAM_ENUM		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 9),
-  G_TYPE_PARAM_FLAGS		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 10),
-  G_TYPE_PARAM_FLOAT		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 11),
-  G_TYPE_PARAM_DOUBLE		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 12),
-  G_TYPE_PARAM_STRING		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 13),
-  G_TYPE_PARAM_PARAM		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 14),
-  G_TYPE_PARAM_BOXED		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 15),
-  G_TYPE_PARAM_POINTER		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 16),
-  G_TYPE_PARAM_VALUE_ARRAY	= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 17),
-  G_TYPE_PARAM_CLOSURE		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 18),
-  G_TYPE_PARAM_OBJECT		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 19)
+  G_TYPE_PARAM_QUAD		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 8),
+  G_TYPE_PARAM_UQUAD		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 9),
+  G_TYPE_PARAM_UNICHAR		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 10),
+  G_TYPE_PARAM_ENUM		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 11),
+  G_TYPE_PARAM_FLAGS		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 12),
+  G_TYPE_PARAM_FLOAT		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 13),
+  G_TYPE_PARAM_DOUBLE		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 14),
+  G_TYPE_PARAM_STRING		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 15),
+  G_TYPE_PARAM_PARAM		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 16),
+  G_TYPE_PARAM_BOXED		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 17),
+  G_TYPE_PARAM_POINTER		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 18),
+  G_TYPE_PARAM_VALUE_ARRAY	= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 19),
+  G_TYPE_PARAM_CLOSURE		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 20),
+  G_TYPE_PARAM_OBJECT		= G_TYPE_DERIVE_ID (G_TYPE_PARAM, 21)
 } GTypeFundamentals;
 
 
Index: gobject/gvalue.h
===================================================================
RCS file: /cvs/gnome/glib/gobject/gvalue.h,v
retrieving revision 1.10
diff -u -p -u -p -r1.10 gvalue.h
--- gobject/gvalue.h	2001/03/09 21:39:51	1.10
+++ gobject/gvalue.h	2001/09/15 18:56:27
@@ -50,6 +50,8 @@ struct _GValue
     guint	v_uint;
     glong	v_long;
     gulong	v_ulong;
+    gquad	v_quad;
+    guquad	v_uquad;
     gfloat	v_float;
     gdouble	v_double;
     gpointer	v_pointer;
Index: gobject/gvaluecollector.h
===================================================================
RCS file: /cvs/gnome/glib/gobject/gvaluecollector.h,v
retrieving revision 1.7
diff -u -p -u -p -r1.7 gvaluecollector.h
--- gobject/gvaluecollector.h	2001/03/18 04:44:38	1.7
+++ gobject/gvaluecollector.h	2001/09/15 18:56:27
@@ -32,6 +32,7 @@ enum	/*< skip >*/
 {
   G_VALUE_COLLECT_INT		= 'i',
   G_VALUE_COLLECT_LONG		= 'l',
+  G_VALUE_COLLECT_QUAD		= 'q',
   G_VALUE_COLLECT_DOUBLE	= 'd',
   G_VALUE_COLLECT_POINTER	= 'p'
 };
@@ -43,6 +44,7 @@ union _GTypeCValue
 {
   gint     v_int;
   glong    v_long;
+  gquad    v_quad;
   gdouble  v_double;
   gpointer v_pointer;
 };
@@ -84,6 +86,9 @@ G_STMT_START {										\
 	case G_VALUE_COLLECT_LONG:							\
 	  _cvalue->v_long = va_arg ((var_args), glong);					\
 	  break;									\
+	case G_VALUE_COLLECT_QUAD:							\
+	  _cvalue->v_quad = va_arg ((var_args), gquad);					\
+	  break;									\
 	case G_VALUE_COLLECT_DOUBLE:							\
 	  _cvalue->v_double = va_arg ((var_args), gdouble);				\
 	  break;									\
@@ -125,6 +130,9 @@ G_STMT_START {										\
 	  break;									\
 	case G_VALUE_COLLECT_LONG:							\
 	  _cvalue->v_long = va_arg ((var_args), glong);					\
+	  break;									\
+	case G_VALUE_COLLECT_QUAD:							\
+	  _cvalue->v_quad = va_arg ((var_args), gquad);					\
 	  break;									\
 	case G_VALUE_COLLECT_DOUBLE:							\
 	  _cvalue->v_double = va_arg ((var_args), gdouble);				\
Index: gobject/gvaluetypes.c
===================================================================
RCS file: /cvs/gnome/glib/gobject/gvaluetypes.c,v
retrieving revision 1.11
diff -u -p -u -p -r1.11 gvaluetypes.c
--- gobject/gvaluetypes.c	2001/03/18 04:44:38	1.11
+++ gobject/gvaluetypes.c	2001/09/15 18:56:27
@@ -129,6 +129,46 @@ value_lcopy_long (const GValue *value,
 }
 
 static void
+value_init_quad (GValue *value)
+{
+  value->data[0].v_quad = 0;
+}
+
+static void
+value_copy_quad (const GValue *src_value,
+		 GValue       *dest_value)
+{
+  dest_value->data[0].v_quad = src_value->data[0].v_quad;
+}
+
+static gchar*
+value_collect_quad (GValue      *value,
+		    guint        n_collect_values,
+		    GTypeCValue *collect_values,
+		    guint        collect_flags)
+{
+  value->data[0].v_quad = collect_values[0].v_quad;
+  
+  return NULL;
+}
+
+static gchar*
+value_lcopy_quad (const GValue *value,
+		  guint         n_collect_values,
+		  GTypeCValue  *collect_values,
+		  guint         collect_flags)
+{
+  gquad *quad_p = collect_values[0].v_pointer;
+  
+  if (!quad_p)
+    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+  
+  *quad_p = value->data[0].v_quad;
+  
+  return NULL;
+}
+
+static void
 value_init_float (GValue *value)
 {
   value->data[0].v_float = 0.0;
@@ -412,6 +452,26 @@ g_value_types_init (void)  /* sync with 
     g_assert (type == G_TYPE_ULONG);
   }
   
+  /* G_TYPE_QUAD / G_TYPE_UQUAD
+   */
+  {
+    static const GTypeValueTable value_table = {
+      value_init_quad,		/* value_init */
+      NULL,			/* value_free */
+      value_copy_quad,		/* value_copy */
+      NULL,                     /* value_peek_pointer */
+      "q",			/* collect_format */
+      value_collect_quad,	/* collect_value */
+      "p",			/* lcopy_format */
+      value_lcopy_quad,		/* lcopy_value */
+    };
+    info.value_table = &value_table;
+    type = g_type_register_fundamental (G_TYPE_QUAD, "gquad", &info, &finfo, 0);
+    g_assert (type == G_TYPE_QUAD);
+    type = g_type_register_fundamental (G_TYPE_UQUAD, "guquad", &info, &finfo, 0);
+    g_assert (type == G_TYPE_UQUAD);
+  }
+  
   /* G_TYPE_FLOAT
    */
   {
@@ -604,6 +664,40 @@ g_value_get_ulong (const GValue *value)
   g_return_val_if_fail (G_VALUE_HOLDS_ULONG (value), 0);
   
   return value->data[0].v_ulong;
+}
+
+void
+g_value_set_quad (GValue *value,
+		  gquad	  v_quad)
+{
+  g_return_if_fail (G_VALUE_HOLDS_QUAD (value));
+  
+  value->data[0].v_quad = v_quad;
+}
+
+gquad
+g_value_get_quad (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_QUAD (value), 0);
+  
+  return value->data[0].v_quad;
+}
+
+void
+g_value_set_uquad (GValue *value,
+		   guquad  v_uquad)
+{
+  g_return_if_fail (G_VALUE_HOLDS_UQUAD (value));
+  
+  value->data[0].v_uquad = v_uquad;
+}
+
+guquad
+g_value_get_uquad (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_UQUAD (value), 0);
+  
+  return value->data[0].v_uquad;
 }
 
 void
Index: gobject/gvaluetypes.h
===================================================================
RCS file: /cvs/gnome/glib/gobject/gvaluetypes.h,v
retrieving revision 1.10
diff -u -p -u -p -r1.10 gvaluetypes.h
--- gobject/gvaluetypes.h	2001/03/18 04:44:38	1.10
+++ gobject/gvaluetypes.h	2001/09/15 18:56:27
@@ -34,6 +34,8 @@ G_BEGIN_DECLS
 #define G_VALUE_HOLDS_UINT(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_UINT))
 #define G_VALUE_HOLDS_LONG(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_LONG))
 #define G_VALUE_HOLDS_ULONG(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_ULONG))
+#define G_VALUE_HOLDS_QUAD(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_QUAD))
+#define G_VALUE_HOLDS_UQUAD(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_UQUAD))
 #define G_VALUE_HOLDS_FLOAT(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_FLOAT))
 #define G_VALUE_HOLDS_DOUBLE(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_DOUBLE))
 #define G_VALUE_HOLDS_STRING(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_STRING))
@@ -62,6 +64,12 @@ glong		      g_value_get_long		(const GV
 void		      g_value_set_ulong		(GValue	      *value,
 						 gulong	       v_ulong);
 gulong		      g_value_get_ulong		(const GValue *value);
+void		      g_value_set_quad		(GValue	      *value,
+						 gquad	       v_quad);
+gquad		      g_value_get_quad		(const GValue *value);
+void		      g_value_set_uquad		(GValue	      *value,
+						 guquad	       v_uquad);
+guquad		      g_value_get_uquad		(const GValue *value);
 void		      g_value_set_float		(GValue	      *value,
 						 gfloat	       v_float);
 gfloat		      g_value_get_float		(const GValue *value);


More information about the gstreamer-devel mailing list