[libgda] GdaWebBlobOp: Ported to G_DECLARE/G_DEFINE



commit 3b63e3e0cff98baaa0b5a51a58cab385b3d54f48
Author: Daniel Espinosa <esodan gmail com>
Date:   Fri Apr 5 14:29:19 2019 -0600

    GdaWebBlobOp: Ported to G_DECLARE/G_DEFINE

 providers/web/gda-web-blob-op.c | 90 +++++++++++++----------------------------
 providers/web/gda-web-blob-op.h | 16 +-------
 providers/web/gda-web-ddl.c     |  3 +-
 3 files changed, 31 insertions(+), 78 deletions(-)
---
diff --git a/providers/web/gda-web-blob-op.c b/providers/web/gda-web-blob-op.c
index d79c143a4..ca7664eef 100644
--- a/providers/web/gda-web-blob-op.c
+++ b/providers/web/gda-web-blob-op.c
@@ -27,62 +27,29 @@
 #include <libgda/gda-blob-op-impl.h>
 #include <libgda/gda-debug-macros.h>
 
-struct _GdaWebBlobOpPrivate {
-       GdaConnection *cnc;
-       /* TO_ADD: specific information describing a Blob in the C API */
-};
 
 static void gda_web_blob_op_class_init (GdaWebBlobOpClass *klass);
-static void gda_web_blob_op_init       (GdaWebBlobOp *blob,
-                                        GdaWebBlobOpClass *klass);
-static void gda_web_blob_op_finalize   (GObject *object);
+static void gda_web_blob_op_init       (GdaWebBlobOp *blob);
+static void gda_web_blob_op_dispose    (GObject *object);
 
 static glong gda_web_blob_op_get_length (GdaBlobOp *op);
 static glong gda_web_blob_op_read       (GdaBlobOp *op, GdaBlob *blob, glong offset, glong size);
 static glong gda_web_blob_op_write      (GdaBlobOp *op, GdaBlob *blob, glong offset);
 
-static GObjectClass *parent_class = NULL;
 
-/*
- * Object init and finalize
- */
-GType
-gda_web_blob_op_get_type (void)
-{
-       static GType type = 0;
-
-       if (G_UNLIKELY (type == 0)) {
-               static GMutex registering;
-               static const GTypeInfo info = {
-                       sizeof (GdaWebBlobOpClass),
-                       (GBaseInitFunc) NULL,
-                       (GBaseFinalizeFunc) NULL,
-                       (GClassInitFunc) gda_web_blob_op_class_init,
-                       NULL,
-                       NULL,
-                       sizeof (GdaWebBlobOp),
-                       0,
-                       (GInstanceInitFunc) gda_web_blob_op_init,
-                       0
-               };
-               g_mutex_lock (&registering);
-               if (type == 0)
-                       type = g_type_register_static (GDA_TYPE_BLOB_OP, "GdaWebBlobOp", &info, 0);
-               g_mutex_unlock (&registering);
-       }
-       return type;
-}
+typedef struct {
+       GdaConnection *cnc;
+       /* TO_ADD: specific information describing a Blob in the C API */
+} GdaWebBlobOpPrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (GdaWebBlobOp, gda_web_blob_op, GDA_TYPE_BLOB_OP)
 
 static void
-gda_web_blob_op_init (GdaWebBlobOp *op,
-                          G_GNUC_UNUSED GdaWebBlobOpClass *klass)
+gda_web_blob_op_init (GdaWebBlobOp *op)
 {
        g_return_if_fail (GDA_IS_WEB_BLOB_OP (op));
-
-       op->priv = g_new0 (GdaWebBlobOpPrivate, 1);
-
-       /* initialize specific structure */
-       TO_IMPLEMENT;
+  GdaWebBlobOpPrivate *priv = gda_web_blob_op_get_instance_private (op);
+  priv->cnc = NULL;
 }
 
 static void
@@ -91,28 +58,25 @@ gda_web_blob_op_class_init (GdaWebBlobOpClass *klass)
        GObjectClass *object_class = G_OBJECT_CLASS (klass);
        GdaBlobOpClass *blob_class = GDA_BLOB_OP_CLASS (klass);
 
-       parent_class = g_type_class_peek_parent (klass);
-
-       object_class->finalize = gda_web_blob_op_finalize;
+       object_class->dispose = gda_web_blob_op_dispose;
        GDA_BLOB_OP_FUNCTIONS (blob_class->functions)->get_length = gda_web_blob_op_get_length;
        GDA_BLOB_OP_FUNCTIONS (blob_class->functions)->read = gda_web_blob_op_read;
        GDA_BLOB_OP_FUNCTIONS (blob_class->functions)->write = gda_web_blob_op_write;
 }
 
 static void
-gda_web_blob_op_finalize (GObject * object)
+gda_web_blob_op_dispose (GObject * object)
 {
        GdaWebBlobOp *bop = (GdaWebBlobOp *) object;
 
        g_return_if_fail (GDA_IS_WEB_BLOB_OP (bop));
+  GdaWebBlobOpPrivate *priv = gda_web_blob_op_get_instance_private (bop);
+  if (priv->cnc != NULL) {
+    g_object_unref (priv->cnc);
+    priv->cnc = NULL;
+  }
 
-       /* free specific information */
-       TO_IMPLEMENT;
-
-       g_free (bop->priv);
-       bop->priv = NULL;
-
-       parent_class->finalize (object);
+       G_OBJECT_CLASS (gda_web_blob_op_parent_class)->dispose (object);
 }
 
 GdaBlobOp *
@@ -123,7 +87,9 @@ gda_web_blob_op_new (GdaConnection *cnc)
        g_return_val_if_fail (GDA_IS_CONNECTION (cnc), NULL);
 
        bop = g_object_new (GDA_TYPE_WEB_BLOB_OP, "connection", cnc, NULL);
-       bop->priv->cnc = cnc;
+  GdaWebBlobOpPrivate *priv = gda_web_blob_op_get_instance_private (bop);
+
+       priv->cnc = g_object_ref (cnc);
        
        return GDA_BLOB_OP (bop);
 }
@@ -138,8 +104,8 @@ gda_web_blob_op_get_length (GdaBlobOp *op)
 
        g_return_val_if_fail (GDA_IS_WEB_BLOB_OP (op), -1);
        bop = GDA_WEB_BLOB_OP (op);
-       g_return_val_if_fail (bop->priv, -1);
-       g_return_val_if_fail (GDA_IS_CONNECTION (bop->priv->cnc), -1);
+  GdaWebBlobOpPrivate *priv = gda_web_blob_op_get_instance_private (bop);
+       g_return_val_if_fail (GDA_IS_CONNECTION (priv->cnc), -1);
 
        TO_IMPLEMENT;
        return -1;
@@ -156,8 +122,8 @@ gda_web_blob_op_read (GdaBlobOp *op, GdaBlob *blob, glong offset, glong size)
 
        g_return_val_if_fail (GDA_IS_WEB_BLOB_OP (op), -1);
        bop = GDA_WEB_BLOB_OP (op);
-       g_return_val_if_fail (bop->priv, -1);
-       g_return_val_if_fail (GDA_IS_CONNECTION (bop->priv->cnc), -1);
+  GdaWebBlobOpPrivate *priv = gda_web_blob_op_get_instance_private (bop);
+       g_return_val_if_fail (GDA_IS_CONNECTION (priv->cnc), -1);
        if (offset >= G_MAXINT)
                return -1;
        g_return_val_if_fail (blob, -1);
@@ -185,8 +151,8 @@ gda_web_blob_op_write (GdaBlobOp *op, GdaBlob *blob, G_GNUC_UNUSED glong offset)
 
        g_return_val_if_fail (GDA_IS_WEB_BLOB_OP (op), -1);
        bop = GDA_WEB_BLOB_OP (op);
-       g_return_val_if_fail (bop->priv, -1);
-       g_return_val_if_fail (GDA_IS_CONNECTION (bop->priv->cnc), -1);
+  GdaWebBlobOpPrivate *priv = gda_web_blob_op_get_instance_private (bop);
+       g_return_val_if_fail (GDA_IS_CONNECTION (priv->cnc), -1);
        g_return_val_if_fail (blob, -1);
 
        if (gda_blob_get_op (blob) && (gda_blob_get_op (blob) != op)) {
diff --git a/providers/web/gda-web-blob-op.h b/providers/web/gda-web-blob-op.h
index 7437622b7..66a227fd1 100644
--- a/providers/web/gda-web-blob-op.h
+++ b/providers/web/gda-web-blob-op.h
@@ -25,25 +25,13 @@
 G_BEGIN_DECLS
 
 #define GDA_TYPE_WEB_BLOB_OP            (gda_web_blob_op_get_type())
-#define GDA_WEB_BLOB_OP(obj)            (G_TYPE_CHECK_INSTANCE_CAST (obj, GDA_TYPE_WEB_BLOB_OP, 
GdaWebBlobOp))
-#define GDA_WEB_BLOB_OP_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST (klass, GDA_TYPE_WEB_BLOB_OP, 
GdaWebBlobOpClass))
-#define GDA_IS_WEB_BLOB_OP(obj)         (G_TYPE_CHECK_INSTANCE_TYPE (obj, GDA_TYPE_WEB_BLOB_OP))
-#define GDA_IS_WEB_BLOB_OP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDA_TYPE_WEB_BLOB_OP))
-
-typedef struct _GdaWebBlobOp        GdaWebBlobOp;
-typedef struct _GdaWebBlobOpClass   GdaWebBlobOpClass;
-typedef struct _GdaWebBlobOpPrivate GdaWebBlobOpPrivate;
-
-struct _GdaWebBlobOp {
-       GdaBlobOp             parent;
-       GdaWebBlobOpPrivate *priv;
-};
+
+G_DECLARE_DERIVABLE_TYPE(GdaWebBlobOp, gda_web_blob_op, GDA, WEB_BLOB_OP, GdaBlobOp)
 
 struct _GdaWebBlobOpClass {
        GdaBlobOpClass        parent_class;
 };
 
-GType         gda_web_blob_op_get_type     (void) G_GNUC_CONST;
 GdaBlobOp    *gda_web_blob_op_new          (GdaConnection *cnc);
 
 /* TO_ADD: more convenient API to create a GdaBlobOp with some specific information as argument */
diff --git a/providers/web/gda-web-ddl.c b/providers/web/gda-web-ddl.c
index 3a8e558fa..a7ccd8332 100644
--- a/providers/web/gda-web-ddl.c
+++ b/providers/web/gda-web-ddl.c
@@ -144,8 +144,7 @@ gda_web_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
                }
                g_string_append_c (string, ')');
        }
-       g_slist_foreach (pkfields, (GFunc) g_free, NULL);
-       g_slist_free (pkfields);
+       g_slist_free_full (pkfields, (GDestroyNotify) g_free);
 
        g_string_append (string, ")");
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]