Ptv.cpp
Go to the documentation of this file.00001
00002
00003
00004 #include "Ptv.h"
00005 #include <iostream>
00006 #include <math.h>
00007
00008 using std::ostream;
00009 using std::endl;
00010
00011 double Ptv::tol = 1.0e-9;
00012 double Ptv_match::tol = 1.0e-9;
00013
00014
00015
00016 Ptv::Ptv() : dim(0)
00017 {
00018 v = new double[0];
00019 }
00020
00021
00022 Ptv::Ptv(double x, double y)
00023 {
00024 dim = 2;
00025 v = new double[2];
00026 v[0] = x;
00027 v[1] = y;
00028 }
00029
00030
00031 Ptv::Ptv(double x, double y, double z)
00032 {
00033 dim = 3;
00034 v = new double[3];
00035 v[0] = x;
00036 v[1] = y;
00037 v[2] = z;
00038 }
00039
00040
00041 Ptv::Ptv(unsigned int size_)
00042 {
00043 dim = size_;
00044 v = new double[dim];
00045 for (unsigned int i=0; i< dim; i++)
00046 {
00047 v[i] = 0.0;
00048 }
00049 }
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060 Ptv::Ptv(unsigned int size_, double* v_)
00061 {
00062 dim = size_;
00063 v = new double[dim];
00064 for (unsigned int i=0; i< dim; i++)
00065 {
00066 v[i] = v_[i];
00067 }
00068 }
00069
00070
00071 Ptv::Ptv(const Ptv& p)
00072 {
00073 dim = p.size();
00074 v = new double[dim];
00075 for (unsigned int i=0; i< dim; i++)
00076 {
00077 v[i] = p[i];
00078 }
00079
00080 }
00081
00082
00083 Ptv::~Ptv()
00084 {
00085 delete [] v;
00086 }
00087
00088
00089 void Ptv::redim(unsigned int size_, double* v_)
00090 {
00091 if (dim != size_ )
00092 {
00093 delete [] v;
00094 dim = size_;
00095 v = new double[dim];
00096 }
00097
00098 for (unsigned int i=0; i< dim; i++)
00099 {
00100 v[i] = v_[i];
00101 }
00102 }
00103
00104
00105 void Ptv::redim(unsigned int size_)
00106 {
00107 if (dim != size_ )
00108 {
00109 delete [] v;
00110 dim = size_;
00111 v = new double[dim];
00112 }
00113 for (unsigned int i=0; i< dim; i++)
00114 {
00115 v[i] = 0.0;
00116 }
00117 }
00118
00119
00120 void Ptv::fill(double* v_)
00121 {
00122 for (unsigned int i=0; i< dim; i++)
00123 {
00124 v[i] = v_[i];
00125 }
00126 }
00127
00128
00129 const unsigned int Ptv::size() const { return dim;}
00130
00131 const double& Ptv::operator [] (unsigned int i) const
00132 {
00133 return v[i];
00134 }
00135
00136
00137 double& Ptv::operator [] (unsigned int i)
00138 {
00139 return v[i];
00140 }
00141
00142
00143 Ptv& Ptv::operator = (const Ptv& p)
00144 {
00145 if ( this != &p)
00146 {
00147 if ( dim != p.size())
00148 {
00149 delete [] v;
00150 dim = p.size();
00151 v = new double[dim];
00152 }
00153 for (unsigned int i=0; i< dim; i++)
00154 {
00155 v[i] = p[i];
00156 }
00157 }
00158 return *this;
00159 }
00160
00161
00162 bool Ptv::less(const Ptv& p) const
00163 {
00164
00165 if ( dim < p.size() ) return true ;
00166 if ( dim > p.size() ) return false;
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179 for (int i=dim-1; i>= 0; i--)
00180 {
00181 if ( v[i] + tol >= p[i] - tol && v[i] - tol <= p[i] + tol )
00182 {
00183 }
00184 else if (v[i] + tol < p[i] - tol )
00185 {
00186 return true;
00187 }
00188 else if ( v[i] - tol > p[i] + tol )
00189 {
00190 return false;
00191 }
00192 }
00193
00194 return false;
00195 }
00196
00197
00198 ostream & operator<< ( ostream& os, const Ptv& p)
00199 {
00200 if (p.size() >= 1)
00201 {
00202 os <<"[";
00203 for (unsigned int i=0; i< p.size()-1; i++)
00204 {
00205 os <<p[i]<<",";
00206 }
00207 os <<p[p.size()-1]<<"]";
00208 }
00209 else
00210 {
00211 os <<"Ptv not created properly"<<endl;
00212 }
00213 return os;
00214 }
00215
00216
00217 Ptv_match::Ptv_match()
00218 {
00219 d = 0 ; v = 0.0;
00220 }
00221
00222
00223 Ptv_match::Ptv_match(unsigned int d_, double v_)
00224 {
00225 d = d_ ; v = v_;
00226 }
00227
00228
00229 bool Ptv_match:: operator () (const Ptv &p)
00230 {
00231 if ( v + tol >= p[d] && v - tol <= p[d] ) return true;
00232 else return false;
00233 }