| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

MagVec.cpp

Go to the documentation of this file.
00001 #include <iostream>
00002 #include <iomanip>
00003 #include "MagVec.h"
00004 
00005 
00006 MagVec::MagVec() {
00007 
00008   Nele = 0;
00009   ptr_data = 0;  // set pointer to null
00010 
00011 }
00012 
00013 
00014 MagVec::MagVec(int N) {
00015 
00016   Nele = N;
00017   ptr_data = new double[Nele];
00018   for(int i=0;i<Nele;i++) *(ptr_data+i)=0.;
00019 }
00020 
00021 MagVec::MagVec(const MagVec& v) {
00022 
00023   Nele = v.Nele;
00024   ptr_data = new double[Nele]; 
00025   for(int i=0;i<Nele;i++) *(ptr_data+i)=v[i];
00026 
00027 }
00028 
00029 MagVec::~MagVec()
00030 {delete [] ptr_data;}
00031 
00032 
00033 double& MagVec::operator[](int i) {
00034 
00035   if( i < 0 ) { std::cerr << "MagVec: Index < zero! " << std::endl; return ptr_data[0]; }; 
00036   if( i >= Nele ) { std::cerr << "MagVec: Index too large! " << std::endl; return ptr_data[0]; }; 
00037 
00038   return  *(ptr_data+i);
00039 
00040 }
00041 
00042 const double& MagVec::operator[](int i) const {
00043 
00044   if( i < 0 ) { std::cerr << "MagVec: Index < zero! " << std::endl; return ptr_data[0]; }; 
00045   if( i >= Nele ) { std::cerr << "MagVec: Index too large! " << std::endl; return ptr_data[0]; }; 
00046 
00047   return  *(ptr_data+i);
00048 
00049 }
00050 
00051 MagVec& MagVec::operator=(const MagVec& v) {
00052 
00053   if(Nele!=0 && Nele!=v.Nele) {
00054 std::cerr << "MagVec Assignment: size does not match!" << std::endl; return *this;
00055   }
00056  
00057   if ( ptr_data != v.ptr_data ) {
00058     reSize(v.Nele);
00059     for(int i=0;i<Nele;i++) *(ptr_data+i) = v[i];
00060   }
00061 
00062   return *this;
00063 
00064 }
00065 
00066 MagVec MagVec::operator+(const MagVec& v) {
00067 
00068   if( Nele != v.Nele ) { std::cerr << "operator+: vectors size does not match!" << std::endl; return *this; }; 
00069   MagVec b(Nele);
00070 
00071   for (int i=0;i<Nele;i++) b[i] = *(ptr_data+i) + v[i];
00072   return b;
00073 
00074 }
00075 
00076 MagVec MagVec::operator+(const MagVec& v) const {
00077 
00078   if( Nele != v.Nele ) { std::cerr << "operator+: vectors size does not match!" << std::endl; return *this; }; 
00079   MagVec b(Nele);
00080  
00081   for (int i=0;i<Nele;i++) b[i] = *(ptr_data+i) + v[i];
00082   return b;
00083 
00084 }
00085 
00086 MagVec& MagVec::operator+=(const MagVec& v) {
00087 
00088  if( Nele != v.Nele ) { std::cerr << "operator+=: vectors size does not match!" << std::endl; return *this; }; 
00089 
00090  for (int i=0;i<Nele;i++) *(ptr_data+i)+=v[i];
00091   return *this;
00092 
00093 }
00094 
00095 MagVec  MagVec::operator-(const MagVec& v) {
00096 
00097   if( Nele != v.Nele ) { std::cerr << "operator+: vectors size does not match!" << std::endl; return *this; }
00098   MagVec b(Nele);
00099 
00100   for (int i=0;i<Nele;i++) b[i] = *(ptr_data+i) - v[i];
00101   return b;
00102 
00103 }
00104 
00105 MagVec  MagVec::operator-(const MagVec& v) const{
00106 
00107   if( Nele != v.Nele ) { std::cerr << "operator+: vectors size does not match!" << std::endl; return *this; }
00108   MagVec b(Nele);
00109  
00110   for (int i=0;i<Nele;i++) b[i] = *(ptr_data+i) - v[i];
00111   return b;
00112 
00113 }
00114 
00115 MagVec& MagVec::operator-=(const MagVec& v) {
00116 
00117  if( Nele != v.Nele ) { std::cerr << "operator+=: vectors size does not match!" << std::endl; return *this; }
00118 
00119 
00120 
00121  for (int i=0;i<Nele;i++) *(ptr_data+i)-=v[i];
00122   return *this;
00123 
00124 }
00125 
00126 double MagVec::operator*(const MagVec& v) {
00127   double  b=0.;
00128   if( Nele != v.Nele ) { std::cerr << "scalar product: vectors size does not match!" << std::endl; return b; }
00129 
00130  for (int i=0;i<Nele;i++) b += *(ptr_data+i)*v[i];
00131   return b;
00132 }
00133 
00134 double MagVec::operator*(const MagVec& v) const {
00135   double  b=0.;
00136   if( Nele != v.Nele ) { std::cerr << "scalar product: vectors size does not match!" << std::endl; return b; }
00137 
00138  for (int i=0;i<Nele;i++) b += *(ptr_data+i)*v[i];
00139   return b;
00140 }
00141 
00142 
00143 
00144 MagVec& MagVec::operator*=(const double& d) {
00145 
00146   for (int i=0;i<Nele;i++) *(ptr_data+i)*= d;
00147 
00148   return *this;
00149 
00150 }
00151 
00152 
00153 void MagVec::reSize(int Nnew) {
00154 
00155  
00156   if ( Nnew>=0 && Nnew != Nele ) {
00157     double*  p = ptr_data;
00158     int Nele_old = Nele;
00159     ptr_data = new double[Nnew];
00160     Nele = Nnew;
00161     int k = Nele <= Nele_old ? Nele : Nele_old;
00162 
00163     p += k;
00164     double*  q = ptr_data + k;
00165     while (q > ptr_data) *(--q) = *(--p);
00166 
00167     delete [] p;
00168   }
00169 
00170 
00171 
00172 }
00173 
00174 int MagVec::n_elem() const {
00175 
00176   return Nele;
00177 
00178 }
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:04:54 2011 for Magnet by doxygen 1.4.7