📄 gvaluetypes.c
字号:
g_assert (type == G_TYPE_ULONG); } /* G_TYPE_INT64 / G_TYPE_UINT64 */ { static const GTypeValueTable value_table = { value_init_int64, /* value_init */ NULL, /* value_free */ value_copy_int64, /* value_copy */ NULL, /* value_peek_pointer */ "q", /* collect_format */ value_collect_int64, /* collect_value */ "p", /* lcopy_format */ value_lcopy_int64, /* lcopy_value */ }; info.value_table = &value_table; type = g_type_register_fundamental (G_TYPE_INT64, "gint64", &info, &finfo, 0); g_assert (type == G_TYPE_INT64); type = g_type_register_fundamental (G_TYPE_UINT64, "guint64", &info, &finfo, 0); g_assert (type == G_TYPE_UINT64); } /* G_TYPE_FLOAT */ { static const GTypeValueTable value_table = { value_init_float, /* value_init */ NULL, /* value_free */ value_copy_float, /* value_copy */ NULL, /* value_peek_pointer */ "d", /* collect_format */ value_collect_float, /* collect_value */ "p", /* lcopy_format */ value_lcopy_float, /* lcopy_value */ }; info.value_table = &value_table; type = g_type_register_fundamental (G_TYPE_FLOAT, "gfloat", &info, &finfo, 0); g_assert (type == G_TYPE_FLOAT); } /* G_TYPE_DOUBLE */ { static const GTypeValueTable value_table = { value_init_double, /* value_init */ NULL, /* value_free */ value_copy_double, /* value_copy */ NULL, /* value_peek_pointer */ "d", /* collect_format */ value_collect_double, /* collect_value */ "p", /* lcopy_format */ value_lcopy_double, /* lcopy_value */ }; info.value_table = &value_table; type = g_type_register_fundamental (G_TYPE_DOUBLE, "gdouble", &info, &finfo, 0); g_assert (type == G_TYPE_DOUBLE); } /* G_TYPE_STRING */ { static const GTypeValueTable value_table = { value_init_string, /* value_init */ value_free_string, /* value_free */ value_copy_string, /* value_copy */ value_peek_pointer0, /* value_peek_pointer */ "p", /* collect_format */ value_collect_string, /* collect_value */ "p", /* lcopy_format */ value_lcopy_string, /* lcopy_value */ }; info.value_table = &value_table; type = g_type_register_fundamental (G_TYPE_STRING, "gchararray", &info, &finfo, 0); g_assert (type == G_TYPE_STRING); } /* G_TYPE_POINTER */ { static const GTypeValueTable value_table = { value_init_pointer, /* value_init */ NULL, /* value_free */ value_copy_pointer, /* value_copy */ value_peek_pointer0, /* value_peek_pointer */ "p", /* collect_format */ value_collect_pointer, /* collect_value */ "p", /* lcopy_format */ value_lcopy_pointer, /* lcopy_value */ }; info.value_table = &value_table; type = g_type_register_fundamental (G_TYPE_POINTER, "gpointer", &info, &finfo, 0); g_assert (type == G_TYPE_POINTER); }}/* --- GValue functions --- */voidg_value_set_char (GValue *value, gchar v_char){ g_return_if_fail (G_VALUE_HOLDS_CHAR (value)); value->data[0].v_int = v_char;}gcharg_value_get_char (const GValue *value){ g_return_val_if_fail (G_VALUE_HOLDS_CHAR (value), 0); return value->data[0].v_int;}voidg_value_set_uchar (GValue *value, guchar v_uchar){ g_return_if_fail (G_VALUE_HOLDS_UCHAR (value)); value->data[0].v_uint = v_uchar;}gucharg_value_get_uchar (const GValue *value){ g_return_val_if_fail (G_VALUE_HOLDS_UCHAR (value), 0); return value->data[0].v_uint;}voidg_value_set_boolean (GValue *value, gboolean v_boolean){ g_return_if_fail (G_VALUE_HOLDS_BOOLEAN (value)); value->data[0].v_int = v_boolean != FALSE;}gbooleang_value_get_boolean (const GValue *value){ g_return_val_if_fail (G_VALUE_HOLDS_BOOLEAN (value), 0); return value->data[0].v_int;}voidg_value_set_int (GValue *value, gint v_int){ g_return_if_fail (G_VALUE_HOLDS_INT (value)); value->data[0].v_int = v_int;}gintg_value_get_int (const GValue *value){ g_return_val_if_fail (G_VALUE_HOLDS_INT (value), 0); return value->data[0].v_int;}voidg_value_set_uint (GValue *value, guint v_uint){ g_return_if_fail (G_VALUE_HOLDS_UINT (value)); value->data[0].v_uint = v_uint;}guintg_value_get_uint (const GValue *value){ g_return_val_if_fail (G_VALUE_HOLDS_UINT (value), 0); return value->data[0].v_uint;}voidg_value_set_long (GValue *value, glong v_long){ g_return_if_fail (G_VALUE_HOLDS_LONG (value)); value->data[0].v_long = v_long;}glongg_value_get_long (const GValue *value){ g_return_val_if_fail (G_VALUE_HOLDS_LONG (value), 0); return value->data[0].v_long;}voidg_value_set_ulong (GValue *value, gulong v_ulong){ g_return_if_fail (G_VALUE_HOLDS_ULONG (value)); value->data[0].v_ulong = v_ulong;}gulongg_value_get_ulong (const GValue *value){ g_return_val_if_fail (G_VALUE_HOLDS_ULONG (value), 0); return value->data[0].v_ulong;}voidg_value_set_int64 (GValue *value, gint64 v_int64){ g_return_if_fail (G_VALUE_HOLDS_INT64 (value)); value->data[0].v_int64 = v_int64;}gint64g_value_get_int64 (const GValue *value){ g_return_val_if_fail (G_VALUE_HOLDS_INT64 (value), 0); return value->data[0].v_int64;}voidg_value_set_uint64 (GValue *value, guint64 v_uint64){ g_return_if_fail (G_VALUE_HOLDS_UINT64 (value)); value->data[0].v_uint64 = v_uint64;}guint64g_value_get_uint64 (const GValue *value){ g_return_val_if_fail (G_VALUE_HOLDS_UINT64 (value), 0); return value->data[0].v_uint64;}voidg_value_set_float (GValue *value, gfloat v_float){ g_return_if_fail (G_VALUE_HOLDS_FLOAT (value)); value->data[0].v_float = v_float;}gfloatg_value_get_float (const GValue *value){ g_return_val_if_fail (G_VALUE_HOLDS_FLOAT (value), 0); return value->data[0].v_float;}voidg_value_set_double (GValue *value, gdouble v_double){ g_return_if_fail (G_VALUE_HOLDS_DOUBLE (value)); value->data[0].v_double = v_double;}gdoubleg_value_get_double (const GValue *value){ g_return_val_if_fail (G_VALUE_HOLDS_DOUBLE (value), 0); return value->data[0].v_double;}voidg_value_set_string (GValue *value, const gchar *v_string){ g_return_if_fail (G_VALUE_HOLDS_STRING (value)); if (value->data[1].v_uint & G_VALUE_NOCOPY_CONTENTS) value->data[1].v_uint = 0; else g_free (value->data[0].v_pointer); value->data[0].v_pointer = g_strdup (v_string);}voidg_value_set_static_string (GValue *value, const gchar *v_string){ g_return_if_fail (G_VALUE_HOLDS_STRING (value)); if (!(value->data[1].v_uint & G_VALUE_NOCOPY_CONTENTS)) g_free (value->data[0].v_pointer); value->data[1].v_uint = G_VALUE_NOCOPY_CONTENTS; value->data[0].v_pointer = (gchar*) v_string;}voidg_value_set_string_take_ownership (GValue *value, gchar *v_string){ g_return_if_fail (G_VALUE_HOLDS_STRING (value)); if (value->data[1].v_uint & G_VALUE_NOCOPY_CONTENTS) value->data[1].v_uint = 0; else g_free (value->data[0].v_pointer); value->data[0].v_pointer = v_string;}G_CONST_RETURN gchar*g_value_get_string (const GValue *value){ g_return_val_if_fail (G_VALUE_HOLDS_STRING (value), NULL); return value->data[0].v_pointer;}gchar*g_value_dup_string (const GValue *value){ g_return_val_if_fail (G_VALUE_HOLDS_STRING (value), NULL); return g_strdup (value->data[0].v_pointer);}voidg_value_set_pointer (GValue *value, gpointer v_pointer){ g_return_if_fail (G_VALUE_HOLDS_POINTER (value)); value->data[0].v_pointer = v_pointer;}gpointerg_value_get_pointer (const GValue *value){ g_return_val_if_fail (G_VALUE_HOLDS_POINTER (value), NULL); return value->data[0].v_pointer;}/* need extra includes for g_strdup_value_contents() ;( */#include "gobject.h"#include "gparam.h"#include "gboxed.h"#include "genums.h"gchar*g_strdup_value_contents (const GValue *value){ const gchar *src; gchar *contents; g_return_val_if_fail (G_IS_VALUE (value), NULL); if (G_VALUE_HOLDS_STRING (value)) { src = g_value_get_string (value); if (!src) contents = g_strdup ("NULL"); else { gchar *s = g_strescape (src, NULL); contents = g_strdup_printf ("\"%s\"", s); g_free (s); } } else if (g_value_type_transformable (G_VALUE_TYPE (value), G_TYPE_STRING)) { GValue tmp_value = { 0, }; gchar *s; g_value_init (&tmp_value, G_TYPE_STRING); g_value_transform (value, &tmp_value); s = g_strescape (g_value_get_string (&tmp_value), NULL); g_value_unset (&tmp_value); if (G_VALUE_HOLDS_ENUM (value) || G_VALUE_HOLDS_FLAGS (value)) contents = g_strdup_printf ("((%s) %s)", g_type_name (G_VALUE_TYPE (value)), s); else contents = g_strdup (s ? s : "NULL"); g_free (s); } else if (g_value_fits_pointer (value)) { gpointer p = g_value_peek_pointer (value); if (!p) contents = g_strdup ("NULL"); else if (G_VALUE_HOLDS_OBJECT (value)) contents = g_strdup_printf ("((%s*) %p)", G_OBJECT_TYPE_NAME (p), p); else if (G_VALUE_HOLDS_PARAM (value)) contents = g_strdup_printf ("((%s*) %p)", G_PARAM_SPEC_TYPE_NAME (p), p); else if (G_VALUE_HOLDS_BOXED (value)) contents = g_strdup_printf ("((%s*) %p)", g_type_name (G_VALUE_TYPE (value)), p); else if (G_VALUE_HOLDS_POINTER (value)) contents = g_strdup_printf ("((gpointer) %p)", p); else contents = g_strdup ("???"); } else contents = g_strdup ("???"); return contents;}GTypeg_pointer_type_register_static (const gchar *name){ static const GTypeInfo type_info = { 0, /* class_size */ NULL, /* base_init */ NULL, /* base_finalize */ NULL, /* class_init */ NULL, /* class_finalize */ NULL, /* class_data */ 0, /* instance_size */ 0, /* n_preallocs */ NULL, /* instance_init */ NULL /* value_table */ }; GType type; g_return_val_if_fail (name != NULL, 0); g_return_val_if_fail (g_type_from_name (name) == 0, 0); type = g_type_register_static (G_TYPE_POINTER, name, &type_info, 0); return type;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -