[libgda] GdaDataMetaWrapper: ported to G_DECLARE/G_DEFINE
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda] GdaDataMetaWrapper: ported to G_DECLARE/G_DEFINE
- Date: Thu, 4 Apr 2019 19:48:24 +0000 (UTC)
commit d2755b28aac472aeb2afe9c15cc996fae8ff4b37
Author: Daniel Espinosa <esodan gmail com>
Date: Wed Apr 3 11:07:29 2019 -0600
GdaDataMetaWrapper: ported to G_DECLARE/G_DEFINE
libgda/gda-data-meta-wrapper.c | 264 ++++++++++++++++-------------------------
libgda/gda-data-meta-wrapper.h | 28 ++---
2 files changed, 109 insertions(+), 183 deletions(-)
---
diff --git a/libgda/gda-data-meta-wrapper.c b/libgda/gda-data-meta-wrapper.c
index 05a6008d4..58872d388 100644
--- a/libgda/gda-data-meta-wrapper.c
+++ b/libgda/gda-data-meta-wrapper.c
@@ -62,34 +62,10 @@ comp_row_free (CompRow *row)
g_free (row);
}
-struct _GdaDataMetaWrapperPrivate {
- GdaDataModel *model;
- gint nb_cols;
-
- gint *cols_to_wrap;
- gint cols_to_wrap_size;
- GdaSqlIdentifierStyle mode;
- GdaSqlReservedKeywordsFunc reserved_keyword_func;
-
- GHashTable *computed_rows; /* key = row number, value = a CompRow pointer
- * may be %NULL if we don't keep computed values */
- CompRow *buffer; /* may be %NULL if we keep computed values */
-
- /* note: either @computed_rows or @buffer is NULL, not both and one is not NULL */
-};
-
-/* properties */
-enum
-{
- PROP_0,
- PROP_MODEL,
-};
static void gda_data_meta_wrapper_class_init (GdaDataMetaWrapperClass *klass);
-static void gda_data_meta_wrapper_init (GdaDataMetaWrapper *model,
- GdaDataMetaWrapperClass *klass);
+static void gda_data_meta_wrapper_init (GdaDataMetaWrapper *model);
static void gda_data_meta_wrapper_dispose (GObject *object);
-static void gda_data_meta_wrapper_finalize (GObject *object);
static void gda_data_meta_wrapper_set_property (GObject *object,
guint param_id,
@@ -108,56 +84,40 @@ static GdaColumn *gda_data_meta_wrapper_describe_column (GdaDataModel
static GdaDataModelAccessFlags gda_data_meta_wrapper_get_access_flags(GdaDataModel *model);
static const GValue *gda_data_meta_wrapper_get_value_at (GdaDataModel *model, gint col, gint row,
GError **error);
-static GObjectClass *parent_class = NULL;
-/**
- * gda_data_meta_wrapper_get_type:
- *
- * Returns: the #GType of GdaDataMetaWrapper.
- */
-GType
-_gda_data_meta_wrapper_get_type (void)
+typedef struct {
+ GdaDataModel *model;
+ gint nb_cols;
+
+ gint *cols_to_wrap;
+ gint cols_to_wrap_size;
+ GdaSqlIdentifierStyle mode;
+ GdaSqlReservedKeywordsFunc reserved_keyword_func;
+
+ GHashTable *computed_rows; /* key = row number, value = a CompRow pointer
+ * may be %NULL if we don't keep computed values */
+ CompRow *buffer; /* may be %NULL if we keep computed values */
+
+ /* note: either @computed_rows or @buffer is NULL, not both and one is not NULL */
+} GdaDataMetaWrapperPrivate;
+
+
+G_DEFINE_TYPE_WITH_CODE (GdaDataMetaWrapper, gda_data_meta_wrapper,G_TYPE_OBJECT,
+ G_ADD_PRIVATE (GdaDataMetaWrapper)
+ G_IMPLEMENT_INTERFACE(GDA_TYPE_DATA_MODEL,gda_data_meta_wrapper_data_model_init))
+
+/* properties */
+enum
{
- static GType type = 0;
-
- if (G_UNLIKELY (type == 0)) {
- static GMutex registering;
- static const GTypeInfo info = {
- sizeof (GdaDataMetaWrapperClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) gda_data_meta_wrapper_class_init,
- NULL,
- NULL,
- sizeof (GdaDataMetaWrapper),
- 0,
- (GInstanceInitFunc) gda_data_meta_wrapper_init,
- 0
- };
-
- static const GInterfaceInfo data_model_info = {
- (GInterfaceInitFunc) gda_data_meta_wrapper_data_model_init,
- NULL,
- NULL
- };
-
- g_mutex_lock (®istering);
- if (type == 0) {
- type = g_type_register_static (G_TYPE_OBJECT, "GdaDataMetaWrapper", &info, 0);
- g_type_add_interface_static (type, GDA_TYPE_DATA_MODEL, &data_model_info);
- }
- g_mutex_unlock (®istering);
- }
- return type;
-}
+ PROP_0,
+ PROP_MODEL,
+};
static void
gda_data_meta_wrapper_class_init (GdaDataMetaWrapperClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- parent_class = g_type_class_peek_parent (klass);
-
/* properties */
object_class->set_property = gda_data_meta_wrapper_set_property;
object_class->get_property = gda_data_meta_wrapper_get_property;
@@ -169,7 +129,6 @@ gda_data_meta_wrapper_class_init (GdaDataMetaWrapperClass *klass)
/* virtual functions */
object_class->dispose = gda_data_meta_wrapper_dispose;
- object_class->finalize = gda_data_meta_wrapper_finalize;
#ifdef GDA_DEBUG
test_keywords ();
#endif
@@ -201,17 +160,17 @@ gda_data_meta_wrapper_data_model_init (GdaDataModelInterface *iface)
}
static void
-gda_data_meta_wrapper_init (GdaDataMetaWrapper *model, G_GNUC_UNUSED GdaDataMetaWrapperClass *klass)
+gda_data_meta_wrapper_init (GdaDataMetaWrapper *model)
{
g_return_if_fail (GDA_IS_DATA_META_WRAPPER (model));
- model->priv = g_new0 (GdaDataMetaWrapperPrivate, 1);
- model->priv->model = NULL;
- model->priv->cols_to_wrap = NULL;
- model->priv->cols_to_wrap_size = 0;
- model->priv->mode = GDA_DATA_META_WRAPPER_MODE_LC;
- model->priv->reserved_keyword_func = NULL;
- model->priv->computed_rows = NULL;
- model->priv->buffer = NULL;
+ GdaDataMetaWrapperPrivate *priv = gda_data_meta_wrapper_get_instance_private (model);
+ priv->model = NULL;
+ priv->cols_to_wrap = NULL;
+ priv->cols_to_wrap_size = 0;
+ priv->mode = GDA_DATA_META_WRAPPER_MODE_LC;
+ priv->reserved_keyword_func = NULL;
+ priv->computed_rows = NULL;
+ priv->buffer = NULL;
}
static void
@@ -221,50 +180,33 @@ gda_data_meta_wrapper_dispose (GObject *object)
g_return_if_fail (GDA_IS_DATA_META_WRAPPER (model));
+ GdaDataMetaWrapperPrivate *priv = gda_data_meta_wrapper_get_instance_private (model);
+
/* free memory */
- if (model->priv) {
/* random meta model free */
- if (model->priv->model) {
- g_object_unref (model->priv->model);
- model->priv->model = NULL;
+ if (priv->model) {
+ g_object_unref (priv->model);
+ priv->model = NULL;
}
- if (model->priv->computed_rows) {
- g_hash_table_destroy (model->priv->computed_rows);
- model->priv->computed_rows = NULL;
+ if (priv->computed_rows) {
+ g_hash_table_destroy (priv->computed_rows);
+ priv->computed_rows = NULL;
}
- if (model->priv->buffer) {
- comp_row_free (model->priv->buffer);
- model->priv->buffer = NULL;
+ if (priv->buffer) {
+ comp_row_free (priv->buffer);
+ priv->buffer = NULL;
}
- if (model->priv->cols_to_wrap) {
- g_free (model->priv->cols_to_wrap);
- model->priv->cols_to_wrap = NULL;
- model->priv->cols_to_wrap_size = 0;
+ if (priv->cols_to_wrap) {
+ g_free (priv->cols_to_wrap);
+ priv->cols_to_wrap = NULL;
+ priv->cols_to_wrap_size = 0;
}
- }
/* chain to parent class */
- parent_class->dispose (object);
-}
-
-static void
-gda_data_meta_wrapper_finalize (GObject *object)
-{
- GdaDataMetaWrapper *model = (GdaDataMetaWrapper *) object;
-
- g_return_if_fail (GDA_IS_DATA_META_WRAPPER (model));
-
- /* free memory */
- if (model->priv) {
- g_free (model->priv);
- model->priv = NULL;
- }
-
- /* chain to parent class */
- parent_class->finalize (object);
+ G_OBJECT_CLASS(gda_data_meta_wrapper_parent_class)->dispose (object);
}
static void
@@ -276,7 +218,7 @@ gda_data_meta_wrapper_set_property (GObject *object,
GdaDataMetaWrapper *model;
model = GDA_DATA_META_WRAPPER (object);
- if (model->priv) {
+ GdaDataMetaWrapperPrivate *priv = gda_data_meta_wrapper_get_instance_private (model);
switch (param_id) {
case PROP_MODEL: {
GdaDataModel *mod = g_value_get_object(value);
@@ -287,12 +229,12 @@ gda_data_meta_wrapper_set_property (GObject *object,
return;
}
- if (model->priv->model)
- g_object_unref (model->priv->model);
+ if (priv->model)
+ g_object_unref (priv->model);
- model->priv->model = mod;
+ priv->model = mod;
g_object_ref (mod);
- model->priv->nb_cols = gda_data_model_get_n_columns (mod);
+ priv->nb_cols = gda_data_model_get_n_columns (mod);
}
break;
}
@@ -300,7 +242,6 @@ gda_data_meta_wrapper_set_property (GObject *object,
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
}
- }
}
static void
@@ -312,16 +253,15 @@ gda_data_meta_wrapper_get_property (GObject *object,
GdaDataMetaWrapper *model;
model = GDA_DATA_META_WRAPPER (object);
- if (model->priv) {
+ GdaDataMetaWrapperPrivate *priv = gda_data_meta_wrapper_get_instance_private (model);
switch (param_id) {
case PROP_MODEL:
- g_value_set_object (value, G_OBJECT (model->priv->model));
+ g_value_set_object (value, G_OBJECT (priv->model));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
}
- }
}
/**
@@ -344,20 +284,21 @@ _gda_data_meta_wrapper_new (GdaDataModel *model, gboolean reusable, gint *cols,
retmodel = g_object_new (GDA_TYPE_DATA_META_WRAPPER,
"model", model, NULL);
+ GdaDataMetaWrapperPrivate *retpriv = gda_data_meta_wrapper_get_instance_private (retmodel);
- retmodel->priv->cols_to_wrap = g_new (gint, size);
- memcpy (retmodel->priv->cols_to_wrap, cols, sizeof (gint) * size); /* Flawfinder: ignore */
- retmodel->priv->cols_to_wrap_size = size;
- retmodel->priv->mode = mode;
- retmodel->priv->reserved_keyword_func = reserved_keyword_func;
+ retpriv->cols_to_wrap = g_new (gint, size);
+ memcpy (retpriv->cols_to_wrap, cols, sizeof (gint) * size); /* Flawfinder: ignore */
+ retpriv->cols_to_wrap_size = size;
+ retpriv->mode = mode;
+ retpriv->reserved_keyword_func = reserved_keyword_func;
if (reusable)
- retmodel->priv->computed_rows = g_hash_table_new_full (g_int_hash, g_int_equal,
+ retpriv->computed_rows = g_hash_table_new_full (g_int_hash, g_int_equal,
NULL, (GDestroyNotify) comp_row_free);
else {
- retmodel->priv->buffer = g_new0 (CompRow, 1);
- retmodel->priv->buffer->size = size;
- retmodel->priv->buffer->values = g_new0 (GValue *, size);
+ retpriv->buffer = g_new0 (CompRow, 1);
+ retpriv->buffer->size = size;
+ retpriv->buffer->values = g_new0 (GValue *, size);
}
return GDA_DATA_MODEL (retmodel);
@@ -372,9 +313,9 @@ gda_data_meta_wrapper_get_n_rows (GdaDataModel *model)
GdaDataMetaWrapper *imodel;
g_return_val_if_fail (GDA_IS_DATA_META_WRAPPER (model), 0);
imodel = GDA_DATA_META_WRAPPER (model);
- g_return_val_if_fail (imodel->priv, 0);
+ GdaDataMetaWrapperPrivate *priv = gda_data_meta_wrapper_get_instance_private (imodel);
- return gda_data_model_get_n_rows (imodel->priv->model);
+ return gda_data_model_get_n_rows (priv->model);
}
static gint
@@ -383,10 +324,11 @@ gda_data_meta_wrapper_get_n_columns (GdaDataModel *model)
GdaDataMetaWrapper *imodel;
g_return_val_if_fail (GDA_IS_DATA_META_WRAPPER (model), 0);
imodel = GDA_DATA_META_WRAPPER (model);
- g_return_val_if_fail (imodel->priv, 0);
+ GdaDataMetaWrapperPrivate *priv = gda_data_meta_wrapper_get_instance_private (imodel);
+ g_return_val_if_fail (priv, 0);
- if (imodel->priv->model)
- return imodel->priv->nb_cols;
+ if (priv->model)
+ return priv->nb_cols;
else
return 0;
}
@@ -397,10 +339,10 @@ gda_data_meta_wrapper_describe_column (GdaDataModel *model, gint col)
GdaDataMetaWrapper *imodel;
g_return_val_if_fail (GDA_IS_DATA_META_WRAPPER (model), NULL);
imodel = GDA_DATA_META_WRAPPER (model);
- g_return_val_if_fail (imodel->priv, NULL);
+ GdaDataMetaWrapperPrivate *priv = gda_data_meta_wrapper_get_instance_private (imodel);
- if (imodel->priv->model)
- return gda_data_model_describe_column (imodel->priv->model, col);
+ if (priv->model)
+ return gda_data_model_describe_column (priv->model, col);
else
return NULL;
}
@@ -408,12 +350,6 @@ gda_data_meta_wrapper_describe_column (GdaDataModel *model, gint col)
static GdaDataModelAccessFlags
gda_data_meta_wrapper_get_access_flags (GdaDataModel *model)
{
- GdaDataMetaWrapper *imodel;
-
- g_return_val_if_fail (GDA_IS_DATA_META_WRAPPER (model), 0);
- imodel = GDA_DATA_META_WRAPPER (model);
- g_return_val_if_fail (imodel->priv, 0);
-
return GDA_DATA_MODEL_ACCESS_RANDOM;
}
@@ -549,11 +485,12 @@ _gda_data_meta_wrapper_compute_value (const GValue *value, GdaSqlIdentifierStyle
static gint
get_index_col (GdaDataMetaWrapper *imodel, gint col)
{
+ GdaDataMetaWrapperPrivate *priv = gda_data_meta_wrapper_get_instance_private (imodel);
gint i;
- for (i = 0; i < imodel->priv->cols_to_wrap_size; i++) {
- if (imodel->priv->cols_to_wrap [i] == col)
+ for (i = 0; i < priv->cols_to_wrap_size; i++) {
+ if (priv->cols_to_wrap [i] == col)
return i;
- else if (imodel->priv->cols_to_wrap [i] > col)
+ else if (priv->cols_to_wrap [i] > col)
return -1;
}
return -1;
@@ -566,45 +503,46 @@ gda_data_meta_wrapper_get_value_at (GdaDataModel *model, gint col, gint row, GEr
g_return_val_if_fail (GDA_IS_DATA_META_WRAPPER (model), NULL);
imodel = GDA_DATA_META_WRAPPER (model);
- g_return_val_if_fail (imodel->priv, NULL);
- g_return_val_if_fail (imodel->priv->model, NULL);
+ GdaDataMetaWrapperPrivate *priv = gda_data_meta_wrapper_get_instance_private (imodel);
+ g_return_val_if_fail (priv, NULL);
+ g_return_val_if_fail (priv->model, NULL);
g_return_val_if_fail (row >= 0, NULL);
- if (col >= imodel->priv->nb_cols) {
+ if (col >= priv->nb_cols) {
g_set_error (error, GDA_DATA_MODEL_ERROR, GDA_DATA_MODEL_COLUMN_OUT_OF_RANGE_ERROR,
- _("Column %d out of range (0-%d)"), col, imodel->priv->nb_cols - 1);
+ _("Column %d out of range (0-%d)"), col, priv->nb_cols - 1);
return NULL;
}
gint indexcol = get_index_col (imodel, col);
if (indexcol == -1)
- return gda_data_model_get_value_at (imodel->priv->model, col, row, error);
+ return gda_data_model_get_value_at (priv->model, col, row, error);
/* data may need to be changed */
- if (imodel->priv->computed_rows) {
+ if (priv->computed_rows) {
CompRow *crow = NULL;
- crow = g_hash_table_lookup (imodel->priv->computed_rows, &row);
+ crow = g_hash_table_lookup (priv->computed_rows, &row);
if (!crow || !(crow->values[indexcol]) || (crow->values[indexcol] == NON_COMP_VALUE)) {
const GValue *cvalue;
- cvalue = gda_data_model_get_value_at (imodel->priv->model, col, row, error);
+ cvalue = gda_data_model_get_value_at (priv->model, col, row, error);
if (!cvalue)
return NULL;
GValue *retval;
- retval = _gda_data_meta_wrapper_compute_value (cvalue, imodel->priv->mode,
- imodel->priv->reserved_keyword_func);
+ retval = _gda_data_meta_wrapper_compute_value (cvalue, priv->mode,
+ priv->reserved_keyword_func);
if (!retval)
return cvalue;
if (!crow) {
crow = g_new0 (CompRow, 1);
crow->row = row;
- crow->size = imodel->priv->cols_to_wrap_size;
+ crow->size = priv->cols_to_wrap_size;
crow->values = g_new (GValue *, crow->size);
gint i;
for (i = 0; i < crow->size; i++)
crow->values [i] = NON_COMP_VALUE;
- g_hash_table_insert (imodel->priv->computed_rows, &(crow->row), crow);
+ g_hash_table_insert (priv->computed_rows, &(crow->row), crow);
}
crow->values[indexcol] = retval;
return retval;
@@ -614,18 +552,18 @@ gda_data_meta_wrapper_get_value_at (GdaDataModel *model, gint col, gint row, GEr
}
else {
const GValue *cvalue;
- cvalue = gda_data_model_get_value_at (imodel->priv->model, col, row, error);
+ cvalue = gda_data_model_get_value_at (priv->model, col, row, error);
if (!cvalue)
return NULL;
GValue *retval;
- retval = _gda_data_meta_wrapper_compute_value (cvalue, imodel->priv->mode,
- imodel->priv->reserved_keyword_func);
+ retval = _gda_data_meta_wrapper_compute_value (cvalue, priv->mode,
+ priv->reserved_keyword_func);
if (!retval)
return cvalue;
- if (imodel->priv->buffer->values [indexcol])
- gda_value_free (imodel->priv->buffer->values [indexcol]);
- imodel->priv->buffer->values [indexcol] = retval;
+ if (priv->buffer->values [indexcol])
+ gda_value_free (priv->buffer->values [indexcol]);
+ priv->buffer->values [indexcol] = retval;
return retval;
}
return NULL;
diff --git a/libgda/gda-data-meta-wrapper.h b/libgda/gda-data-meta-wrapper.h
index ad5c56cdd..01976e625 100644
--- a/libgda/gda-data-meta-wrapper.h
+++ b/libgda/gda-data-meta-wrapper.h
@@ -26,25 +26,8 @@
G_BEGIN_DECLS
-#define GDA_TYPE_DATA_META_WRAPPER (_gda_data_meta_wrapper_get_type())
-#define GDA_DATA_META_WRAPPER(obj) (G_TYPE_CHECK_INSTANCE_CAST (obj, GDA_TYPE_DATA_META_WRAPPER,
GdaDataMetaWrapper))
-#define GDA_DATA_META_WRAPPER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST (klass, GDA_TYPE_DATA_META_WRAPPER,
GdaDataMetaWrapperClass))
-#define GDA_IS_DATA_META_WRAPPER(obj) (G_TYPE_CHECK_INSTANCE_TYPE(obj, GDA_TYPE_DATA_META_WRAPPER))
-#define GDA_IS_DATA_META_WRAPPER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GDA_TYPE_DATA_META_WRAPPER))
-
-typedef struct _GdaDataMetaWrapper GdaDataMetaWrapper;
-typedef struct _GdaDataMetaWrapperClass GdaDataMetaWrapperClass;
-typedef struct _GdaDataMetaWrapperPrivate GdaDataMetaWrapperPrivate;
-
-typedef enum {
- GDA_DATA_META_WRAPPER_MODE_LC, /* quote identifier if there are some non lower case chars */
- GDA_DATA_META_WRAPPER_MODE_UC /* quote identifier if there are some non upper case chars */
-} GdaDataMetaWrapperMode;
-
-struct _GdaDataMetaWrapper {
- GObject object;
- GdaDataMetaWrapperPrivate *priv;
-};
+#define GDA_TYPE_DATA_META_WRAPPER (gda_data_meta_wrapper_get_type())
+G_DECLARE_DERIVABLE_TYPE(GdaDataMetaWrapper, gda_data_meta_wrapper, GDA, DATA_META_WRAPPER, GObject)
struct _GdaDataMetaWrapperClass {
GObjectClass parent_class;
@@ -56,7 +39,12 @@ struct _GdaDataMetaWrapperClass {
void (*_gda_reserved4) (void);
};
-GType _gda_data_meta_wrapper_get_type (void) G_GNUC_CONST;
+typedef enum {
+ GDA_DATA_META_WRAPPER_MODE_LC, /* quote identifier if there are some non lower case chars */
+ GDA_DATA_META_WRAPPER_MODE_UC /* quote identifier if there are some non upper case chars */
+} GdaDataMetaWrapperMode;
+
+
GdaDataModel *_gda_data_meta_wrapper_new (GdaDataModel *model, gboolean reusable,
gint *cols, gint size, GdaSqlIdentifierStyle mode,
GdaSqlReservedKeywordsFunc reserved_keyword_func);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]