Mercurial > hg > x
changeset 3:42c078b19e9a
* Replace null-pointer hack with use of standard macro offsetof(struct,member)
author | Chris Cannam |
---|---|
date | Tue, 05 Oct 2010 16:18:52 +0100 |
parents | fc19d45615d1 |
children | 92ee28024c05 |
files | procedures.cpp sinest.cpp |
diffstat | 2 files changed, 11 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/procedures.cpp Tue Oct 05 11:04:40 2010 +0100 +++ b/procedures.cpp Tue Oct 05 16:18:52 2010 +0100 @@ -2,6 +2,7 @@ #include <math.h> #include <string.h> +#include <stddef.h> #include "procedures.h" #include "matrix.h" #include "opt.h" @@ -1424,8 +1425,8 @@ int HxPeak2(double*& hps, double*& vhps, double (*F)(double, void*), double (*dF)(double, void*), double(*ddF)(double, void*), void* params, double st, double en, double epf) { struct l_hx {int N; union {double B; struct {int k1; int k2;};}; cdouble* x; double dhxpeak; double hxpeak;} *p=(l_hx *)params; - int dfshift=int(&((l_hx*)0)->dhxpeak); - int fshift=int(&((l_hx*)0)->hxpeak); + int dfshift=offsetof(l_hx, dhxpeak); + int fshift=offsetof(l_hx, hxpeak); double B=p->B; int count=0; @@ -2411,7 +2412,7 @@ double Romberg(int n, double(*f)(double, void*), double a, double b, void* params) { int np=1; - double* r1=new double[n+1];. + double* r1=new double[n+1]; double* r2=new double[n+1]; double h=b-a, *swp; r1[1]=h*(f(a, params)+f(b, params))/2;
--- a/sinest.cpp Tue Oct 05 11:04:40 2010 +0100 +++ b/sinest.cpp Tue Oct 05 16:18:52 2010 +0100 @@ -671,7 +671,7 @@ double LSESinusoid(cdouble* x, int N, double B, int M, double* c, double iH2, double& a, double& pp, double epf) { struct l_hx {int N; int k1; int k2; int M; double* c; double iH2; cdouble* x; double dhxpeak; double hxpeak;} p={N, 0, 0, M, c, iH2, x, 0, 0}; //(l_hx *)¶ms; - int dfshift=int(&((l_hx*)0)->dhxpeak); + int dfshift=offsetof(l_hx, dhxpeak); int inp; double minp=0; @@ -712,7 +712,7 @@ void LSESinusoid(double& f, cdouble* x, int N, double B, int M, double* c, double iH2, double& a, double& pp, double epf) { struct l_hx {int N; int k1; int k2; int M; double* c; double iH2; cdouble* x; double dhxpeak; double hxpeak;} p={N, 0, 0, M, c, iH2, x, 0, 0}; - int dfshift=int(&((l_hx*)0)->dhxpeak); + int dfshift=offsetof(l_hx, dhxpeak); double inp=f; p.k1=ceil(inp-B); if (p.k1<0) p.k1=0; @@ -742,7 +742,7 @@ double LSESinusoid(int f1, int f2, cdouble* x, int N, double B, int M, double* c, double iH2, double& a, double& pp, double epf) { struct l_hx {int N; int k1; int k2; int M; double* c; double iH2; cdouble* x; double dhxpeak; double hxpeak;} p={N, 0, 0, M, c, iH2, x, 0, 0}; - int dfshift=int(&((l_hx*)0)->dhxpeak); + int dfshift=offsetof(l_hx, dhxpeak); int inp; double minp=0; @@ -787,7 +787,7 @@ int LSESinusoid(double& f, double f1, double f2, cdouble* x, int N, double B, int M, double* c, double iH2, double& a, double& pp, double epf) { struct l_hx {int N; int k1; int k2; int M; double* c; double iH2; cdouble* x; double dhxpeak; double hxpeak;} p={N, 0, 0, M, c, iH2, x, 0, 0};//(l_hx *)¶ms; - int dfshift=int(&((l_hx*)0)->dhxpeak); + int dfshift=offsetof(l_hx, dhxpeak); int result=0; double inp=f; @@ -836,7 +836,7 @@ double LSESinusoidMP(double& f, double f1, double f2, cdouble** x, int Fr, int N, double B, int M, double* c, double iH2, double* a, double* ph, double epf) { struct l_ip1 {int N; int k1; int k2; int M; double* c; double iH2; int L; cdouble** x; double dsip; double sip; cdouble* lmd;} p={N, 0, 0, M, c,iH2, Fr, x, 0, 0, 0}; - int dfshift=int(&((l_ip1*)0)->dsip), fshift=int(&((l_ip1*)0)->sip); + int dfshift=offsetof(l_ip1, dsip), fshift=offsetof(l_ip1, sip); double inp=f; p.k1=ceil(inp-B); if (p.k1<0) p.k1=0; @@ -875,7 +875,7 @@ { struct l_ip {int N; int k1; int k2; int M; double* c; double iH2; int L; double offst_rel; cdouble** x; double sdip; double sip;} p={N, 0, 0, M, c,iH2, Fr, Offst*1.0/N, x, 0, 0}; - int dfshift=int(&((l_ip*)0)->sdip), fshift=int(&((l_ip*)0)->sip); + int dfshift=offsetof(l_ip, sdip), fshift=offsetof(l_ip, sip); double inp=f; p.k1=ceil(inp-B); if (p.k1<0) p.k1=0; @@ -1405,7 +1405,7 @@ int k1=ceil(inp-B); if (k1<0) k1=0; int k2=floor(inp+B); if (k2>=N/2) k2=N/2-1; struct l_hx {int N; int k1; int k2; double* c; double* d; int M; double iH2; cdouble* x; double f1; double dipwindow; double ipwindow;} p={N, k1, k2, c, d, M, iH2, x, f1, 0, 0}; - int dfshift=int(&((l_hx*)0)->dipwindow);// fshift=int(&((l_hx*)0)->ipwindow); + int dfshift=offsetof(l_hx, dipwindow);// fshift=int(&((l_hx*)0)->ipwindow); double tmp=Newton(f2, ddsIPWindowDuo, &p, dfshift, epf, 100, 1e-256, fmin, fmax); if (tmp!=-1 && f2>fmin && f2<fmax) result=1;