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 *)&params;
-  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 *)&params;
-  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;