From 1f4dfcd60bbdd7187792f331553ed570edae03ea Mon Sep 17 00:00:00 2001 From: Cosimo Cecchi Date: Tue, 10 Jun 2008 17:21:57 +0200 Subject: [PATCH] Make this a GObject. --- src/mm-filter-param.c | 50 ++++++++++++++++++++++++++++++++++++-------------- src/mm-filter-param.h | 27 +++++++++++++++++++++++++-- 2 files changed, 61 insertions(+), 16 deletions(-) diff --git a/src/mm-filter-param.c b/src/mm-filter-param.c index 44409fa..3265fe4 100644 --- a/src/mm-filter-param.c +++ b/src/mm-filter-param.c @@ -22,14 +22,40 @@ #include "mm-types.h" #include -#include -struct _MMFilterParam { +#define MM_FILTER_PARAM_GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((o), MM_TYPE_FILTER_PARAM, MMFilterParamDetails)) + +struct _MMFilterParamDetails { GValue *value; MMAttribute *attribute; MMComparisionOperator op; }; +G_DEFINE_TYPE (MMFilterParam, mm_filter_param, G_TYPE_OBJECT); + +void +mm_filter_param_finalize (GObject *o) +{ + mm_filter_param_clear (MM_FILTER_PARAM (fp)); + + G_OBJECT_CLASS (mm_filter_param_parent_class)->finalize (o); +} + +static void +mm_filter_param_init (MMFilterParam *fp) +{ + MMFilterParamDetails *details = fp->details = MM_FILTER_PARAM_GET_PRIVATE (fp); +} + +static void +mm_filter_param_class_init (MMFilterParamClass *klass) +{ + G_OBJECT_CLASS (klass)->finalize = mm_filter_param_finalize; + + g_type_class_add_private (klass, sizeof (MMFilterParamDetails)); +} + /* public methods */ MMAttribute * @@ -51,13 +77,6 @@ mm_filter_param_get_value (MMFilterParam *fp) } void -mm_filter_param_free (MMFilterParam *fp) -{ - mm_filter_param_clear (fp); - g_slice_free (MMFilterParam, fp); -} - -void mm_filter_param_set_attribute (MMFilterParam *fp, MMAttribute *attribute) { @@ -113,14 +132,17 @@ mm_filter_param_new (MMAttribute *attribute, GType attribute_type = mm_attribute_get_type (attribute); if (attribute_type != G_VALUE_TYPE (value)) { + g_warning ("Trying to set an incompatible value to attribute %s", + mm_attribute_get_name (attribute)); return NULL; } + + fp = g_object_new (MM_TYPE_FILTER_PARAM, NULL); - fp = g_slice_new0 (MMFilterParam); - fp->op = op; - fp->attribute = attribute; - fp->value = g_value_init (fp->value, attribute_type); - g_value_copy (value, fp->value); + fp->details->op = op; + fp->details->attribute = attribute; + fp->details->value = g_value_init (fp->value, attribute_type); + g_value_copy (value, fp->details->value); return fp; } diff --git a/src/mm-filter-param.h b/src/mm-filter-param.h index 651cf1b..26af774 100644 --- a/src/mm-filter-param.h +++ b/src/mm-filter-param.h @@ -24,7 +24,31 @@ #include #include "mm-types.h" -typedef struct _MMFilterParam MMFilterParam; +#define MM_TYPE_FILTER_PARAM (mm_filter_param_get_type()) +#define MM_FILTER_PARAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),\ + MM_TYPE_FILTER_PARAM, MMFilterParam)) +#define MM_FILTER_PARAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass),\ + MM_TYPE_FILTER_PARAM, MMFilterParamClass)) +#define MM_IS_FILTER_PARAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj),\ + MM_TYPE_FILTER_PARAM)) +#define MM_IS_FILTER_PARAM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj),\ + MM_TYPE_FILTER_PARAM)) +#define MM_FILTER_PARAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),\ + MM_TYPE_FILTER_PARAM, MMFilterParamClass)) + +typedef struct _MMFilterParam MMFilterParam; +typedef struct _MMFilterParamDetails MMFilterParamDetails; +typedef struct _MMFilterParamClass MMFilterParamClass; + +struct _MMFilterParam { + GObject parent; + + MMFilterParamDetails *details; +}; + +struct _MMFilterParamClass { + GObjectClass parent_class; +}; /* public methods */ @@ -41,6 +65,5 @@ GValue * mm_filter_param_get_value (MMFilterParam *filter_para MMAttribute * mm_filter_param_get_attribute (MMFilterParam *filter_param); MMComparisionOperator mm_filter_param_get_operator (MMFilterParam *filter_param); void mm_filter_param_clear (MMFilterParam *filter_param); -void mm_filter_param_free (MMFilterParam *filter_param); #endif /* __MM_FILTER_PARAM_H__ */ -- 2.11.4.GIT