00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef MC_DOUBLE_VECTOR_H_
00021 #define MC_DOUBLE_VECTOR_H_
00022
00023 #include <stdlib.h>
00024 #include <vector>
00025 #include <map>
00026 #include <set>
00027 #include <iostream>
00028 #include <algorithm>
00029
00030
00031
00032 namespace mesh_conv
00033 {
00034
00035 class MC_int_vector;
00036 class MC_v3d;
00037 class MC_v3d_vector;
00038
00039
00040
00041 class comparator_less_double_int
00042 {
00043 public:
00044 bool operator()(const std::pair<double,int> a,const std::pair <double,int> b) const
00045 {return (a.first<b.first);}
00046 };
00047
00048
00050
00052 class MC_double_vector
00053 {
00054
00055 public:
00056
00057
00058
00059
00060
00061
00062
00064 MC_double_vector();
00066 MC_double_vector(const double& u0);
00068 MC_double_vector(const double& u0,const double& u1);
00070 MC_double_vector(const double& u0,const double& u1,const double& u2);
00072 MC_double_vector(const double& u0,const double& u1,const double& u2,const double& u3);
00074 MC_double_vector(const double& u0,const double& u1,const double& u2,const double& u3,const double& u4);
00076 MC_double_vector(const double& u0,const double& u1,const double& u2,const double& u3,const double& u4,const double& u5);
00081 MC_double_vector(const std::string& in,const std::string& separator=" ");
00082
00084 MC_double_vector(const std::set <double>& vec);
00089 MC_double_vector(const std::map <double,int> &vec);
00091 MC_double_vector(const std::vector <double> &vec);
00093 MC_double_vector(const MC_v3d& vec);
00095 MC_double_vector(const MC_double_vector& vec);
00096
00097
00098
00099
00100
00101
00102
00103
00107 void assert_bounds(const int& u) const;
00108
00109
00110
00111
00112
00113
00114
00115
00116
00120 std::vector <double>& get_vector();
00126 const std::vector <double>& to_vector() const;
00127
00131 std::set <double> to_set() const;
00135 std::map <double,int> to_map() const;
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00147 static MC_double_vector zeros(const int& new_size);
00148
00150 static MC_double_vector linspace(const double& begin,const double& end,const double& iteration=1);
00152 static MC_double_vector sample(const double& begin=0,const double& end=1,const int& N_sample=100);
00153
00154
00155
00156
00157
00158
00159
00160
00162 void clear();
00163
00167 MC_double_vector& resize(const int& new_size);
00168
00172 MC_double_vector& add(const double& val);
00176 friend MC_double_vector operator<<(const MC_double_vector& vec,const double& value);
00177
00178
00182 MC_double_vector& add(const MC_double_vector& val);
00186 friend MC_double_vector operator<<(const MC_double_vector& vec,const MC_double_vector& to_add);
00187
00191 MC_double_vector& set(const int& k_index,const double& new_value);
00199 MC_double_vector& set(const MC_int_vector& k_index,const MC_double_vector& new_value);
00200
00206 std::pair <MC_double_vector,double> delete_index(const int& index_to_delete) const;
00212 std::pair <MC_double_vector,MC_double_vector> delete_index(const MC_int_vector& index_to_delete) const;
00213
00214
00219 std::pair <MC_double_vector,MC_int_vector> sort() const;
00220
00222 MC_double_vector inverted() const;
00223
00224
00225
00226
00227
00228
00229
00230
00232 int size() const;
00233
00235 std::pair <double,int> min() const;
00237 std::pair <double,int> max() const;
00238
00239
00240
00241
00242
00243
00244
00248 friend MC_double_vector operator-(const MC_double_vector& v);
00249
00253 friend MC_double_vector operator+(const MC_double_vector& vec,const double& to_add);
00257 friend MC_double_vector operator-(const MC_double_vector& vec,const double& to_sub);
00261 friend MC_double_vector operator*(const MC_double_vector& vec,const double& to_mult);
00265 friend MC_double_vector operator*(const double& to_mult,const MC_double_vector& vec);
00266
00270 friend MC_double_vector operator/(const MC_double_vector& vec,const double& to_subdiv);
00271
00272
00278 friend MC_v3d_vector operator*(const MC_double_vector& vec,const MC_v3d& to_mult);
00284 friend MC_v3d_vector operator*(const MC_v3d& to_mult,const MC_double_vector& vec);
00288 friend MC_v3d_vector operator/(const MC_v3d& vec,const MC_double_vector& to_subdiv);
00289
00290
00291
00297 friend MC_double_vector operator+(const MC_double_vector& vec,const MC_double_vector& to_add);
00303 friend MC_double_vector operator-(const MC_double_vector& vec,const MC_double_vector& to_sub);
00309 friend MC_double_vector operator*(const MC_double_vector& vec,const MC_double_vector& to_mult);
00315 friend MC_double_vector operator/(const MC_double_vector& vec,const MC_double_vector& to_subdiv);
00316
00317
00318
00320 MC_double_vector& operator+=(const double& to_add);
00322 MC_double_vector& operator-=(const double& to_sub);
00324 MC_double_vector& operator*=(const double& to_mult);
00326 MC_double_vector& operator/=(const double& to_subdiv);
00327
00332 MC_double_vector& operator+=(const MC_double_vector& to_add);
00337 MC_double_vector& operator-=(const MC_double_vector& to_sub);
00342 MC_double_vector& operator*=(const MC_double_vector& to_mult);
00347 MC_double_vector& operator/=(const MC_double_vector& to_subdiv);
00348
00349
00353 friend MC_int_vector operator<(const MC_double_vector& vec,const double& val);
00357 friend MC_int_vector operator<=(const MC_double_vector& vec,const double& val);
00361 friend MC_int_vector operator>(const MC_double_vector& vec,const double& val);
00365 friend MC_int_vector operator>=(const MC_double_vector& vec,const double& val);
00369 friend MC_int_vector operator==(const MC_double_vector& vec,const double& val);
00370
00371
00372
00376 friend MC_int_vector operator<(const double& val,const MC_double_vector& vec);
00380 friend MC_int_vector operator<=(const double& val,const MC_double_vector& vec);
00384 friend MC_int_vector operator>(const double& val,const MC_double_vector& vec);
00388 friend MC_int_vector operator>=(const double& val,const MC_double_vector& vec);
00392 friend MC_int_vector operator==(const double& val,const MC_double_vector& vec);
00393
00394
00395
00396
00397
00398
00399
00400
00401
00403 static double sum(const MC_double_vector& input);
00405 static MC_double_vector abs(const MC_double_vector& input);
00406
00408 double norm_2() const;
00409
00411 double dot(const MC_double_vector& v) const;
00412
00413
00414
00415
00416
00417
00418
00419
00421 const double& operator()(const int& index) const ;
00423 double& operator()(const int& index) ;
00425 const double& operator[](const int& index) const ;
00427 double& operator[](const int& index) ;
00428
00430 MC_double_vector operator()(const MC_int_vector& index) const;
00432 MC_double_vector operator[](const MC_int_vector& index) const;
00433
00434
00436 const double& first() const;
00438 double& first();
00440 const double& last() const;
00442 double& last();
00443
00444
00447 const double* pointer() const;
00450 double* pointer_unprotected();
00451
00452
00453
00454
00455
00456
00457
00459 friend std::ostream& operator<<(std::ostream& output,const MC_double_vector& in);
00460
00465 friend MC_double_vector& operator>>(std::istream& input,MC_double_vector& vec);
00466
00467
00468 private:
00469
00471 std::vector <double> double_list;
00472
00473 };
00474
00475
00476
00477
00478 }
00479
00480 #endif