From d903eb45cd92aed8ffb09fe1d5a953274707a76b Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Tue, 29 Mar 2022 17:50:00 +0200 Subject: [PATCH] Linking failed on openSUSE Linux gcc: make the inline functions static to allow linking --- src/maths/dense/denseinlines.h | 103 ++++++++++++++++----------------- 1 file changed, 50 insertions(+), 53 deletions(-) diff --git a/src/maths/dense/denseinlines.h b/src/maths/dense/denseinlines.h index 23d05f199..3d9e9dd3e 100644 --- a/src/maths/dense/denseinlines.h +++ b/src/maths/dense/denseinlines.h @@ -1,39 +1,39 @@ #include - inline void setcplx(cplx* d, double r, double i); - inline void cmultc(cplx* res, cplx a, cplx b); - inline cplx cmultco(cplx a, cplx b); - inline cplx cmultdo(cplx a, double d); - inline void cmultd(cplx* res, cplx a, double d); - inline void caddc(cplx* res, cplx a, cplx b); - inline cplx caddco(cplx a, cplx b); - inline void caddd(cplx* res, cplx a, double d); - inline void csubc(cplx* res, cplx a, cplx b); - inline cplx csubco(cplx a, cplx b); - inline void csubd(cplx* res, cplx a, double d); - inline double cmodinv(cplx a); - inline double cmodsqr(cplx a); + static inline void setcplx(cplx* d, double r, double i); + static inline void cmultc(cplx* res, cplx a, cplx b); + static inline cplx cmultco(cplx a, cplx b); + static inline cplx cmultdo(cplx a, double d); + static inline void cmultd(cplx* res, cplx a, double d); + static inline void caddc(cplx* res, cplx a, cplx b); + static inline cplx caddco(cplx a, cplx b); + static inline void caddd(cplx* res, cplx a, double d); + static inline void csubc(cplx* res, cplx a, cplx b); + static inline cplx csubco(cplx a, cplx b); + static inline void csubd(cplx* res, cplx a, double d); + static inline double cmodinv(cplx a); + static inline double cmodsqr(cplx a); - inline int ciszero(cplx a); - inline cplx cinv(cplx a); - inline cplx conju(cplx a); + static inline int ciszero(cplx a); + static inline cplx cinv(cplx a); + static inline cplx conju(cplx a); - inline double cmodu(cplx a); - inline cplx cdivco(cplx a, cplx b); + static inline double cmodu(cplx a); + static inline cplx cdivco(cplx a, cplx b); - inline void setcplx(cplx* d, double r, double i) + static inline void setcplx(cplx* d, double r, double i) { d->re = r; d->im = i; } - inline void cmultc(cplx* res, cplx a, cplx b) + static inline void cmultc(cplx* res, cplx a, cplx b) { res->re = a.re * b.re - a.im * b.im; res->im = a.im * b.re + a.re * b.im; } - inline cplx cmultco(cplx a, cplx b) + static inline cplx cmultco(cplx a, cplx b) { cplx res; res.re = a.re * b.re - a.im * b.im; @@ -41,39 +41,27 @@ return res; } - - - inline cplx cdivco(cplx a, cplx b) - { - cplx res; - double dmod = cmodinv(b); - - res.re = (a.re * b.re + a.im * b.im) * dmod; - res.im = (a.im * b.re - a.re * b.im) * dmod; - return res; - } - - - inline cplx cmultdo(cplx a, double d) + static inline cplx cmultdo(cplx a, double d) { cplx res; res.re = a.re * d; res.im = a.im * d; return res; } - inline void cmultd(cplx* res, cplx a, double d) + + static inline void cmultd(cplx* res, cplx a, double d) { res->re = a.re * d; res->im = a.im * d; } - inline void caddc(cplx* res, cplx a, cplx b) + static inline void caddc(cplx* res, cplx a, cplx b) { res->re = a.re + b.re; res->im = a.im + b.im; } - inline cplx caddco(cplx a, cplx b) + static inline cplx caddco(cplx a, cplx b) { cplx res; res.re = a.re + b.re; @@ -81,19 +69,18 @@ return res; } - - inline void caddd(cplx* res, cplx a, double d) + static inline void caddd(cplx* res, cplx a, double d) { res->re = a.re + d; } - inline void csubc(cplx* res, cplx a, cplx b) + static inline void csubc(cplx* res, cplx a, cplx b) { res->re = a.re - b.re; res->im = a.im - b.im; } - inline cplx csubco(cplx a, cplx b) + static inline cplx csubco(cplx a, cplx b) { cplx res; res.re = a.re - b.re; @@ -101,30 +88,32 @@ return res; } - inline void csubd(cplx* res, cplx a, double d) + static inline void csubd(cplx* res, cplx a, double d) { res->re = a.re - d; } - inline double cmodinv(cplx a) - { - return 1.0 / cmodsqr(a); - } - - inline double cmodsqr(cplx a) + static inline double cmodsqr(cplx a) { return (a.re * a.re + a.im * a.im); } - inline double cmodu(cplx a) + static inline double cmodinv(cplx a) + { + return 1.0 / cmodsqr(a); + } + + static inline double cmodu(cplx a) { return sqrt(cmodsqr(a)); } - inline int ciszero(cplx a) + + static inline int ciszero(cplx a) { return (a.re == 0) && (a.im == 0); } - inline cplx cinv(cplx a) + + static inline cplx cinv(cplx a) { cplx res; double cpmod = cmodinv(a); @@ -133,7 +122,7 @@ return res; } - inline cplx conju(cplx a) + static inline cplx conju(cplx a) { cplx res; res.re = a.re; @@ -141,4 +130,12 @@ return res; } + static inline cplx cdivco(cplx a, cplx b) + { + cplx res; + double dmod = cmodinv(b); + res.re = (a.re * b.re + a.im * b.im) * dmod; + res.im = (a.im * b.re - a.re * b.im) * dmod; + return res; + }