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 namespace mesh_conv
00031 {
00032
00033 class MC_int_vector;
00034 class MC_v3d;
00035 class MC_v3d_vector;
00036
00037
00038 class comparator_less_double_int
00039 {
00040 public:
00041 bool operator()(const std::pair<double,int> a,const std::pair <double,int> b) const
00042 {return (a.first<b.first);}
00043 };
00044
00045
00047
00049 class MC_double_vector
00050 {
00051
00052 public:
00053
00054
00055
00056
00057
00058
00059
00061 MC_double_vector();
00063 MC_double_vector(const double& u0);
00065 MC_double_vector(const double& u0,const double& u1);
00067 MC_double_vector(const double& u0,const double& u1,const double& u2);
00069 MC_double_vector(const double& u0,const double& u1,const double& u2,const double& u3);
00071 MC_double_vector(const double& u0,const double& u1,const double& u2,const double& u3,const double& u4);
00073 MC_double_vector(const double& u0,const double& u1,const double& u2,const double& u3,const double& u4,const double& u5);
00078 MC_double_vector(const std::string& in,const std::string& separator=" ");
00079
00081 MC_double_vector(const std::set <double>& vec);
00086 MC_double_vector(const std::map <double,int> &vec);
00088 MC_double_vector(const std::vector <double> &vec);
00090 MC_double_vector(const MC_v3d& vec);
00092 MC_double_vector(const MC_double_vector& vec);
00093
00094
00095
00096
00097
00098
00099
00100
00104 void assert_bounds(const int& u) const;
00105
00106
00107
00108
00109
00110
00111
00112
00113
00117 std::vector <double>& get_vector();
00123 const std::vector <double>& to_vector() const;
00124
00128 std::set <double> to_set() const;
00132 std::map <double,int> to_map() const;
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00144 static MC_double_vector zeros(const int& new_size);
00145
00147 static MC_double_vector linspace(const double& begin,const double& end,const double& iteration=1);
00149 static MC_double_vector sample(const double& begin=0,const double& end=1,const int& N_sample=100);
00150
00151
00152
00153
00154
00155
00156
00157
00159 void clear();
00160
00164 MC_double_vector& resize(const int& new_size);
00165
00169 MC_double_vector& add(const double& val);
00173 friend MC_double_vector operator<<(const MC_double_vector& vec,const double& value);
00174
00175
00179 MC_double_vector& add(const MC_double_vector& val);
00183 friend MC_double_vector operator<<(const MC_double_vector& vec,const MC_double_vector& to_add);
00184
00188 MC_double_vector& set(const int& k_index,const double& new_value);
00196 MC_double_vector& set(const MC_int_vector& k_index,const MC_double_vector& new_value);
00197
00203 std::pair <MC_double_vector,double> delete_index(const int& index_to_delete) const;
00209 std::pair <MC_double_vector,MC_double_vector> delete_index(const MC_int_vector& index_to_delete) const;
00210
00211
00216 std::pair <MC_double_vector,MC_int_vector> sort() const;
00217
00218
00219
00220
00221
00222
00223
00225 int size() const;
00226
00228 std::pair <double,int> min() const;
00230 std::pair <double,int> max() const;
00231
00232
00233
00234
00235
00236
00237
00241 friend MC_double_vector operator-(const MC_double_vector& v);
00242
00246 friend MC_double_vector operator+(const MC_double_vector& vec,const double& to_add);
00250 friend MC_double_vector operator-(const MC_double_vector& vec,const double& to_sub);
00254 friend MC_double_vector operator*(const MC_double_vector& vec,const double& to_mult);
00258 friend MC_double_vector operator/(const MC_double_vector& vec,const double& to_subdiv);
00259
00260
00266 friend MC_v3d_vector operator*(const MC_double_vector& vec,const MC_v3d& to_mult);
00272 friend MC_v3d_vector operator*(const MC_v3d& to_mult,const MC_double_vector& vec);
00276 friend MC_v3d_vector operator/(const MC_v3d& vec,const MC_double_vector& to_subdiv);
00277
00278
00279
00285 friend MC_double_vector operator+(const MC_double_vector& vec,const MC_double_vector& to_add);
00291 friend MC_double_vector operator-(const MC_double_vector& vec,const MC_double_vector& to_sub);
00297 friend MC_double_vector operator*(const MC_double_vector& vec,const MC_double_vector& to_mult);
00303 friend MC_double_vector operator/(const MC_double_vector& vec,const MC_double_vector& to_subdiv);
00304
00305
00306
00308 MC_double_vector& operator+=(const double& to_add);
00310 MC_double_vector& operator-=(const double& to_sub);
00312 MC_double_vector& operator*=(const double& to_mult);
00314 MC_double_vector& operator/=(const double& to_subdiv);
00315
00320 MC_double_vector& operator+=(const MC_double_vector& to_add);
00325 MC_double_vector& operator-=(const MC_double_vector& to_sub);
00330 MC_double_vector& operator*=(const MC_double_vector& to_mult);
00335 MC_double_vector& operator/=(const MC_double_vector& to_subdiv);
00336
00337
00341 friend MC_int_vector operator<(const MC_double_vector& vec,const double& val);
00345 friend MC_int_vector operator<=(const MC_double_vector& vec,const double& val);
00349 friend MC_int_vector operator>(const MC_double_vector& vec,const double& val);
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);
00358
00359
00360
00364 friend MC_int_vector operator<(const double& val,const MC_double_vector& vec);
00368 friend MC_int_vector operator<=(const double& val,const MC_double_vector& vec);
00372 friend MC_int_vector operator>(const double& val,const MC_double_vector& vec);
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);
00381
00382
00384 static double sum(const MC_double_vector& input);
00386 static MC_double_vector abs(const MC_double_vector& input);
00387
00388
00389
00390
00391
00392
00393
00395 const double& operator()(const int& index) const ;
00397 double& operator()(const int& index) ;
00399 const double& operator[](const int& index) const ;
00401 double& operator[](const int& index) ;
00402
00404 MC_double_vector operator()(const MC_int_vector& index) const;
00406 MC_double_vector operator[](const MC_int_vector& index) const;
00407
00408
00410 const double& first() const;
00412 double& first();
00414 const double& last() const;
00416 double& last();
00417
00418
00421 const double* pointer() const;
00424 double* pointer_unprotected();
00425
00426
00427
00428
00429
00430
00431
00433 friend std::ostream& operator<<(std::ostream& output,const MC_double_vector& in);
00434
00439 friend MC_double_vector& operator>>(std::istream& input,MC_double_vector& vec);
00440
00441
00442 private:
00443
00445 std::vector <double> double_list;
00446
00447 };
00448
00449
00450
00451
00452 }
00453
00454 #endif