[glib/gvariant: 115/116] remove GVariantTypeClass from GVariantBuilder
- From: Ryan Lortie <ryanl src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [glib/gvariant: 115/116] remove GVariantTypeClass from GVariantBuilder
- Date: Thu, 21 Jan 2010 17:05:42 +0000 (UTC)
commit 54033513e3f7247ffdac38d3075235005925313f
Author: Ryan Lortie <desrt desrt ca>
Date: Thu Jan 21 11:53:20 2010 -0500
remove GVariantTypeClass from GVariantBuilder
glib/gvariant-markup.c | 84 +++++++++++++++++++++++------------------
glib/gvariant-parser.c | 12 ++---
glib/gvariant-util.c | 35 ++++++++---------
glib/gvariant-valist.c | 8 +--
glib/gvariant.h | 5 +--
glib/tests/gvariant-big.c | 5 +-
glib/tests/gvariant-varargs.c | 14 ++----
7 files changed, 80 insertions(+), 83 deletions(-)
---
diff --git a/glib/gvariant-markup.c b/glib/gvariant-markup.c
index 25b2315..1c2ee79 100644
--- a/glib/gvariant-markup.c
+++ b/glib/gvariant-markup.c
@@ -352,7 +352,7 @@ g_variant_parse_data_new (const GVariantType *type)
GVariantParseData *data;
data = g_slice_new (GVariantParseData);
- data->builder = g_variant_builder_new (G_VARIANT_TYPE_CLASS_VARIANT, type);
+ data->builder = g_variant_builder_new (G_VARIANT_TYPE_VARIANT);
data->terminal_value = FALSE;
data->string = NULL;
@@ -402,42 +402,42 @@ g_variant_parse_data_end (GVariantParseData *data,
return value;
}
-static GVariantTypeClass
-type_class_from_keyword (const char *keyword)
+static const GVariantType *
+type_from_keyword (const char *keyword)
{
struct keyword_mapping
{
- GVariantTypeClass class;
+ const GVariantType *type;
const char *keyword;
} list[] = {
- { G_VARIANT_TYPE_CLASS_BOOLEAN, "boolean" },
- { G_VARIANT_TYPE_CLASS_BYTE, "byte" },
- { G_VARIANT_TYPE_CLASS_INT16, "int16" },
- { G_VARIANT_TYPE_CLASS_UINT16, "uint16" },
- { G_VARIANT_TYPE_CLASS_INT32, "int32" },
- { G_VARIANT_TYPE_CLASS_HANDLE, "handle" },
- { G_VARIANT_TYPE_CLASS_UINT32, "uint32" },
- { G_VARIANT_TYPE_CLASS_INT64, "int64" },
- { G_VARIANT_TYPE_CLASS_UINT64, "uint64" },
- { G_VARIANT_TYPE_CLASS_DOUBLE, "double" },
- { G_VARIANT_TYPE_CLASS_STRING, "escaped-string" },
- { G_VARIANT_TYPE_CLASS_STRING, "string" },
- { G_VARIANT_TYPE_CLASS_OBJECT_PATH, "object-path" },
- { G_VARIANT_TYPE_CLASS_SIGNATURE, "signature" },
- { G_VARIANT_TYPE_CLASS_VARIANT, "variant" },
- { G_VARIANT_TYPE_CLASS_MAYBE, "maybe" },
- { G_VARIANT_TYPE_CLASS_MAYBE, "nothing" },
- { G_VARIANT_TYPE_CLASS_ARRAY, "array" },
- { G_VARIANT_TYPE_CLASS_TUPLE, "tuple" },
- { G_VARIANT_TYPE_CLASS_DICT_ENTRY, "dictionary-entry" }
+ { G_VARIANT_TYPE_BOOLEAN, "boolean" },
+ { G_VARIANT_TYPE_BYTE, "byte" },
+ { G_VARIANT_TYPE_INT16, "int16" },
+ { G_VARIANT_TYPE_UINT16, "uint16" },
+ { G_VARIANT_TYPE_INT32, "int32" },
+ { G_VARIANT_TYPE_HANDLE, "handle" },
+ { G_VARIANT_TYPE_UINT32, "uint32" },
+ { G_VARIANT_TYPE_INT64, "int64" },
+ { G_VARIANT_TYPE_UINT64, "uint64" },
+ { G_VARIANT_TYPE_DOUBLE, "double" },
+ { G_VARIANT_TYPE_STRING, "escaped-string" },
+ { G_VARIANT_TYPE_STRING, "string" },
+ { G_VARIANT_TYPE_OBJECT_PATH, "object-path" },
+ { G_VARIANT_TYPE_SIGNATURE, "signature" },
+ { G_VARIANT_TYPE_VARIANT, "variant" },
+ { G_VARIANT_TYPE_ANY_MAYBE, "maybe" },
+ { G_VARIANT_TYPE_ANY_MAYBE, "nothing" },
+ { G_VARIANT_TYPE_ANY_ARRAY, "array" },
+ { G_VARIANT_TYPE_ANY_TUPLE, "tuple" },
+ { G_VARIANT_TYPE_ANY_DICT_ENTRY, "dictionary-entry" }
};
gint i;
for (i = 0; i < G_N_ELEMENTS (list); i++)
if (!strcmp (keyword, list[i].keyword))
- return list[i].class;
+ return list[i].type;
- return G_VARIANT_TYPE_CLASS_INVALID;
+ return NULL;
}
static GVariant *
@@ -465,9 +465,9 @@ g_variant_markup_parser_start_element (GMarkupParseContext *context,
GError **error)
{
GVariantParseData *data = user_data;
+ const GVariantType *base_type;
const gchar *type_string;
const GVariantType *type;
- GVariantTypeClass class;
GVariant *value;
if (data->string != NULL)
@@ -493,7 +493,6 @@ g_variant_markup_parser_start_element (GMarkupParseContext *context,
if ((value = value_from_keyword (element_name)))
{
if (!g_variant_builder_check_add (data->builder,
- g_variant_get_type_class (value),
g_variant_get_type (value), error))
return;
@@ -503,9 +502,9 @@ g_variant_markup_parser_start_element (GMarkupParseContext *context,
return;
}
- class = type_class_from_keyword (element_name);
+ base_type = type_from_keyword (element_name);
- if (class == G_VARIANT_TYPE_CLASS_INVALID)
+ if (base_type == NULL)
{
g_set_error (error, G_MARKUP_ERROR,
G_MARKUP_ERROR_UNKNOWN_ELEMENT,
@@ -530,15 +529,24 @@ g_variant_markup_parser_start_element (GMarkupParseContext *context,
return;
}
- type = type_string ? G_VARIANT_TYPE (type_string) : NULL;
+ type = type_string ? G_VARIANT_TYPE (type_string) : base_type;
+
+ if (!g_variant_type_is_subtype_of (type, base_type))
+ {
+ g_set_error (error, G_VARIANT_BUILDER_ERROR,
+ G_VARIANT_BUILDER_ERROR_TYPE,
+ "'%s' is not a valid type for '%s'",
+ type_string, element_name);
+ return;
+ }
- if (!g_variant_builder_check_add (data->builder, class, type, error))
+ if (!g_variant_builder_check_add (data->builder, type, error))
return;
- if (g_variant_type_class_is_basic (class))
- data->string = g_string_new (NULL);
+ if (g_variant_type_is_container (base_type))
+ data->builder = g_variant_builder_open (data->builder, type);
else
- data->builder = g_variant_builder_open (data->builder, class, type);
+ data->string = g_string_new (NULL);
/* special case: <nothing/> may contain no children */
if (strcmp (element_name, "nothing") == 0)
@@ -575,6 +583,7 @@ g_variant_markup_parser_end_element (GMarkupParseContext *context,
GError **error)
{
GVariantParseData *data = user_data;
+ const GVariantType *type;
GVariantTypeClass class;
if (data->terminal_value)
@@ -583,7 +592,8 @@ g_variant_markup_parser_end_element (GMarkupParseContext *context,
return;
}
- class = type_class_from_keyword (element_name);
+ type = type_from_keyword (element_name);
+ class = g_variant_type_get_class (type);
if (g_variant_type_class_is_basic (class))
{
@@ -923,7 +933,7 @@ g_variant_markup_parse (const gchar *text,
GVariant *child;
data = g_slice_new (GVariantParseData);
- data->builder = g_variant_builder_new (G_VARIANT_TYPE_CLASS_VARIANT, type);
+ data->builder = g_variant_builder_new (G_VARIANT_TYPE_VARIANT);
data->terminal_value = FALSE;
data->string = NULL;
diff --git a/glib/gvariant-parser.c b/glib/gvariant-parser.c
index 514dedc..eb1248f 100644
--- a/glib/gvariant-parser.c
+++ b/glib/gvariant-parser.c
@@ -612,7 +612,7 @@ array_get_value (AST *ast,
GVariantBuilder *builder;
gint i;
- builder = g_variant_builder_new (G_VARIANT_TYPE_CLASS_ARRAY, type);
+ builder = g_variant_builder_new (type);
childtype = g_variant_type_element (type);
for (i = 0; i < array->n_children; i++)
@@ -769,7 +769,7 @@ tuple_get_value (AST *ast,
GVariantBuilder *builder;
gint i;
- builder = g_variant_builder_new (G_VARIANT_TYPE_CLASS_TUPLE, type);
+ builder = g_variant_builder_new (type);
childtype = g_variant_type_first (type);
for (i = 0; i < tuple->n_children; i++)
@@ -1070,7 +1070,7 @@ dictionary_get_value (AST *ast,
GVariantBuilder *builder;
GVariant *subvalue;
- builder = g_variant_builder_new (G_VARIANT_TYPE_CLASS_DICT_ENTRY, type);
+ builder = g_variant_builder_new (type);
subtype = g_variant_type_key (type);
if (!(subvalue = ast_get_value (dict->keys[0], subtype, error)))
@@ -1100,16 +1100,14 @@ dictionary_get_value (AST *ast,
key = g_variant_type_key (entry);
value = g_variant_type_value (entry);
- builder = g_variant_builder_new (G_VARIANT_TYPE_CLASS_ARRAY, type);
+ builder = g_variant_builder_new (type);
for (i = 0; i < dict->n_children; i++)
{
GVariantBuilder *item;
GVariant *subvalue;
- item = g_variant_builder_open (builder,
- G_VARIANT_TYPE_CLASS_DICT_ENTRY,
- entry);
+ item = g_variant_builder_open (builder, entry);
if (!(subvalue = ast_get_value (dict->keys[i], key, error)))
{
diff --git a/glib/gvariant-util.c b/glib/gvariant-util.c
index b44bdf9..8ca86d4 100644
--- a/glib/gvariant-util.c
+++ b/glib/gvariant-util.c
@@ -967,12 +967,10 @@ g_variant_builder_check_add_value (GVariantBuilder *builder,
GError **error)
{
const GVariantType *type;
- GVariantTypeClass class;
type = g_variant_get_type (value);
- class = g_variant_type_get_class (type);
- return g_variant_builder_check_add (builder, class, type, error);
+ return g_variant_builder_check_add (builder, type, error);
}
/**
@@ -1023,7 +1021,6 @@ g_variant_builder_add_value (GVariantBuilder *builder,
/**
* g_variant_builder_open:
* @parent: a #GVariantBuilder
- * @tclass: a #GVariantTypeClass
* @type: a #GVariantType, or %NULL
* @returns: a new (child) #GVariantBuilder
*
@@ -1045,21 +1042,23 @@ g_variant_builder_add_value (GVariantBuilder *builder,
**/
GVariantBuilder *
g_variant_builder_open (GVariantBuilder *parent,
- GVariantTypeClass tclass,
const GVariantType *type)
{
+ GVariantTypeClass tclass;
GVariantBuilder *child;
GError *error = NULL;
g_return_val_if_fail (parent != NULL, NULL);
- if G_UNLIKELY (!g_variant_builder_check_add (parent, tclass, type, &error))
+ tclass = g_variant_type_get_class (type);
+
+ if G_UNLIKELY (!g_variant_builder_check_add (parent, type, &error))
g_error ("g_variant_builder_open: %s", error->message);
if G_UNLIKELY (parent->has_child)
g_error ("GVariantBuilder already has open child");
- child = g_variant_builder_new (tclass, type);
+ child = g_variant_builder_new (type);
if (parent->expected2)
{
@@ -1140,14 +1139,13 @@ g_variant_builder_close (GVariantBuilder *child)
* the process.
**/
GVariantBuilder *
-g_variant_builder_new (GVariantTypeClass tclass,
- const GVariantType *type)
+g_variant_builder_new (const GVariantType *type)
{
+ GVariantTypeClass tclass;
GVariantBuilder *builder;
- g_assert (g_variant_type_class_is_container (tclass));
- g_assert (tclass == G_VARIANT_TYPE_CLASS_VARIANT ||
- type == NULL || g_variant_type_get_class (type) == tclass);
+ g_assert (g_variant_type_is_container (type));
+ tclass = g_variant_type_get_class (type);
builder = g_slice_new (GVariantBuilder);
builder->parent = NULL;
@@ -1163,7 +1161,7 @@ g_variant_builder_new (GVariantTypeClass tclass,
{
case G_VARIANT_TYPE_CLASS_VARIANT:
builder->children_allocated = 1;
- builder->expected = builder->type;
+ builder->expected = NULL;
break;
case G_VARIANT_TYPE_CLASS_ARRAY:
@@ -1455,10 +1453,13 @@ g_variant_builder_check_end (GVariantBuilder *builder,
**/
gboolean
g_variant_builder_check_add (GVariantBuilder *builder,
- GVariantTypeClass tclass,
const GVariantType *type,
GError **error)
{
+ GVariantTypeClass tclass;
+
+ tclass = g_variant_type_get_class (type);
+
g_return_val_if_fail (builder != NULL, FALSE);
g_return_val_if_fail (builder->has_child == FALSE, FALSE);
g_return_val_if_fail (tclass != G_VARIANT_TYPE_CLASS_INVALID &&
@@ -1848,8 +1849,7 @@ g_variant_deep_copy (GVariant *value)
GVariantIter iter;
GVariant *child;
- builder = g_variant_builder_new (g_variant_get_type_class (value),
- g_variant_get_type (value));
+ builder = g_variant_builder_new (g_variant_get_type (value));
g_variant_iter_init (&iter, value);
while ((child = g_variant_iter_next_value (&iter)))
@@ -1883,8 +1883,7 @@ g_variant_new_strv (const gchar * const *strv,
g_return_val_if_fail (strv != NULL || length == 0, NULL);
- builder = g_variant_builder_new (G_VARIANT_TYPE_CLASS_ARRAY,
- G_VARIANT_TYPE ("as"));
+ builder = g_variant_builder_new (G_VARIANT_TYPE ("as"));
while (length-- && *strv)
g_variant_builder_add (builder, "s", *strv++);
diff --git a/glib/gvariant-valist.c b/glib/gvariant-valist.c
index ec2a0e8..3e3b8d0 100644
--- a/glib/gvariant-valist.c
+++ b/glib/gvariant-valist.c
@@ -346,7 +346,7 @@ g_variant_valist_new (const gchar **format_string,
string = (*format_string) + 1;
type = g_variant_format_string_scan_type (*format_string,
NULL, format_string);
- builder = g_variant_builder_new (G_VARIANT_TYPE_CLASS_MAYBE, type);
+ builder = g_variant_builder_new (type);
g_variant_type_free (type);
switch (*string)
@@ -443,11 +443,9 @@ g_variant_valist_new (const gchar **format_string,
GVariantBuilder *builder;
if (**format_string == '(')
- builder = g_variant_builder_new (G_VARIANT_TYPE_CLASS_TUPLE,
- NULL);
+ builder = g_variant_builder_new (G_VARIANT_TYPE_ANY_TUPLE);
else
- builder = g_variant_builder_new (G_VARIANT_TYPE_CLASS_DICT_ENTRY,
- NULL);
+ builder = g_variant_builder_new (G_VARIANT_TYPE_ANY_DICT_ENTRY);
(*format_string)++; /* '(' */
while (**format_string != ')' && **format_string != '}')
diff --git a/glib/gvariant.h b/glib/gvariant.h
index 531451e..d0fcb00 100644
--- a/glib/gvariant.h
+++ b/glib/gvariant.h
@@ -150,17 +150,14 @@ void g_variant_builder_add (GVarian
const gchar *format_string,
...);
GVariantBuilder * g_variant_builder_open (GVariantBuilder *parent,
- GVariantTypeClass tclass,
const GVariantType *type);
GVariantBuilder * g_variant_builder_close (GVariantBuilder *child);
gboolean g_variant_builder_check_add (GVariantBuilder *builder,
- GVariantTypeClass tclass,
const GVariantType *type,
GError **error);
gboolean g_variant_builder_check_end (GVariantBuilder *builder,
GError **error);
-GVariantBuilder * g_variant_builder_new (GVariantTypeClass tclass,
- const GVariantType *type);
+GVariantBuilder * g_variant_builder_new (const GVariantType *type);
GVariant * g_variant_builder_end (GVariantBuilder *builder);
void g_variant_builder_cancel (GVariantBuilder *builder);
diff --git a/glib/tests/gvariant-big.c b/glib/tests/gvariant-big.c
index d186a7c..54ea802 100644
--- a/glib/tests/gvariant-big.c
+++ b/glib/tests/gvariant-big.c
@@ -118,7 +118,7 @@ generate2 (GRand *rand)
type = (const GVariantType *) (possible + g_rand_int_range (rand, 0, 6));
class = g_variant_type_get_class (type);
- builder = g_variant_builder_new (G_VARIANT_TYPE_CLASS_ARRAY, NULL);
+ builder = g_variant_builder_new (G_VARIANT_TYPE_ANY_ARRAY);
for (i = 0; i < length; i++)
{
switch (class)
@@ -165,8 +165,7 @@ generate (GRand *rand)
GVariantBuilder *builder;
gsize i;
- builder = g_variant_builder_new (G_VARIANT_TYPE_CLASS_ARRAY,
- G_VARIANT_TYPE ("av"));
+ builder = g_variant_builder_new (G_VARIANT_TYPE ("av"));
/* length will fall into 0, 0..255, 256..65535, and >65536 ranges */
for (i = 0; i < length; i++)
diff --git a/glib/tests/gvariant-varargs.c b/glib/tests/gvariant-varargs.c
index 134959e..3904b2b 100644
--- a/glib/tests/gvariant-varargs.c
+++ b/glib/tests/gvariant-varargs.c
@@ -31,16 +31,12 @@ make_value (void)
{ FALSE, 16161, 3232323232u, 6464646464646464ull, 42.0 }
};
- array = g_variant_builder_new (G_VARIANT_TYPE_CLASS_ARRAY, NULL);
-
- ebuilder1 = g_variant_builder_new (G_VARIANT_TYPE_CLASS_ARRAY,
- G_VARIANT_TYPE ("an"));
- ebuilder2 = g_variant_builder_new (G_VARIANT_TYPE_CLASS_ARRAY,
- G_VARIANT_TYPE ("an"));
- ebuilder3 = g_variant_builder_new (G_VARIANT_TYPE_CLASS_ARRAY,
- G_VARIANT_TYPE ("an"));
- builder = g_variant_builder_new (G_VARIANT_TYPE_CLASS_ARRAY,
- G_VARIANT_TYPE ("an"));
+ array = g_variant_builder_new (G_VARIANT_TYPE_ANY_ARRAY);
+
+ ebuilder1 = g_variant_builder_new (G_VARIANT_TYPE ("an"));
+ ebuilder2 = g_variant_builder_new (G_VARIANT_TYPE ("an"));
+ ebuilder3 = g_variant_builder_new (G_VARIANT_TYPE ("an"));
+ builder = g_variant_builder_new (G_VARIANT_TYPE ("an"));
g_variant_builder_add (builder, "n", 234);
g_variant_builder_add (array, "(bym(nquisv)xtd? s@?* *r@r&(bqutd)"
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]