[gnumeric] Introspection fixes



commit 65664eca4206875a392852501e007d7534bf068e
Author: Morten Welinder <terra gnome org>
Date:   Tue Feb 16 09:17:06 2016 -0500

    Introspection fixes

 src/complex.c  |   21 +++++++++++++++++++++
 src/complex.h  |    6 ++++--
 src/sf-gamma.c |   50 ++++++++++++++++++++++++++++++++++++--------------
 src/sf-gamma.h |    4 ++--
 4 files changed, 63 insertions(+), 18 deletions(-)
---
diff --git a/src/complex.c b/src/complex.c
index b14ec1c..ca88221 100644
--- a/src/complex.c
+++ b/src/complex.c
@@ -178,3 +178,24 @@ gnm_complex_invalid_p (gnm_complex const *src)
 }
 
 /* ------------------------------------------------------------------------- */
+
+static gnm_complex *
+dup_complex (gnm_complex *src)
+{
+       return g_memdup (src, sizeof (*src));
+}
+
+GType
+gnm_complex_get_type (void)
+{
+       static GType t = 0;
+
+       if (t == 0)
+               t = g_boxed_type_register_static
+                       ("gnm_complex",
+                        (GBoxedCopyFunc)dup_complex,
+                        (GBoxedFreeFunc)g_free);
+       return t;
+}
+
+/* ------------------------------------------------------------------------- */
diff --git a/src/complex.h b/src/complex.h
index ee49e04..e9c1b0e 100644
--- a/src/complex.h
+++ b/src/complex.h
@@ -9,7 +9,7 @@
 G_BEGIN_DECLS
 
 #ifdef GNM_WITH_LONG_DOUBLE
-#define gnm_complex GOComplexl
+typedef GOComplexl gnm_complex;
 #define gnm_complex_init go_complex_initl
 #define gnm_complex_add go_complex_addl
 #define gnm_complex_sub go_complex_subl
@@ -34,7 +34,7 @@ G_BEGIN_DECLS
 #define gnm_complex_from_polar go_complex_from_polarl
 #define gnm_complex_from_polar_pi go_complex_from_polar_pil
 #else
-#define gnm_complex GOComplex
+typedef GOComplex gnm_complex;
 #define gnm_complex_init go_complex_init
 #define gnm_complex_add go_complex_add
 #define gnm_complex_sub go_complex_sub
@@ -68,6 +68,8 @@ int gnm_complex_from_string (gnm_complex *dst, char const *src, char *imunit);
 
 int gnm_complex_invalid_p (gnm_complex const *src);
 
+GType gnm_complex_get_type (void);
+
 /* ------------------------------------------------------------------------- */
 // Value interface
 
diff --git a/src/sf-gamma.c b/src/sf-gamma.c
index a547ddc..5e3bae2 100644
--- a/src/sf-gamma.c
+++ b/src/sf-gamma.c
@@ -1249,18 +1249,24 @@ static const guint32 lanczos_denom[G_N_ELEMENTS(lanczos_num)] = {
        13339535, 2637558, 357423, 32670, 1925, 66, 1
 };
 
+/**
+ * gnm_complex_gamma:
+ * @z: a complex number
+ *
+ * Returns: (transfer full): the Gamma function evaluated at @z.
+ */
 gnm_complex
-gnm_complex_gamma (gnm_complex src)
+gnm_complex_gamma (gnm_complex z)
 {
-       if (GNM_CREALP (src)) {
-               return GNM_CREAL (gnm_gamma (src.re));
-       } else if (src.re < 0) {
+       if (GNM_CREALP (z)) {
+               return GNM_CREAL (gnm_gamma (z.re));
+       } else if (z.re < 0) {
                /* Gamma(z) = pi / (sin(pi*z) * Gamma(-z+1)) */
-               gnm_complex b = GNM_CMAKE (M_PIgnum * gnm_fmod (src.re, 2),
-                                          M_PIgnum * src.im);
+               gnm_complex b = GNM_CMAKE (M_PIgnum * gnm_fmod (z.re, 2),
+                                          M_PIgnum * z.im);
                /* Hmm... sin overflows when b.im is large.  */
                return GNM_CDIV (GNM_CREAL (M_PIgnum),
-                                GNM_CMUL (gnm_complex_fact (GNM_CNEG (src)), GNM_CSIN (b)));
+                                GNM_CMUL (gnm_complex_fact (GNM_CNEG (z)), GNM_CSIN (b)));
        } else {
                gnm_complex zmh, f, p, q;
                int i;
@@ -1269,13 +1275,13 @@ gnm_complex_gamma (gnm_complex src)
                p = GNM_CREAL (lanczos_num[i]);
                q = GNM_CREAL (lanczos_denom[i]);
                while (--i >= 0) {
-                       p = GNM_CMUL (p, src);
+                       p = GNM_CMUL (p, z);
                        p.re += lanczos_num[i];
-                       q = GNM_CMUL (q, src);
+                       q = GNM_CMUL (q, z);
                        q.re += lanczos_denom[i];
                }
 
-               zmh = GNM_CMAKE (src.re - 0.5, src.im);
+               zmh = GNM_CMAKE (z.re - 0.5, z.im);
                f = GNM_CPOW (GNM_CADD (zmh, GNM_CREAL (lanczos_g)), GNM_CSCALE (zmh, 0.5));
 
                return GNM_CMUL4 (f, GNM_CEXP (GNM_CNEG (zmh)), f, GNM_CDIV (p, q));
@@ -1284,15 +1290,21 @@ gnm_complex_gamma (gnm_complex src)
 
 /* ------------------------------------------------------------------------- */
 
+/**
+ * gnm_complex_fact:
+ * @z: a complex number
+ *
+ * Returns: (transfer full): the factorial function evaluated at @z.
+ */
 gnm_complex
-gnm_complex_fact (gnm_complex src)
+gnm_complex_fact (gnm_complex z)
 {
-       if (GNM_CREALP (src)) {
-               return GNM_CREAL (gnm_fact (src.re));
+       if (GNM_CREALP (z)) {
+               return GNM_CREAL (gnm_fact (z.re));
        } else {
                // This formula is valid for all arguments except zero
                // which we conveniently handled above.
-               return GNM_CMUL (gnm_complex_gamma (src), src);
+               return GNM_CMUL (gnm_complex_gamma (z), z);
        }
 }
 
@@ -1506,6 +1518,16 @@ fixup_upper_real (gnm_complex *res, gnm_complex a, gnm_complex z)
        }
 }
 
+/**
+ * gnm_complex_igamma:
+ * @a: a complex number
+ * @z: a complex number
+ * @lower: determines if upper or lower incomplete gamma is desired.
+ * @regularized: determines if the result should be normalized by Gamma(@a).
+ *
+ * Returns: (transfer full): the incomplete gamma function evaluated at
+ * @a and @z.
+ */
 gnm_complex
 gnm_complex_igamma (gnm_complex a, gnm_complex z,
                    gboolean lower, gboolean regularized)
diff --git a/src/sf-gamma.h b/src/sf-gamma.h
index cb0c85e..bfee0b7 100644
--- a/src/sf-gamma.h
+++ b/src/sf-gamma.h
@@ -10,8 +10,8 @@ gnm_float stirlerr(gnm_float n);
 gnm_float gnm_gamma (gnm_float x);
 gnm_float gnm_fact (gnm_float x);
 int       qfactf (gnm_float x, GnmQuad *mant, int *exp2);
-gnm_complex gnm_complex_gamma (gnm_complex src);
-gnm_complex gnm_complex_fact (gnm_complex src);
+gnm_complex gnm_complex_gamma (gnm_complex z);
+gnm_complex gnm_complex_fact (gnm_complex z);
 gnm_complex gnm_complex_igamma (gnm_complex a, gnm_complex z,
                                gboolean lower, gboolean regularized);
 


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