#include <glib.h>
#include <glib-object.h>
#include <string.h>
+#include <inttypes.h>
#include "values.h"
static void dict_delete_key(gpointer data);
{
str ="dict";
}
- g_debug("%s", str);
+ g_debug("Type %s", str);
+}
+
+void
+debug_show_value(GValue *gval)
+{
+ GType tp;
+
+ tp = G_VALUE_TYPE(gval);
+ if (tp == G_TYPE_STRING)
+ {
+ g_message("Type %s value %s", "string", g_value_get_string(gval));
+ }
+ else if (tp == G_TYPE_INT)
+ {
+ g_message("Type %s value %d", "int", g_value_get_int(gval));
+ }
+ else if (tp == G_TYPE_INT64)
+ {
+ g_message("Type %s value %" PRId64, "int64", g_value_get_int64(gval));
+ }
+ else if (tp == G_TYPE_DOUBLE)
+ {
+ g_message("Type %s value %f", "double", g_value_get_double(gval));
+ }
+ else if (tp == G_TYPE_BOOLEAN)
+ {
+ g_message("Type %s value %d", "boolean", g_value_get_boolean(gval));
+ }
+ else if (tp == ghb_array_get_type())
+ {
+ g_message("Type %s", "boolean");
+ }
+ else if (tp == ghb_dict_get_type())
+ {
+ g_message("Type %s", "dict");
+ }
}
gint
if (val == NULL) return 0;
GValue xform = {0,};
- if (G_VALUE_TYPE(val) != G_TYPE_INT64)
+ if (G_VALUE_TYPE(val) != G_TYPE_INT)
{
- g_value_init(&xform, G_TYPE_INT64);
+ g_value_init(&xform, G_TYPE_INT);
if (!g_value_transform(val, &xform))
{
debug_show_type(G_VALUE_TYPE(val));
g_warning("int can't transform");
return 0;
}
- result = (gint)g_value_get_int64(&xform);
+ result = g_value_get_int(&xform);
g_value_unset(&xform);
}
else
{
- result = (gint)g_value_get_int64(val);
+ result = g_value_get_int(val);
}
return result;
}
GType typa;
GType typb;
+ if ((vala == NULL && valb != NULL) || (vala != NULL && valb == NULL))
+ {
+ return 1;
+ }
typa = G_VALUE_TYPE(vala);
typb = G_VALUE_TYPE(valb);
if (typa != typb)
}
GValue*
-ghb_dict_lookup(GValue *gval, const gchar *key)
+ghb_dict_lookup(const GValue *gval, const gchar *key)
{
GHashTable *dict = g_value_get_boxed(gval);
return g_hash_table_lookup(dict, key);
static void
xform_string_int(const GValue *sval, GValue *ival)
{
+ gchar *end;
+
const gchar *str = g_value_get_string(sval);
- gint val = g_strtod(str, NULL);
+ gint val = g_strtod(str, &end);
+ if (*end)
+ val = (guint)(~0)>>1;
g_value_set_int(ival, val);
}
static void
xform_string_int64(const GValue *sval, GValue *ival)
{
+ gchar *end;
const gchar *str = g_value_get_string(sval);
- gint64 val = g_strtod(str, NULL);
+ gint64 val = g_strtod(str, &end);
+ if (*end)
+ val = (guint64)(~0L)>>1;
g_value_set_int64(ival, val);
}
}
static void
+xform_double_string(const GValue *dval, GValue *sval)
+{
+ gchar *str;
+ double val = g_value_get_double(dval);
+ str = g_strdup_printf("%g", val);
+ g_value_take_string(sval, str);
+}
+
+static void
xform_boolean_double(const GValue *bval, GValue *dval)
{
gboolean b = g_value_get_boolean(bval);
xform_string_double);
g_value_register_transform_func(G_TYPE_BOOLEAN, G_TYPE_DOUBLE,
xform_boolean_double);
+ g_value_register_transform_func(G_TYPE_DOUBLE, G_TYPE_STRING,
+ xform_double_string);
}