G_LOCK_DEFINE_STATIC (qdata_mutex);
static GQuark weak_ref_quark;
+typedef struct
+{
+ GQuark quark;
+ GstMiniObjectWeakNotify notify;
+ gpointer data;
+} GstQData;
+
+#define QDATA(o,i) ((GstQData *)(o)->qdata)[(i)]
+#define QDATA_QUARK(o,i) (QDATA(o,i).quark)
+#define QDATA_NOTIFY(o,i) (QDATA(o,i).notify)
+#define QDATA_DATA(o,i) (QDATA(o,i).data)
+
void
_priv_gst_mini_object_initialize (void)
{
guint i;
for (i = 0; i < obj->n_qdata; i++)
- obj->qdata[i].notify (obj->qdata[i].data, obj);
+ QDATA_NOTIFY (obj, i) (QDATA_DATA (obj, i), obj);
g_free (obj->qdata);
}
G_LOCK (qdata_mutex);
i = object->n_qdata++;
object->qdata =
- g_realloc (object->qdata, sizeof (object->qdata[0]) * object->n_qdata);
- object->qdata[i].quark = weak_ref_quark;
- object->qdata[i].notify = notify;
- object->qdata[i].data = data;
+ g_realloc (object->qdata, sizeof (GstQData) * object->n_qdata);
+ QDATA_QUARK (object, i) = weak_ref_quark;
+ QDATA_NOTIFY (object, i) = notify;
+ QDATA_DATA (object, i) = data;
G_UNLOCK (qdata_mutex);
}
G_LOCK (qdata_mutex);
for (i = 0; i < object->n_qdata; i++) {
- if (object->qdata[i].quark == weak_ref_quark &&
- object->qdata[i].notify == notify && object->qdata[i].data == data) {
+ if (QDATA_QUARK (object, i) == weak_ref_quark &&
+ QDATA_NOTIFY (object, i) == notify && QDATA_DATA (object, i) == data) {
found_one = TRUE;
if (--object->n_qdata == 0) {
/* we don't shrink but free when everything is gone */
g_free (object->qdata);
object->qdata = NULL;
} else if (i != object->n_qdata)
- object->qdata[i] = object->qdata[object->n_qdata];
+ QDATA (object, i) = QDATA (object, object->n_qdata);
break;
}
}
G_LOCK (qdata_mutex);
for (i = 0; i < object->n_qdata; i++) {
- if (object->qdata[i].quark == quark) {
- old_data = object->qdata[i].data;
- old_notify = (GDestroyNotify) object->qdata[i].notify;
+ if (QDATA_QUARK (object, i) == quark) {
+ old_data = QDATA_DATA (object, i);
+ old_notify = (GDestroyNotify) QDATA_NOTIFY (object, i);
if (data == NULL) {
/* remove item */
g_free (object->qdata);
object->qdata = NULL;
} else if (i != object->n_qdata)
- object->qdata[i] = object->qdata[object->n_qdata];
+ QDATA (object, i) = QDATA (object, object->n_qdata);
}
break;
}
/* add item */
i = object->n_qdata++;
object->qdata =
- g_realloc (object->qdata, sizeof (object->qdata[0]) * object->n_qdata);
+ g_realloc (object->qdata, sizeof (GstQData) * object->n_qdata);
}
- object->qdata[i].quark = quark;
- object->qdata[i].data = data;
- object->qdata[i].notify = (GstMiniObjectWeakNotify) destroy;
+ QDATA_QUARK (object, i) = quark;
+ QDATA_DATA (object, i) = data;
+ QDATA_NOTIFY (object, i) = (GstMiniObjectWeakNotify) destroy;
G_UNLOCK (qdata_mutex);
if (old_notify)
G_LOCK (qdata_mutex);
for (i = 0; i < object->n_qdata; i++) {
- if (object->qdata[i].quark == quark) {
- result = object->qdata[i].data;
+ if (QDATA_QUARK (object, i) == quark) {
+ result = QDATA_DATA (object, i);
break;
}
}