#if !defined H_ARRAY_FUNCTIONS #define H_ARRAY_FUNCTIONS #include #include "harray.h" template HArray::HArray(Type x, int n) { if (n > 0 ) { size=n; array= new Type [size]; *this=x; } else errSize(n); } template HArray::HArray (const Type * anyArray, int n) { if (n > 0 ) { size=n; array= new Type [size]; *this=anyArray; } else errSize(n); } template HArray& HArray::assign(int n) { if (n > 0 ) { delete [] array; size=n; array= new Type [size]; } else errSize(n); return *this; } template HArray& HArray::assign(const HArray& x) { size=x.size; array=new Type [size]; return *this=x; } template Type * HArray::getPointer(int index) { if (index >=0 && index < size) return index+array; errIndex(index); return 0; } template HArray& HArray::operator = (const Type& value) { for(int i=size;i--;array[i]=value); return *this; } template HArray& HArray::operator = (const Type * anyArray) { for(int i=size;i--;array[i]=anyArray[i]); return *this; } template HArray& HArray::operator = (const HArray& x) { if(size!=x.size) { delete [] array; size=x.size; array= new Type [size]; } for(int i=size;i--;array[i]=x.array[i]); return *this; } template HArray HArray::operator () (int pos, int nElements) { if (pos < 0 || pos >= size) { errIndex(pos); exit(EXIT_FAILURE); } int n=size-pos; if(n tmp(array+pos,nElements); return tmp; } template HArray HArray::operator () (const int * index, int n) { HArray x; x.size=n; x.array=new Type [n]; register int i; while(n--) { i=index[n]; if(i<0 || i>=size) { errIndex(i); exit(EXIT_FAILURE); } x.array[n]=array[i]; } return x; } template HArray& HArray::insert(int pos, const Type& x) { if (pos >= 0 && pos <= size) { Type * tmp=array; array=new Type [++size]; for(int i=size;--i > pos;array[i]=tmp[i-1]); array[pos]=x; while(pos--) array[pos]=tmp[pos]; delete [] tmp; } else errIndex(pos); return *this; } template HArray& HArray::insert(int pos, const HArray& x) { if (pos >= 0 && pos <= size) { Type * tmp=array; int n=size; register int l=(size+=x.size); array=new Type [size]; while(n > pos) array[--l]=tmp[--n]; for(int i=x.size;i;array[--l]=x.array[--i]); while(l--) array[l]=tmp[l]; delete [] tmp; } else errIndex(pos); return *this; } template HArray& HArray::replace(int pos, const HArray& x) { if(pos>=0 && pos x.size) n=x.size; while(n--) array[n+pos]=x.array[n]; } else errIndex(pos); return *this; } template HArray& HArray::append(const Type& x) { Type * tmp=array; array=new Type [++size]; for(int i=size-1;i--;array[i]=tmp[i]); delete [] tmp; return *this; } template HArray& HArray::append(const HArray& x) { Type * tmp=array; int l=(size+=x.size); array=new Type [size]; for(int i=x.size; i; array[--l]=x.array[--i]); while(l--) array[l]=tmp[l]; delete [] tmp; return *this; } template HArray& HArray::remove(int pos, int nElements) { if(pos>=0 && pos=size ? pos:size-nElements; if(l>0) { Type * tmp=array; array=new Type [l]; for(int i=pos;i--;array[i]=tmp[i]); while(n HArray& HArray::apply(Type func(Type)) { for(int i=size;i--;array[i]=func(array[i])); return *this; } template HArray& HArray::apply(Type* func(Type*)) { for(int i=size;i--;array[i]=*(func(array+i))); return *this; } template HArray& HArray::apply(Type func(Type),HArray & x) { if(size!=x.size) { delete [] array; size=x.size; array=new Type [size]; } for(int i=size;i--;array[i]=func(x.array[i])); return *this; } template void HArray::errIndex(int index) { cerr<<"array index "< void HArray::errSize(int index) { cerr << "wrong array size: "<< index <<" ignored" << endl; } #endif