[glib/wip/gproperty-2: 26/26] property: Use the field offset everywhere
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib/wip/gproperty-2: 26/26] property: Use the field offset everywhere
- Date: Tue, 18 Jun 2013 16:07:09 +0000 (UTC)
commit ca4b1380e042b46a80e9d861a094e5d0f38cb7dc
Author: Emmanuele Bassi <ebassi gnome org>
Date: Tue Jun 18 16:54:31 2013 +0100
property: Use the field offset everywhere
Do not implicitly grab the private data offset inside GProperty: we
allow passing any offset when creating a new GProperty, and let the
user decide where the property is stored, by giving us the correct
offset — either from the instance structure, or from the private
structure.
https://bugzilla.gnome.org/show_bug.cgi?id=648526
gobject/gproperty.c | 151 ++++++++++++++++------------------------------
gobject/gproperty.h | 6 +-
gobject/tests/property.c | 2 +-
3 files changed, 55 insertions(+), 104 deletions(-)
---
diff --git a/gobject/gproperty.c b/gobject/gproperty.c
index 324fa10..5f88ca6 100644
--- a/gobject/gproperty.c
+++ b/gobject/gproperty.c
@@ -337,8 +337,7 @@ struct _GProperty
guint is_installed : 1;
guint16 type_size;
- guint16 field_offset;
- gint priv_offset;
+ gint field_offset;
GQuark prop_id;
};
@@ -602,12 +601,11 @@ g_##g_t##_property_set_value (GProperty *property, \
if (retval) \
g_object_notify_by_pspec (gobject, (GParamSpec *) property); \
} \
- else if (property->field_offset >= 0) \
+ else if (property->field_offset != 0) \
{ \
- gpointer priv_p, field_p; \
+ gpointer field_p; \
\
- priv_p = get_private_pointer (property, gobject); \
- field_p = G_STRUCT_MEMBER_P (priv_p, property->field_offset); \
+ field_p = G_STRUCT_MEMBER_P (gobject, property->field_offset); \
\
if ((* (c_t *) field_p) != value) \
{ \
@@ -644,13 +642,9 @@ g_##g_t##_property_get_value (GProperty *property, \
{ \
return ((G##G_t##Property *) property)->getter (gobject); \
} \
- else if (property->field_offset >= 0) \
+ else if (property->field_offset != 0) \
{ \
- gpointer priv_p; \
-\
- priv_p = get_private_pointer (property, gobject); \
-\
- return G_STRUCT_MEMBER (c_t, priv_p, property->field_offset); \
+ return G_STRUCT_MEMBER (c_t, gobject, property->field_offset); \
} \
else \
{ \
@@ -661,13 +655,6 @@ g_##g_t##_property_get_value (GProperty *property, \
} \
}
-static inline gpointer
-get_private_pointer (GProperty *property,
- gpointer instance)
-{
- return G_STRUCT_MEMBER_P (instance, property->priv_offset);
-}
-
/**
* g_boolean_property_new:
* @name: canonical name of the property
@@ -1097,12 +1084,11 @@ g_enum_property_set_value (GProperty *property,
if (retval)
g_object_notify_by_pspec (gobject, (GParamSpec *) property);
}
- else if (property->field_offset >= 0)
+ else if (property->field_offset != 0)
{
- gpointer priv_p, field_p;
+ gpointer field_p;
- priv_p = get_private_pointer (property, gobject);
- field_p = G_STRUCT_MEMBER_P (priv_p, property->field_offset);
+ field_p = G_STRUCT_MEMBER_P (gobject, property->field_offset);
if ((* (gint *) field_p) != value)
{
@@ -1137,13 +1123,9 @@ g_enum_property_get_value (GProperty *property,
{
return ((GEnumProperty *) property)->getter (gobject);
}
- else if (property->field_offset >= 0)
+ else if (property->field_offset != 0)
{
- gpointer priv_p;
-
- priv_p = get_private_pointer (property, gobject);
-
- return G_STRUCT_MEMBER (gint, priv_p, property->field_offset);
+ return G_STRUCT_MEMBER (gint, gobject, property->field_offset);
}
else
{
@@ -1336,12 +1318,11 @@ g_flags_property_set_value (GProperty *property,
if (retval)
g_object_notify_by_pspec (gobject, (GParamSpec *) property);
}
- else if (property->field_offset >= 0)
+ else if (property->field_offset != 0)
{
- gpointer priv_p, field_p;
+ gpointer field_p;
- priv_p = get_private_pointer (property, gobject);
- field_p = G_STRUCT_MEMBER_P (priv_p, property->field_offset);
+ field_p = G_STRUCT_MEMBER_P (gobject, property->field_offset);
if ((* (guint *) field_p) != value)
{
@@ -1376,13 +1357,9 @@ g_flags_property_get_value (GProperty *property,
{
return ((GFlagsProperty *) property)->getter (gobject);
}
- else if (property->field_offset >= 0)
+ else if (property->field_offset != 0)
{
- gpointer priv_p;
-
- priv_p = get_private_pointer (property, gobject);
-
- return G_STRUCT_MEMBER (guint, priv_p, property->field_offset);
+ return G_STRUCT_MEMBER (guint, gobject, property->field_offset);
}
else
{
@@ -1595,12 +1572,11 @@ g_float_property_set_value (GProperty *property,
if (retval)
g_object_notify_by_pspec (gobject, (GParamSpec *) property);
}
- else if (property->field_offset >= 0)
+ else if (property->field_offset != 0)
{
- gpointer priv_p, field_p;
+ gpointer field_p;
- priv_p = get_private_pointer (property, gobject);
- field_p = G_STRUCT_MEMBER_P (priv_p, property->field_offset);
+ field_p = G_STRUCT_MEMBER_P (gobject, property->field_offset);
if ((* (gfloat *) field_p) != value)
{
@@ -1635,13 +1611,9 @@ g_float_property_get_value (GProperty *property,
{
return ((GFloatProperty *) property)->getter (gobject);
}
- else if (property->field_offset >= 0)
+ else if (property->field_offset != 0)
{
- gpointer priv_p;
-
- priv_p = get_private_pointer (property, gobject);
-
- return G_STRUCT_MEMBER (gfloat, priv_p, property->field_offset);
+ return G_STRUCT_MEMBER (gfloat, gobject, property->field_offset);
}
else
{
@@ -1854,12 +1826,11 @@ g_double_property_set_value (GProperty *property,
if (retval)
g_object_notify_by_pspec (gobject, (GParamSpec *) property);
}
- else if (property->field_offset >= 0)
+ else if (property->field_offset != 0)
{
- gpointer priv_p, field_p;
+ gpointer field_p;
- priv_p = get_private_pointer (property, gobject);
- field_p = G_STRUCT_MEMBER_P (priv_p, property->field_offset);
+ field_p = G_STRUCT_MEMBER_P (gobject, property->field_offset);
if ((* (gdouble *) field_p) != value)
{
@@ -1894,13 +1865,9 @@ g_double_property_get_value (GProperty *property,
{
return ((GDoubleProperty *) property)->getter (gobject);
}
- else if (property->field_offset >= 0)
+ else if (property->field_offset != 0)
{
- gpointer priv_p;
-
- priv_p = get_private_pointer (property, gobject);
-
- return G_STRUCT_MEMBER (gdouble, priv_p, property->field_offset);
+ return G_STRUCT_MEMBER (gdouble, gobject, property->field_offset);
}
else
{
@@ -2040,13 +2007,12 @@ g_string_property_set_value (GProperty *property,
if (retval)
g_object_notify_by_pspec (gobject, (GParamSpec *) property);
}
- else if (property->field_offset >= 0)
+ else if (property->field_offset != 0)
{
- gpointer priv_p, field_p;
+ gpointer field_p;
gchar *str;
- priv_p = get_private_pointer (property, gobject);
- field_p = G_STRUCT_MEMBER_P (priv_p, property->field_offset);
+ field_p = G_STRUCT_MEMBER_P (gobject, property->field_offset);
str = (* (gpointer *) field_p);
@@ -2089,13 +2055,12 @@ g_string_property_get_value (GProperty *property,
{
return ((GStringProperty *) property)->getter (gobject);
}
- else if (property->field_offset >= 0)
+ else if (property->field_offset != 0)
{
- gpointer priv_p, field_p;
+ gpointer field_p;
gchar *retval;
- priv_p = get_private_pointer (property, gobject);
- field_p = G_STRUCT_MEMBER_P (priv_p, property->field_offset);
+ field_p = G_STRUCT_MEMBER_P (gobject, property->field_offset);
if (property->flags & G_PROPERTY_COPY_GET)
retval = g_strdup ((* (gpointer *) field_p));
@@ -2245,13 +2210,12 @@ g_boxed_property_set_value (GProperty *property,
if (retval)
g_object_notify_by_pspec (gobject, (GParamSpec *) property);
}
- else if (property->field_offset >= 0)
+ else if (property->field_offset != 0)
{
- gpointer priv_p, field_p;
+ gpointer field_p;
gpointer old_value;
- priv_p = get_private_pointer (property, gobject);
- field_p = G_STRUCT_MEMBER_P (priv_p, property->field_offset);
+ field_p = G_STRUCT_MEMBER_P (gobject, property->field_offset);
if (property->flags & G_PROPERTY_COPY_SET)
{
@@ -2296,13 +2260,12 @@ g_boxed_property_get_value (GProperty *property,
{
return ((GBoxedProperty *) property)->getter (gobject);
}
- else if (property->field_offset >= 0)
+ else if (property->field_offset != 0)
{
- gpointer priv_p, field_p;
+ gpointer field_p;
gpointer value;
- priv_p = get_private_pointer (property, gobject);
- field_p = G_STRUCT_MEMBER_P (priv_p, property->field_offset);
+ field_p = G_STRUCT_MEMBER_P (gobject, property->field_offset);
if (property->flags & G_PROPERTY_COPY_GET)
value = g_boxed_copy (((GParamSpec *) property)->value_type, (* (gpointer *) field_p));
@@ -2455,15 +2418,14 @@ g_object_property_set_value (GProperty *property,
if (retval)
g_object_notify_by_pspec (gobject, (GParamSpec *) property);
}
- else if (property->field_offset >= 0)
+ else if (property->field_offset != 0)
{
- gpointer priv_p, field_p;
+ gpointer field_p;
gpointer obj;
g_return_val_if_fail (value == NULL || G_IS_OBJECT (value), FALSE);
- priv_p = get_private_pointer (property, gobject);
- field_p = G_STRUCT_MEMBER_P (priv_p, property->field_offset);
+ field_p = G_STRUCT_MEMBER_P (gobject, property->field_offset);
if ((* (gpointer *) field_p) == value)
return FALSE;
@@ -2515,13 +2477,11 @@ g_object_property_get_value (GProperty *property,
{
return ((GObjectProperty *) property)->getter (gobject);
}
- else if (property->field_offset >= 0)
+ else if (property->field_offset != 0)
{
- gpointer priv_p;
GObject *obj;
- priv_p = g_type_instance_get_private (gobject, G_OBJECT_TYPE (gobject));
- obj = &G_STRUCT_MEMBER (GObject, priv_p, property->field_offset);
+ obj = &G_STRUCT_MEMBER (GObject, gobject, property->field_offset);
if (property->flags & G_PROPERTY_COPY_GET)
{
@@ -2671,12 +2631,11 @@ g_pointer_property_set_value (GProperty *property,
if (retval)
g_object_notify_by_pspec (gobject, (GParamSpec *) property);
}
- else if (property->field_offset >= 0)
+ else if (property->field_offset != 0)
{
- gpointer priv_p, field_p;
+ gpointer field_p;
- priv_p = get_private_pointer (property, gobject);
- field_p = G_STRUCT_MEMBER_P (priv_p, property->field_offset);
+ field_p = G_STRUCT_MEMBER_P (gobject, property->field_offset);
if ((* (gpointer *) field_p) != value)
{
@@ -2711,13 +2670,9 @@ g_pointer_property_get_value (GProperty *property,
{
return ((GPointerProperty *) property)->getter (gobject);
}
- else if (property->field_offset >= 0)
+ else if (property->field_offset != 0)
{
- gpointer priv_p;
-
- priv_p = get_private_pointer (property, gobject);
-
- return G_STRUCT_MEMBER (gpointer, priv_p, property->field_offset);
+ return G_STRUCT_MEMBER (gpointer, gobject, property->field_offset);
}
else
{
@@ -2745,7 +2700,7 @@ g_property_set_installed (GProperty *property,
gpointer g_class,
GType class_gtype)
{
- if (property->field_offset >= 0)
+ if (property->field_offset != 0)
{
gboolean is_interface = G_TYPE_IS_INTERFACE (class_gtype);
@@ -2758,11 +2713,8 @@ g_property_set_installed (GProperty *property,
G_PARAM_SPEC (property)->name,
g_type_name (class_gtype));
- property->field_offset = -1;
- property->priv_offset = 0;
+ property->field_offset = 0;
}
- else
- property->priv_offset = g_type_class_get_instance_private_offset (g_class);
}
g_property_ensure_prop_id (property);
@@ -5052,8 +5004,7 @@ property_init (GParamSpec *pspec)
pspec->value_type = G_TYPE_INVALID;
- property->field_offset = -1;
- property->priv_offset = 0;
+ property->field_offset = 0;
}
GType
diff --git a/gobject/gproperty.h b/gobject/gproperty.h
index 7a32ec9..80ffe9b 100644
--- a/gobject/gproperty.h
+++ b/gobject/gproperty.h
@@ -525,7 +525,7 @@ void g_property_init_default (GProperty *property,
{ \
GProperty *g_property = (GProperty *) \
g_##c_type##_property_new (#name, flags, \
- G_STRUCT_OFFSET (T_N##Private, name), \
+ G_PRIVATE_OFFSET (T_N, name), \
NULL, \
NULL);
#define _G_DEFINE_PROPERTY_EXTENDED_BEGIN(T_N, c_type, name, offset, setterFunc, getterFunc, flags) \
@@ -559,7 +559,7 @@ void g_property_init_default (GProperty *property,
* G_DEFINE_PROPERTY_EXTENDED (GtkGadget,
* int,
* width,
- * G_STRUCT_OFFSET (GtkGadgetPrivate, width),
+ * G_PRIVATE_OFFSET (GtkGadget, width),
* NULL, NULL,
* G_PROPERTY_READWRITE,
* G_PROPERTY_RANGE (0, G_MAXINT))
@@ -569,7 +569,7 @@ void g_property_init_default (GProperty *property,
* {
* GProperty *g_property =
* g_int_property_new ("width", G_PROPERTY_READWRITE,
- * G_STRUCT_OFFSET (GtkGadgetPrivate, width),
+ * G_PRIVATE_OFFSET (GtkGadget, width),
* NULL, NULL);
* g_property_set_range (g_property, 0, G_MAXINT);
* gtk_gadget_properties[PROP_GtkGadget_width] = g_property;
diff --git a/gobject/tests/property.c b/gobject/tests/property.c
index 550ad1e..168fea7 100644
--- a/gobject/tests/property.c
+++ b/gobject/tests/property.c
@@ -131,7 +131,7 @@ test_object_class_init (TestObjectClass *klass)
G_DEFINE_PROPERTY_EXTENDED (TestObject,
enum,
enum_val,
- G_STRUCT_OFFSET (TestObjectPrivate, enum_val),
+ G_PRIVATE_OFFSET (TestObject, enum_val),
test_object_set_enum_val_internal,
NULL,
G_PROPERTY_READWRITE,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]