62 lines
2.6 KiB
C
62 lines
2.6 KiB
C
#ifndef _GLIB_2_0_GOBJECT_GVALUECOLLECTOR_H_
|
|
#define _GLIB_2_0_GOBJECT_GVALUECOLLECTOR_H_
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
#define G_VALUE_LCOPY(value,var_args,flags,__error) \
|
|
G_STMT_START { const GValue *_value = (value); guint _flags = \
|
|
(flags); GType _value_type = G_VALUE_TYPE (_value); GTypeValueTable \
|
|
*_vtable = g_type_value_table_peek (_value_type); gchar *_lcopy_format \
|
|
= _vtable->lcopy_format; GTypeCValue \
|
|
_cvalues[G_VALUE_COLLECT_FORMAT_MAX_LENGTH] = { { 0, }, }; guint \
|
|
_n_values = 0; while (*_lcopy_format) { GTypeCValue *_cvalue = \
|
|
_cvalues + _n_values++; switch (*_lcopy_format++) { case \
|
|
G_VALUE_COLLECT_INT: _cvalue->v_int = va_arg ((var_args), gint); \
|
|
break; case G_VALUE_COLLECT_LONG: _cvalue->v_long = va_arg \
|
|
((var_args), glong); break; case G_VALUE_COLLECT_INT64: \
|
|
_cvalue->v_int64 = va_arg ((var_args), gint64); break; case \
|
|
G_VALUE_COLLECT_DOUBLE: _cvalue->v_double = va_arg ((var_args), \
|
|
gdouble); break; case G_VALUE_COLLECT_POINTER: _cvalue->v_pointer = \
|
|
va_arg ((var_args), gpointer); break; default: g_assert_not_reached \
|
|
(); } } *(__error) = _vtable->lcopy_value (_value, _n_values, \
|
|
_cvalues, _flags); } G_STMT_END
|
|
#define G_VALUE_COLLECT(value,var_args,flags,__error) \
|
|
G_STMT_START { GValue *_value = (value); guint _flags = (flags); \
|
|
GType _value_type = G_VALUE_TYPE (_value); GTypeValueTable *_vtable = \
|
|
g_type_value_table_peek (_value_type); gchar *_collect_format = \
|
|
_vtable->collect_format; GTypeCValue \
|
|
_cvalues[G_VALUE_COLLECT_FORMAT_MAX_LENGTH] = { { 0, }, }; guint \
|
|
_n_values = 0; if (_vtable->value_free) _vtable->value_free (_value); \
|
|
_value->g_type = _value_type; memset (_value->data, 0, sizeof \
|
|
(_value->data)); while (*_collect_format) { GTypeCValue *_cvalue = \
|
|
_cvalues + _n_values++; switch (*_collect_format++) { case \
|
|
G_VALUE_COLLECT_INT: _cvalue->v_int = va_arg ((var_args), gint); \
|
|
break; case G_VALUE_COLLECT_LONG: _cvalue->v_long = va_arg \
|
|
((var_args), glong); break; case G_VALUE_COLLECT_INT64: \
|
|
_cvalue->v_int64 = va_arg ((var_args), gint64); break; case \
|
|
G_VALUE_COLLECT_DOUBLE: _cvalue->v_double = va_arg ((var_args), \
|
|
gdouble); break; case G_VALUE_COLLECT_POINTER: _cvalue->v_pointer = \
|
|
va_arg ((var_args), gpointer); break; default: g_assert_not_reached \
|
|
(); } } *(__error) = _vtable->collect_value (_value, _n_values, \
|
|
_cvalues, _flags); } G_STMT_END
|
|
#define G_VALUE_COLLECT_FORMAT_MAX_LENGTH (8)
|
|
|
|
|
|
enum {
|
|
G_VALUE_COLLECT_INT = 'i',
|
|
G_VALUE_COLLECT_LONG = 'l',
|
|
G_VALUE_COLLECT_INT64 = 'q',
|
|
G_VALUE_COLLECT_DOUBLE = 'd',
|
|
G_VALUE_COLLECT_POINTER = 'p'
|
|
};
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif
|