/************************************************************************** * carray.h * * Array class * * Constructor, copy constructor, destructor, operator overloading * function overloading, reference type * **************************************************************************/ #ifndef G__CARRAY_H #define G__CARRAY_H #ifndef G__ARRAY_H class array; #endif #ifndef G__COMPLEX_H class complex; #endif /********************************************************** * definition of array class **********************************************************/ // int G__arraysize = 100; // already declared in darray.h class carray { public: double *re,*im; // pointer to data array int n; // number of data //allocation carray(double real,double imag,int ndat); carray(void); //conversion carray(complex& x); carray(double x,double y=0); carray(array& X); carray(carray& X); ~carray(); carray& operator =(carray& a); carray operator()(int from,int to); complex& operator[](int index); int resize(int size); int getsize() { return(n); } } ; /*********************************************** * Destructor ***********************************************/ carray::~carray() { delete[] re; delete[] im; } /*********************************************** * Copy constructor ***********************************************/ carray::carray(carray& X) { int i; re = new double[X.n]; im = new double[X.n]; memcpy(re,X.re,X.n*sizeof(double)); memcpy(im,X.im,X.n*sizeof(double)); n = X.n; } /*********************************************** * Implicit conversion constructor ***********************************************/ // double to carray carray::carray(double x,double y) { if(G__arraysize==0) { cerr << "Error: Size of carray 0\n"; return; } re = new double[G__arraysize]; im = new double[G__arraysize]; G__ary_assign(re,x,x,G__arraysize); G__ary_assign(im,y,y,G__arraysize); n=G__arraysize; } // complex to carray carray::carray(complex& x) { if(G__arraysize==0) { cerr << "Error: Size of carray 0\n"; return; } re = new double[G__arraysize]; im = new double[G__arraysize]; G__ary_assign(re,x.re,x.re,G__arraysize); G__ary_assign(im,x.im,x.im,G__arraysize); n=G__arraysize; } // array to carray carray::carray(array& X) { int i; re = new double[X.n]; im = new double[X.n]; memcpy(re,X.dat,X.n*sizeof(double)); G__ary_assign(im,0.0,0.0,X.n); n = X.n; } // 2 arrays to carray carray::carray(array& X,array& Y) { int i; re = new double[X.n]; im = new double[X.n]; memcpy(re,X.dat,X.n*sizeof(double)); if(Y.n!=X.n) { cerr << "Size unmatch\n"; } else { memcpy(im,Y.dat,X.n*sizeof(double)); } n = X.n; } /*********************************************** * Constructor ***********************************************/ carray::carray(double real,double imag,int ndat) { double res; G__arraysize=ndat; re = new double[G__arraysize]; im = new double[G__arraysize]; G__ary_assign(re,real,real,G__arraysize); G__ary_assign(im,imag,imag,G__arraysize); n = G__arraysize; } /*********************************************** * constructor ***********************************************/ carray::carray(void) { if(G__arraysize==0) { cerr << "Error: Size of array 0\n"; return; } re = new double[G__arraysize]; im = new double[G__arraysize]; n=G__arraysize; } /*********************************************** * constructor ***********************************************/ carray::carray(double *pre,double *pim,int ndat) { G__arraysize=ndat; re = new double[G__arraysize]; im = new double[G__arraysize]; memcpy(re,pre,ndat*sizeof(double)); memcpy(im,pim,ndat*sizeof(double)); n = G__arraysize; } /*********************************************** * constructor for rvalue subarray ***********************************************/ carray::carray(carray& X,int offset,int ndat) { int i; re = new double[ndat]; im = new double[ndat]; if(offset+ndat>X.n) { memcpy(re,X.re+offset,(X.n-offset)*sizeof(double)); memcpy(im,X.im+offset,(X.n-offset)*sizeof(double)); for(i=X.n-offset;in) { tempre = new double[n]; tempim = new double[n]; memcpy(tempre,re,sizeof(double)*n); memcpy(tempim,im,sizeof(double)*n); delete[] re; delete[] im; re=new double[size]; im=new double[size]; memcpy(re,tempre,sizeof(double)*n); memcpy(im,tempim,sizeof(double)*n); delete[] tempre; delete[] tempim; n=size; } return(n); } /********************************************************** * operator = as member function **********************************************************/ carray& carray::operator =(carray& a) { int i; if(a.n> (shift) ***********************************************/ carray operator >>(carray& a,int shift) { carray c=carray(0.0 , 0.0 , a.n); int i; for(i=0;i #endif #endif