00001
00007 #ifndef __UIUC_CHARM_ILSI_VEC_H
00008 #define __UIUC_CHARM_ILSI_VEC_H
00009
00010 typedef double real;
00011
00012
00014 inline void copy(int n,real *c,const real *a)
00015 { for (int i=0;i<n;i++) c[i]=a[i]; }
00016
00018 inline void sub(int n,real *c,const real *a,const real *b)
00019 { for (int i=0;i<n;i++) c[i]=a[i]-b[i]; }
00020
00022 inline void fma(int n,real *c,const real *a,double k,const real *b)
00023 {
00024 for (int i=0;i<n;i++)
00025 c[i]=k*b[i]+a[i];
00026 }
00027
00029 inline real dot(int n,const real *a,const real *b)
00030 {
00031 real sum=(real)0;
00032 for (int i=0;i<n;i++)
00033 sum+=a[i]*b[i];
00034 return sum;
00035 }
00036
00037
00039 class allocVector {
00040 real *sto;
00041 public:
00042 allocVector(int n) {sto=new real[n];}
00043 ~allocVector() {delete[] sto;}
00044
00045 operator real *() {return sto;}
00046 operator const real *() const {return sto;}
00047 };
00048
00049
00050 #endif
00051
00052