MC_double_vector.hpp

Go to the documentation of this file.
00001 /*
00002 **    TP ETI3 CPE Lyon
00003 **    Copyright (C) 2009 Damien Rohmer
00004 **
00005 **    This program is free software: you can redistribute it and/or modify
00006 **    it under the terms of the GNU General Public License as published by
00007 **    the Free Software Foundation, either version 3 of the License, or
00008 **    (at your option) any later version.
00009 **
00010 **   This program is distributed in the hope that it will be useful,
00011 **    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 **    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013 **    GNU General Public License for more details.
00014 **
00015 **    You should have received a copy of the GNU General Public License
00016 **    along with this program.  If not, see <http://www.gnu.org/licenses/>.
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     // helper class to compare struct
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     //CONSTRUCTORS
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     //Asserts
00098     //************************************************//
00099     //************************************************//
00100 
00104     void assert_bounds(const int& u) const;
00105 
00106 
00107 
00108     //************************************************//
00109     //************************************************//
00110     //change type
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     //Initialize value
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     //manipulate
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     //Informations
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     //Math operator
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     //Get value
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     //OUTPUT
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

Generated on Wed Nov 11 17:13:42 2009 by  doxygen 1.6.1