[libgda] GdaPostgresHandlerBin: ported to G_DECLARE/G_DEFINE



commit 02f18da526b193c968e36d4261f5b13bed99ec14
Author: Daniel Espinosa <esodan gmail com>
Date:   Fri Apr 5 11:35:27 2019 -0600

    GdaPostgresHandlerBin: ported to G_DECLARE/G_DEFINE

 providers/postgres/gda-postgres-handler-bin.c | 80 +++++++--------------------
 providers/postgres/gda-postgres-handler-bin.h | 21 +------
 2 files changed, 23 insertions(+), 78 deletions(-)
---
diff --git a/providers/postgres/gda-postgres-handler-bin.c b/providers/postgres/gda-postgres-handler-bin.c
index b8fd8091c..fe0014fff 100644
--- a/providers/postgres/gda-postgres-handler-bin.c
+++ b/providers/postgres/gda-postgres-handler-bin.c
@@ -4,6 +4,7 @@
  * Copyright (C) 2007 - 2014 Vivien Malerba <malerba gnome-db org>
  * Copyright (C) 2009 Bas Driessen <bas driessen xobas com>
  * Copyright (C) 2010 David King <davidk openismus com>
+ * Copyright (C) 2019 Daniel Espinosa <esodan gmail com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -45,48 +46,13 @@ static gboolean     gda_postgres_handler_bin_accepts_g_type         (GdaDataHand
 
 static const gchar *gda_postgres_handler_bin_get_descr              (GdaDataHandler *dh);
 
-struct  _GdaPostgresHandlerBinPriv {
-       GdaConnection     *cnc;
-};
+typedef struct {
+       GWeakRef     cnc;
+} GdaPostgresHandlerBinPrivate;
 
-/* get a pointer to the parents to be able to call their destructor */
-static GObjectClass *parent_class = NULL;
-
-GType
-gda_postgres_handler_bin_get_type (void)
-{
-       static GType type = 0;
-
-       if (G_UNLIKELY (type == 0)) {
-               static GMutex registering;
-               static const GTypeInfo info = {
-                       sizeof (GdaPostgresHandlerBinClass),
-                       (GBaseInitFunc) NULL,
-                       (GBaseFinalizeFunc) NULL,
-                       (GClassInitFunc) gda_postgres_handler_bin_class_init,
-                       NULL,
-                       NULL,
-                       sizeof (GdaPostgresHandlerBin),
-                       0,
-                       (GInstanceInitFunc) gda_postgres_handler_bin_init,
-                       NULL
-               };      
-
-               static const GInterfaceInfo data_entry_info = {
-                       (GInterfaceInitFunc) gda_postgres_handler_bin_data_handler_init,
-                       NULL,
-                       NULL
-               };
-
-               g_mutex_lock (&registering);
-               if (type == 0) {
-                       type = g_type_register_static (G_TYPE_OBJECT, "GdaPostgresHandlerBin", &info, 0);
-                       g_type_add_interface_static (type, GDA_TYPE_DATA_HANDLER, &data_entry_info);
-               }
-               g_mutex_unlock (&registering);
-       }
-       return type;
-}
+G_DEFINE_TYPE_WITH_CODE (GdaPostgresHandlerBin, gda_postgres_handler_bin, G_TYPE_OBJECT,
+                         G_ADD_PRIVATE (GdaPostgresHandlerBin)
+                         G_IMPLEMENT_INTERFACE (GDA_TYPE_DATA_HANDLER, 
gda_postgres_handler_bin_data_handler_init))
 
 static void
 gda_postgres_handler_bin_data_handler_init (GdaDataHandlerInterface *iface)
@@ -106,8 +72,6 @@ gda_postgres_handler_bin_class_init (GdaPostgresHandlerBinClass * class)
 {
        GObjectClass   *object_class = G_OBJECT_CLASS (class);
        
-       parent_class = g_type_class_peek_parent (class);
-
        object_class->dispose = gda_postgres_handler_bin_dispose;
 }
 
@@ -115,7 +79,8 @@ static void
 gda_postgres_handler_bin_init (GdaPostgresHandlerBin * hdl)
 {
        /* Private structure */
-       hdl->priv = g_new0 (GdaPostgresHandlerBinPriv, 1);
+  GdaPostgresHandlerBinPrivate *priv = gda_postgres_handler_bin_get_instance_private (hdl);
+  g_weak_ref_init (&priv->cnc, NULL);
        g_object_set_data (G_OBJECT (hdl), "name", _("PostgresqlBin"));
        g_object_set_data (G_OBJECT (hdl), "descr", _("PostgreSQL binary representation"));
 }
@@ -129,17 +94,12 @@ gda_postgres_handler_bin_dispose (GObject   * object)
        g_return_if_fail (GDA_IS_POSTGRES_HANDLER_BIN (object));
 
        hdl = GDA_POSTGRES_HANDLER_BIN (object);
+  GdaPostgresHandlerBinPrivate *priv = gda_postgres_handler_bin_get_instance_private (hdl);
 
-       if (hdl->priv) {
-               if (hdl->priv->cnc)
-                       g_object_remove_weak_pointer (G_OBJECT (hdl->priv->cnc), (gpointer) 
&(hdl->priv->cnc));
-
-               g_free (hdl->priv);
-               hdl->priv = NULL;
-       }
+  g_weak_ref_clear (&priv->cnc);
 
        /* for the parent class */
-       parent_class->dispose (object);
+       G_OBJECT_CLASS (gda_postgres_handler_bin_parent_class)->dispose (object);
 }
 
 /**
@@ -157,11 +117,9 @@ gda_postgres_handler_bin_new (GdaConnection *cnc)
 
        obj = g_object_new (GDA_TYPE_POSTGRES_HANDLER_BIN, NULL);
        hdl = (GdaPostgresHandlerBin*) obj;
+  GdaPostgresHandlerBinPrivate *priv = gda_postgres_handler_bin_get_instance_private (hdl);
 
-       if (cnc) {
-               hdl->priv->cnc = cnc;
-               g_object_add_weak_pointer (G_OBJECT (cnc), (gpointer) &(hdl->priv->cnc));
-       }
+  g_weak_ref_set (&priv->cnc, cnc);
 
        return (GdaDataHandler *) obj;
 }
@@ -175,14 +133,18 @@ gda_postgres_handler_bin_get_sql_from_value (GdaDataHandler *iface, const GValue
        gchar *retval;
        GdaPostgresHandlerBin *hdl;
        PostgresConnectionData *cdata = NULL;
+  GdaConnection *cnc = NULL;
 
        g_return_val_if_fail (GDA_IS_POSTGRES_HANDLER_BIN (iface), NULL);
        
        hdl = (GdaPostgresHandlerBin*) (iface);
+  GdaPostgresHandlerBinPrivate *priv = gda_postgres_handler_bin_get_instance_private (hdl);
 
-       if (hdl->priv->cnc) {
-               g_return_val_if_fail (GDA_IS_CONNECTION (hdl->priv->cnc), NULL);
-               cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data_error 
(hdl->priv->cnc, NULL);
+  cnc = g_weak_ref_get (&priv->cnc);
+       if (cnc) {
+               g_return_val_if_fail (GDA_IS_CONNECTION (cnc), NULL);
+               cdata = (PostgresConnectionData*) gda_connection_internal_get_provider_data_error (cnc, NULL);
+    g_object_unref (cnc);
        }
 
        GdaBinary *data = (GdaBinary *) gda_value_get_binary ((GValue *) value);
diff --git a/providers/postgres/gda-postgres-handler-bin.h b/providers/postgres/gda-postgres-handler-bin.h
index 1b2e95861..94f34de17 100644
--- a/providers/postgres/gda-postgres-handler-bin.h
+++ b/providers/postgres/gda-postgres-handler-bin.h
@@ -2,6 +2,7 @@
  * Copyright (C) 2007 Armin Burgmeier <armin openismus com>
  * Copyright (C) 2007 Murray Cumming <murrayc murrayc com>
  * Copyright (C) 2007 - 2012 Vivien Malerba <malerba gnome-db org>
+ * Copyright (C) 2019 Daniel Espinosa <esodan gmail com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -27,24 +28,7 @@
 G_BEGIN_DECLS
 
 #define GDA_TYPE_POSTGRES_HANDLER_BIN          (gda_postgres_handler_bin_get_type())
-#define GDA_POSTGRES_HANDLER_BIN(obj)          G_TYPE_CHECK_INSTANCE_CAST (obj, 
GDA_TYPE_POSTGRES_HANDLER_BIN, GdaPostgresHandlerBin)
-#define GDA_POSTGRES_HANDLER_BIN_CLASS(klass)  G_TYPE_CHECK_CLASS_CAST (klass, 
GDA_TYPE_POSTGRES_HANDLER_BIN, GdaPostgresHandlerBinClass)
-#define GDA_IS_POSTGRES_HANDLER_BIN(obj)       G_TYPE_CHECK_INSTANCE_TYPE (obj, 
GDA_TYPE_POSTGRES_HANDLER_BIN)
-
-
-typedef struct _GdaPostgresHandlerBin      GdaPostgresHandlerBin;
-typedef struct _GdaPostgresHandlerBinClass GdaPostgresHandlerBinClass;
-typedef struct _GdaPostgresHandlerBinPriv  GdaPostgresHandlerBinPriv;
-
-
-/* struct for the object's data */
-struct _GdaPostgresHandlerBin
-{
-       GObject                     object;
-
-       GdaPostgresHandlerBinPriv  *priv;
-};
-
+G_DECLARE_DERIVABLE_TYPE (GdaPostgresHandlerBin, gda_postgres_handler_bin, GDA, POSTGRES_HANDLER_BIN, 
GObject)
 /* struct for the object's class */
 struct _GdaPostgresHandlerBinClass
 {
@@ -52,7 +36,6 @@ struct _GdaPostgresHandlerBinClass
 };
 
 
-GType           gda_postgres_handler_bin_get_type      (void) G_GNUC_CONST;
 GdaDataHandler *gda_postgres_handler_bin_new           (GdaConnection *cnc);
 
 G_END_DECLS


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