[gimp] libgimp: add some const to input parameters, like const GimpValueArray*



commit 2599c6e0716a042d14d1a076210d9c0ffc45c9f2
Author: Michael Natterer <mitch gimp org>
Date:   Wed Aug 7 00:02:29 2019 +0200

    libgimp: add some const to input parameters, like const GimpValueArray*
    
    for procedure arguments. This implies creating a new value array in
    gimp_procedure_run() if the passed array is too short, instead of
    just appending to the passed array, which was ugly anyway.

 app/plug-in/gimpgpparams.c  |   4 +-
 libgimp/gimpgpparams-body.c |  28 ++++-----
 libgimp/gimpgpparams.c      |   4 +-
 libgimp/gimpgpparams.h      |  48 ++++++++--------
 libgimp/gimplegacy.c        |   4 +-
 libgimp/gimplegacy.h        |   4 +-
 libgimp/gimppdb.c           |   6 +-
 libgimp/gimppdb.h           |  28 ++++-----
 libgimp/gimpprocedure.c     |  62 +++++++++++++-------
 libgimp/gimpprocedure.h     | 134 ++++++++++++++++++++++----------------------
 10 files changed, 173 insertions(+), 149 deletions(-)
---
diff --git a/app/plug-in/gimpgpparams.c b/app/plug-in/gimpgpparams.c
index 236db44a8f..b266d28951 100644
--- a/app/plug-in/gimpgpparams.c
+++ b/app/plug-in/gimpgpparams.c
@@ -49,8 +49,8 @@
 #include "../../libgimp/gimpgpparams-body.c"
 
 GParamSpec *
-_gimp_gp_param_def_to_param_spec (gpointer    gimp,
-                                  GPParamDef *param_def)
+_gimp_gp_param_def_to_param_spec (gpointer          gimp,
+                                  const GPParamDef *param_def)
 {
   const gchar *name  = param_def->name;
   const gchar *nick  = param_def->nick;
diff --git a/libgimp/gimpgpparams-body.c b/libgimp/gimpgpparams-body.c
index 0c76f410dd..165215c7cf 100644
--- a/libgimp/gimpgpparams-body.c
+++ b/libgimp/gimpgpparams-body.c
@@ -168,11 +168,11 @@ _gimp_param_spec_to_gp_param_def (GParamSpec *pspec,
 }
 
 void
-_gimp_gp_param_to_value (gpointer  gimp,
-                         GPParam  *param,
-                         GType     type,
-                         GValue   *value,
-                         gboolean  full_copy)
+_gimp_gp_param_to_value (gpointer        gimp,
+                         const GPParam  *param,
+                         GType           type,
+                         GValue         *value,
+                         gboolean        full_copy)
 {
   g_return_if_fail (param != NULL);
   g_return_if_fail (value != NULL);
@@ -327,13 +327,13 @@ _gimp_gp_param_to_value (gpointer  gimp,
 }
 
 GimpValueArray *
-_gimp_gp_params_to_value_array (gpointer     gimp,
-                                GParamSpec **pspecs,
-                                gint         n_pspecs,
-                                GPParam     *params,
-                                gint         n_params,
-                                gboolean     return_values,
-                                gboolean     full_copy)
+_gimp_gp_params_to_value_array (gpointer        gimp,
+                                GParamSpec    **pspecs,
+                                gint            n_pspecs,
+                                const GPParam  *params,
+                                gint            n_params,
+                                gboolean        return_values,
+                                gboolean        full_copy)
 {
   GimpValueArray *args;
   gint            i;
@@ -570,8 +570,8 @@ _gimp_value_to_gp_param (const GValue *value,
 }
 
 GPParam *
-_gimp_value_array_to_gp_params (GimpValueArray  *args,
-                                gboolean         full_copy)
+_gimp_value_array_to_gp_params (const GimpValueArray  *args,
+                                gboolean               full_copy)
 {
   GPParam *params;
   gint     length;
diff --git a/libgimp/gimpgpparams.c b/libgimp/gimpgpparams.c
index 8ee9e7a4c6..469a82e64d 100644
--- a/libgimp/gimpgpparams.c
+++ b/libgimp/gimpgpparams.c
@@ -40,8 +40,8 @@
 #include "gimpgpparams-body.c"
 
 GParamSpec *
-_gimp_gp_param_def_to_param_spec (gpointer    gimp,
-                                  GPParamDef *param_def)
+_gimp_gp_param_def_to_param_spec (gpointer          gimp,
+                                  const GPParamDef *param_def)
 {
   const gchar *name  = param_def->name;
   const gchar *nick  = param_def->nick;
diff --git a/libgimp/gimpgpparams.h b/libgimp/gimpgpparams.h
index 637edd1d39..f1a0cf8f47 100644
--- a/libgimp/gimpgpparams.h
+++ b/libgimp/gimpgpparams.h
@@ -25,30 +25,30 @@
 G_BEGIN_DECLS
 
 
-GParamSpec     * _gimp_gp_param_def_to_param_spec (gpointer         gimp,
-                                                   GPParamDef      *param_def);
-
-void             _gimp_param_spec_to_gp_param_def (GParamSpec      *pspec,
-                                                   GPParamDef      *param_def);
-
-void             _gimp_gp_param_to_value          (gpointer         gimp,
-                                                   GPParam         *param,
-                                                   GType            type,
-                                                   GValue          *value,
-                                                   gboolean         full_copy);
-GimpValueArray * _gimp_gp_params_to_value_array   (gpointer         gimp,
-                                                   GParamSpec     **pspecs,
-                                                   gint             n_pspecs,
-                                                   GPParam         *params,
-                                                   gint             n_params,
-                                                   gboolean         return_values,
-                                                   gboolean         full_copy);
-
-void             _gimp_value_to_gp_param          (const GValue    *value,
-                                                   GPParam         *param,
-                                                   gboolean         full_copy);
-GPParam        * _gimp_value_array_to_gp_params   (GimpValueArray  *args,
-                                                   gboolean         full_copy);
+GParamSpec     * _gimp_gp_param_def_to_param_spec (gpointer              gimp,
+                                                   const GPParamDef     *param_def);
+
+void             _gimp_param_spec_to_gp_param_def (GParamSpec           *pspec,
+                                                   GPParamDef           *param_def);
+
+void             _gimp_gp_param_to_value          (gpointer              gimp,
+                                                   const GPParam        *param,
+                                                   GType                 type,
+                                                   GValue               *value,
+                                                   gboolean              full_copy);
+GimpValueArray * _gimp_gp_params_to_value_array   (gpointer              gimp,
+                                                   GParamSpec          **pspecs,
+                                                   gint                  n_pspecs,
+                                                   const GPParam        *params,
+                                                   gint                  n_params,
+                                                   gboolean              return_values,
+                                                   gboolean              full_copy);
+
+void             _gimp_value_to_gp_param          (const GValue         *value,
+                                                   GPParam              *param,
+                                                   gboolean              full_copy);
+GPParam        * _gimp_value_array_to_gp_params   (const GimpValueArray *args,
+                                                   gboolean              full_copy);
 
 
 G_END_DECLS
diff --git a/libgimp/gimplegacy.c b/libgimp/gimplegacy.c
index 59bf3ff043..82000f4b79 100644
--- a/libgimp/gimplegacy.c
+++ b/libgimp/gimplegacy.c
@@ -787,8 +787,8 @@ gimp_run_procedure2 (const gchar     *name,
 }
 
 GimpValueArray *
-gimp_run_procedure_array (const gchar    *name,
-                          GimpValueArray *arguments)
+gimp_run_procedure_array (const gchar          *name,
+                          const GimpValueArray *arguments)
 {
   GPProcRun        proc_run;
   GPProcReturn    *proc_return;
diff --git a/libgimp/gimplegacy.h b/libgimp/gimplegacy.h
index c55a8e60be..473ada8e81 100644
--- a/libgimp/gimplegacy.h
+++ b/libgimp/gimplegacy.h
@@ -268,8 +268,8 @@ GimpParam    * gimp_run_procedure2      (const gchar     *name,
 /* Run a procedure in the procedure database. The parameters are
  *  specified as a GimpValueArray, so are the return values.
  */
-GimpValueArray * gimp_run_procedure_array (const gchar    *name,
-                                           GimpValueArray *arguments);
+GimpValueArray * gimp_run_procedure_array (const gchar          *name,
+                                           const GimpValueArray *arguments);
 
 /* Destroy the an array of parameters. This is useful for
  *  destroying the return values returned by a call to
diff --git a/libgimp/gimppdb.c b/libgimp/gimppdb.c
index af7a3ac909..8764152656 100644
--- a/libgimp/gimppdb.c
+++ b/libgimp/gimppdb.c
@@ -246,9 +246,9 @@ gimp_pdb_run_procedure_valist (GimpPDB     *pdb,
  * Returns: (transfer full): the returned values for the procedure call.
  */
 GimpValueArray *
-gimp_pdb_run_procedure_array (GimpPDB        *pdb,
-                              const gchar    *procedure_name,
-                              GimpValueArray *arguments)
+gimp_pdb_run_procedure_array (GimpPDB              *pdb,
+                              const gchar          *procedure_name,
+                              const GimpValueArray *arguments)
 {
   GPProcRun        proc_run;
   GPProcReturn    *proc_return;
diff --git a/libgimp/gimppdb.h b/libgimp/gimppdb.h
index a94cb2367b..b589755559 100644
--- a/libgimp/gimppdb.h
+++ b/libgimp/gimppdb.h
@@ -67,23 +67,23 @@ struct _GimpPDBClass
 
 GType            gimp_pdb_get_type             (void) G_GNUC_CONST;
 
-gboolean         gimp_pdb_procedure_exists     (GimpPDB        *pdb,
-                                                const gchar    *procedure_name);
+gboolean         gimp_pdb_procedure_exists     (GimpPDB              *pdb,
+                                                const gchar          *procedure_name);
 
-GimpProcedure  * gimp_pdb_lookup_procedure     (GimpPDB        *pdb,
-                                                const gchar    *procedure_name);
+GimpProcedure  * gimp_pdb_lookup_procedure     (GimpPDB              *pdb,
+                                                const gchar          *procedure_name);
 
-GimpValueArray * gimp_pdb_run_procedure        (GimpPDB        *pdb,
-                                                const gchar    *procedure_name,
-                                                GType           first_type,
+GimpValueArray * gimp_pdb_run_procedure        (GimpPDB              *pdb,
+                                                const gchar          *procedure_name,
+                                                GType                 first_type,
                                                 ...);
-GimpValueArray * gimp_pdb_run_procedure_valist (GimpPDB        *pdb,
-                                                const gchar    *procedure_name,
-                                                GType           first_type,
-                                                va_list         args);
-GimpValueArray * gimp_pdb_run_procedure_array  (GimpPDB        *pdb,
-                                                const gchar    *procedure_name,
-                                                GimpValueArray *arguments);
+GimpValueArray * gimp_pdb_run_procedure_valist (GimpPDB              *pdb,
+                                                const gchar          *procedure_name,
+                                                GType                 first_type,
+                                                va_list               args);
+GimpValueArray * gimp_pdb_run_procedure_array  (GimpPDB              *pdb,
+                                                const gchar          *procedure_name,
+                                                const GimpValueArray *arguments);
 
 
 /*  Cruft API  */
diff --git a/libgimp/gimpprocedure.c b/libgimp/gimpprocedure.c
index 02712983ae..771e599430 100644
--- a/libgimp/gimpprocedure.c
+++ b/libgimp/gimpprocedure.c
@@ -95,7 +95,7 @@ static GimpValueArray *
 static gboolean   gimp_procedure_validate_args (GimpProcedure        *procedure,
                                                 GParamSpec          **param_specs,
                                                 gint                  n_param_specs,
-                                                GimpValueArray       *args,
+                                                const GimpValueArray *args,
                                                 gboolean              return_vals,
                                                 GError              **error);
 
@@ -1042,8 +1042,8 @@ gimp_procedure_new_return_values (GimpProcedure     *procedure,
  * Since: 3.0
  **/
 GimpValueArray *
-gimp_procedure_run (GimpProcedure  *procedure,
-                    GimpValueArray *args)
+gimp_procedure_run (GimpProcedure        *procedure,
+                    const GimpValueArray *args)
 {
   GimpValueArray *return_vals;
   GError         *error = NULL;
@@ -1066,19 +1066,43 @@ gimp_procedure_run (GimpProcedure  *procedure,
     }
 
   /*  add missing args with default values  */
-  for (i = gimp_value_array_length (args); i < procedure->priv->n_args; i++)
+  if (gimp_value_array_length (args) < procedure->priv->n_args)
     {
-      GParamSpec *pspec = procedure->priv->args[i];
-      GValue      value = G_VALUE_INIT;
+      GimpValueArray *complete = gimp_value_array_new (0);
 
-      g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (pspec));
-      g_param_value_set_default (pspec, &value);
-      gimp_value_array_append (args, &value);
-      g_value_unset (&value);
-    }
+      for (i = 0; i < procedure->priv->n_args; i++)
+        {
+          GParamSpec *pspec = procedure->priv->args[i];
+          GValue      value = G_VALUE_INIT;
+
+          g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (pspec));
+
+          if (i < gimp_value_array_length (args))
+            {
+              GValue *orig = gimp_value_array_index (args, i);
 
-  /*  call the procedure  */
-  return_vals = GIMP_PROCEDURE_GET_CLASS (procedure)->run (procedure, args);
+              g_value_copy (orig, &value);
+            }
+          else
+            {
+              g_param_value_set_default (pspec, &value);
+            }
+
+          gimp_value_array_append (complete, &value);
+          g_value_unset (&value);
+        }
+
+      /*  call the procedure  */
+      return_vals = GIMP_PROCEDURE_GET_CLASS (procedure)->run (procedure,
+                                                               complete);
+      gimp_value_array_unref (complete);
+    }
+  else
+    {
+      /*  call the procedure  */
+      return_vals = GIMP_PROCEDURE_GET_CLASS (procedure)->run (procedure,
+                                                               args);
+    }
 
   if (! return_vals)
     {
@@ -1127,12 +1151,12 @@ gimp_procedure_extension_ready (GimpProcedure *procedure)
 /*  private functions  */
 
 static gboolean
-gimp_procedure_validate_args (GimpProcedure  *procedure,
-                              GParamSpec    **param_specs,
-                              gint            n_param_specs,
-                              GimpValueArray *args,
-                              gboolean        return_vals,
-                              GError        **error)
+gimp_procedure_validate_args (GimpProcedure         *procedure,
+                              GParamSpec           **param_specs,
+                              gint                   n_param_specs,
+                              const GimpValueArray  *args,
+                              gboolean               return_vals,
+                              GError               **error)
 {
   gint i;
 
diff --git a/libgimp/gimpprocedure.h b/libgimp/gimpprocedure.h
index 748ba04724..5f63ecdd54 100644
--- a/libgimp/gimpprocedure.h
+++ b/libgimp/gimpprocedure.h
@@ -88,79 +88,79 @@ struct _GimpProcedureClass
 
 GType            gimp_procedure_get_type           (void) G_GNUC_CONST;
 
-GimpProcedure  * gimp_procedure_new                (GimpPlugIn        *plug_in,
-                                                    const gchar       *name,
-                                                    GimpPDBProcType    proc_type,
-                                                    GimpRunFunc        run_func,
-                                                    gpointer           run_data,
-                                                    GDestroyNotify     run_data_destroy);
-
-GimpPlugIn     * gimp_procedure_get_plug_in        (GimpProcedure     *procedure);
-const gchar    * gimp_procedure_get_name           (GimpProcedure     *procedure);
-GimpPDBProcType  gimp_procedure_get_proc_type      (GimpProcedure     *procedure);
-
-void             gimp_procedure_set_image_types    (GimpProcedure     *procedure,
-                                                    const gchar       *image_types);
-const gchar    * gimp_procedure_get_image_types    (GimpProcedure     *procedure);
-
-void             gimp_procedure_set_menu_label     (GimpProcedure     *procedure,
-                                                    const gchar       *menu_label);
-const gchar    * gimp_procedure_get_menu_label     (GimpProcedure     *procedure);
-
-void             gimp_procedure_add_menu_path      (GimpProcedure     *procedure,
-                                                    const gchar       *menu_path);
-GList          * gimp_procedure_get_menu_paths     (GimpProcedure     *procedure);
-
-void             gimp_procedure_set_documentation  (GimpProcedure     *procedure,
-                                                    const gchar       *blurb,
-                                                    const gchar       *help,
-                                                    const gchar       *help_id);
-const gchar    * gimp_procedure_get_blurb          (GimpProcedure     *procedure);
-const gchar    * gimp_procedure_get_help           (GimpProcedure     *procedure);
-const gchar    * gimp_procedure_get_help_id        (GimpProcedure     *procedure);
-
-void             gimp_procedure_set_attribution    (GimpProcedure     *procedure,
-                                                    const gchar       *authors,
-                                                    const gchar       *copyright,
-                                                    const gchar       *date);
-const gchar    * gimp_procedure_get_authors        (GimpProcedure     *procedure);
-const gchar    * gimp_procedure_get_copyright      (GimpProcedure     *procedure);
-const gchar    * gimp_procedure_get_date           (GimpProcedure     *procedure);
-
-void             gimp_procedure_set_icon           (GimpProcedure     *procedure,
-                                                    GimpIconType       icon_type,
-                                                    const guint8      *icon_data);
-GimpIconType     gimp_procedure_get_icon           (GimpProcedure     *procedure,
-                                                    const guint8     **icon_data,
-                                                    gint              *icon_data_length);
-
-void             gimp_procedure_add_argument       (GimpProcedure     *procedure,
-                                                    GParamSpec        *pspec);
+GimpProcedure  * gimp_procedure_new                (GimpPlugIn           *plug_in,
+                                                    const gchar          *name,
+                                                    GimpPDBProcType       proc_type,
+                                                    GimpRunFunc           run_func,
+                                                    gpointer              run_data,
+                                                    GDestroyNotify        run_data_destroy);
+
+GimpPlugIn     * gimp_procedure_get_plug_in        (GimpProcedure        *procedure);
+const gchar    * gimp_procedure_get_name           (GimpProcedure        *procedure);
+GimpPDBProcType  gimp_procedure_get_proc_type      (GimpProcedure        *procedure);
+
+void             gimp_procedure_set_image_types    (GimpProcedure        *procedure,
+                                                    const gchar          *image_types);
+const gchar    * gimp_procedure_get_image_types    (GimpProcedure        *procedure);
+
+void             gimp_procedure_set_menu_label     (GimpProcedure        *procedure,
+                                                    const gchar          *menu_label);
+const gchar    * gimp_procedure_get_menu_label     (GimpProcedure        *procedure);
+
+void             gimp_procedure_add_menu_path      (GimpProcedure        *procedure,
+                                                    const gchar          *menu_path);
+GList          * gimp_procedure_get_menu_paths     (GimpProcedure        *procedure);
+
+void             gimp_procedure_set_documentation  (GimpProcedure        *procedure,
+                                                    const gchar          *blurb,
+                                                    const gchar          *help,
+                                                    const gchar          *help_id);
+const gchar    * gimp_procedure_get_blurb          (GimpProcedure        *procedure);
+const gchar    * gimp_procedure_get_help           (GimpProcedure        *procedure);
+const gchar    * gimp_procedure_get_help_id        (GimpProcedure        *procedure);
+
+void             gimp_procedure_set_attribution    (GimpProcedure        *procedure,
+                                                    const gchar          *authors,
+                                                    const gchar          *copyright,
+                                                    const gchar          *date);
+const gchar    * gimp_procedure_get_authors        (GimpProcedure        *procedure);
+const gchar    * gimp_procedure_get_copyright      (GimpProcedure        *procedure);
+const gchar    * gimp_procedure_get_date           (GimpProcedure        *procedure);
+
+void             gimp_procedure_set_icon           (GimpProcedure        *procedure,
+                                                    GimpIconType          icon_type,
+                                                    const guint8         *icon_data);
+GimpIconType     gimp_procedure_get_icon           (GimpProcedure        *procedure,
+                                                    const guint8        **icon_data,
+                                                    gint                 *icon_data_length);
+
+void             gimp_procedure_add_argument       (GimpProcedure        *procedure,
+                                                    GParamSpec           *pspec);
 void             gimp_procedure_add_argument_from_property
-                                                   (GimpProcedure     *procedure,
-                                                    GObject           *config,
-                                                    const gchar       *prop_name);
-void             gimp_procedure_add_return_value   (GimpProcedure     *procedure,
-                                                    GParamSpec        *pspec);
+                                                   (GimpProcedure        *procedure,
+                                                    GObject              *config,
+                                                    const gchar          *prop_name);
+void             gimp_procedure_add_return_value   (GimpProcedure        *procedure,
+                                                    GParamSpec           *pspec);
 void             gimp_procedure_add_return_value_from_property
-                                                   (GimpProcedure     *procedure,
-                                                    GObject           *config,
-                                                    const gchar       *prop_name);
+                                                   (GimpProcedure        *procedure,
+                                                    GObject              *config,
+                                                    const gchar          *prop_name);
 
-GParamSpec    ** gimp_procedure_get_arguments      (GimpProcedure     *procedure,
-                                                    gint              *n_arguments);
-GParamSpec    ** gimp_procedure_get_return_values  (GimpProcedure     *procedure,
-                                                    gint              *n_return_values);
+GParamSpec    ** gimp_procedure_get_arguments      (GimpProcedure        *procedure,
+                                                    gint                 *n_arguments);
+GParamSpec    ** gimp_procedure_get_return_values  (GimpProcedure        *procedure,
+                                                    gint                 *n_return_values);
 
-GimpValueArray * gimp_procedure_new_arguments      (GimpProcedure     *procedure);
-GimpValueArray * gimp_procedure_new_return_values  (GimpProcedure     *procedure,
-                                                    GimpPDBStatusType  status,
-                                                    GError            *error);
+GimpValueArray * gimp_procedure_new_arguments      (GimpProcedure        *procedure);
+GimpValueArray * gimp_procedure_new_return_values  (GimpProcedure        *procedure,
+                                                    GimpPDBStatusType     status,
+                                                    GError               *error);
 
-GimpValueArray * gimp_procedure_run                (GimpProcedure     *procedure,
-                                                    GimpValueArray    *args);
+GimpValueArray * gimp_procedure_run                (GimpProcedure        *procedure,
+                                                    const GimpValueArray *args);
 
-void             gimp_procedure_extension_ready    (GimpProcedure     *procedure);
+void             gimp_procedure_extension_ready    (GimpProcedure        *procedure);
 
 
 G_END_DECLS


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