MC_double_vector_vector.cpp

Go to the documentation of this file.
00001 
00002 #include <MC_int_vector.hpp>
00003 
00004 #include <MC_double_vector_vector.hpp>
00005 
00006 namespace mesh_conv
00007 {
00008 
00009     MC_double_vector_vector::MC_double_vector_vector(){}
00010     MC_double_vector_vector::MC_double_vector_vector(const MC_double_vector& v0){double_vec_list.push_back(v0);}
00011     MC_double_vector_vector::MC_double_vector_vector(const MC_double_vector& v0,const MC_double_vector& v1)
00012     {double_vec_list.push_back(v0);double_vec_list.push_back(v1);}
00013     MC_double_vector_vector::MC_double_vector_vector(const MC_double_vector& v0,const MC_double_vector& v1,const MC_double_vector& v2)
00014     {double_vec_list.push_back(v0);double_vec_list.push_back(v1);double_vec_list.push_back(v2);}
00015     MC_double_vector_vector::MC_double_vector_vector(const MC_double_vector& v0,const MC_double_vector& v1,const MC_double_vector& v2,const MC_double_vector& v3)
00016     {double_vec_list.push_back(v0);double_vec_list.push_back(v1);double_vec_list.push_back(v2);double_vec_list.push_back(v3);}
00017 
00018     MC_double_vector_vector::MC_double_vector_vector(const std::vector <MC_double_vector>& vec)
00019         :double_vec_list(vec)
00020     {}
00021 
00022     inline void MC_double_vector_vector::assert_bounds(const int& u) const
00023     {
00024         if(u<0 || u>=int(double_vec_list.size()))
00025         {std::cout<<"Assert mesh_conv::MC_double_vector_vector::assert_bounds("<<u<<") failed, because size="<<double_vec_list.size()<<std::endl;}
00026     }
00027 
00028     const MC_double_vector& MC_double_vector_vector::operator()(const int& index) const
00029     {assert_bounds(index);return double_vec_list[index];}
00030     MC_double_vector& MC_double_vector_vector::operator()(const int& index)
00031     {assert_bounds(index);return double_vec_list[index];}
00032     const MC_double_vector& MC_double_vector_vector::operator[](const int& index) const
00033     {assert_bounds(index);return double_vec_list[index];}
00034     MC_double_vector& MC_double_vector_vector::operator[](const int& index)
00035     {assert_bounds(index);return double_vec_list[index];}
00036 
00037     int MC_double_vector_vector::size() const
00038     {return double_vec_list.size();}
00039 
00040 
00041     void MC_double_vector_vector::clear(){double_vec_list.clear();}
00042     MC_double_vector_vector& MC_double_vector_vector::resize(const int& new_size)
00043     {
00044         int N=double_vec_list.size();
00045         if(N==new_size) //same size
00046             return *this;
00047 
00048         if(new_size<0)
00049         {std::cout<<"Error in MC_double_vector_vector::resize("<<new_size<<") new size must be >0"<<std::endl;exit(-1);}
00050 
00051         double_vec_list.resize(new_size);
00052         return *this;
00053     }
00054     MC_double_vector_vector& MC_double_vector_vector::add(const MC_double_vector& val){double_vec_list.push_back(val);return *this;}
00055     MC_double_vector_vector operator<<(const MC_double_vector_vector& vec,const MC_double_vector& value)
00056     {return MC_double_vector_vector(vec).add(value);}
00057     MC_double_vector_vector& MC_double_vector_vector::add(const MC_double_vector_vector& val)
00058     {
00059         int N=val.size();
00060         for(int k=0;k<N;++k)
00061             double_vec_list.push_back(val[k]);
00062         return *this;
00063     }
00064     MC_double_vector_vector operator<<(const MC_double_vector_vector& vec,const MC_double_vector_vector& to_add)
00065     {return MC_double_vector_vector(vec).add(to_add);}
00066     MC_double_vector_vector& MC_double_vector_vector::set(const int& k_index,const MC_double_vector& new_value)
00067     {
00068         if(k_index<0)
00069         {std::cout<<"Error in MC_double_vector_vector::set("<<k_index<<","<<new_value<<"), index must be >0"<<std::endl;exit(-1);}
00070         if(k_index>=size())
00071             double_vec_list.resize(k_index+1);
00072         double_vec_list[k_index]=new_value;
00073         return *this;
00074     }
00075     MC_double_vector_vector& MC_double_vector_vector::set(const MC_int_vector& k_index,const MC_double_vector_vector& new_value)
00076     {
00077         MC_double_vector_vector v_new_value=new_value;
00078         if(new_value.size()!=1 && new_value.size()!=k_index.size())
00079         {std::cout<<"Error in MC_double_vector_vector::set(MC_int_vector,MC_double_vector_vector), size are not correct: "<<k_index.size()<<","<<new_value.size()<<std::endl;exit(-1);}
00080         if(new_value.size()==1)
00081             v_new_value=MC_double_vector_vector::repeat(new_value.first(),k_index.size());
00082 
00083 
00084         int N=v_new_value.size();
00085         for(int k=0;k<N;k++)
00086             set(k_index[k],v_new_value[k]);
00087         return *this;
00088     }
00089     std::pair <MC_double_vector_vector,MC_double_vector> MC_double_vector_vector::delete_index(const int& index_to_delete) const
00090     {
00091         if(index_to_delete<0 || index_to_delete>=size())
00092         {std::cout<<"Error in MC_double_vector_vector::delete("<<index_to_delete<<", when size="<<size()<<std::endl;exit(-1);}
00093         MC_double_vector_vector new_vec;
00094         int N=size();
00095         for(int k=0;k<N;++k)
00096             if(k!=index_to_delete)
00097                 new_vec.add(double_vec_list[k]);
00098         return std::pair <MC_double_vector_vector,MC_double_vector>(new_vec,double_vec_list[index_to_delete]);
00099     }
00100     std::pair <MC_double_vector_vector,MC_double_vector_vector> MC_double_vector_vector::delete_index(const MC_int_vector& index_to_delete) const
00101     {
00102         std::set <int> set_index=index_to_delete.to_set();
00103         MC_double_vector_vector new_vec;
00104         MC_double_vector_vector deleted_vec;
00105         int N=size();
00106         for(int k=0;k<N;k++)
00107         {
00108             if(set_index.find(k)!=set_index.end())
00109                 new_vec.add(double_vec_list[k]);
00110             else
00111                 deleted_vec.add(double_vec_list[k]);
00112         }
00113         return std::pair <MC_double_vector_vector,MC_double_vector_vector> (new_vec,deleted_vec);
00114     }
00115 
00116     MC_double_vector_vector MC_double_vector_vector::repeat(const MC_double_vector& input,const int& N_repeat)
00117     {
00118         if(N_repeat<0)
00119         {std::cout<<"Error in MC_double_vector_vector::repeat(MC_double_vector,"<<N_repeat<<"), repeat number must be >0"<<std::endl;exit(-1);}
00120 
00121         MC_double_vector_vector vec(input);
00122         for(int k=1;k<N_repeat;++k)
00123             vec.add(input);
00124         return vec;
00125     }
00126 
00127     const MC_double_vector& MC_double_vector_vector::first() const
00128     {
00129         if(size()>0)
00130             return double_vec_list[0];
00131         else
00132         {
00133             std::cout<<"Error, call MC_double_vector_vector::first() with size=0"<<std::endl;exit(-1);
00134             exit(-1);
00135         }
00136     }
00137     MC_double_vector& MC_double_vector_vector::first()
00138     {
00139         if(size()>0)
00140             return double_vec_list[0];
00141         else
00142         {
00143             std::cout<<"Error, call MC_double_vector_vector::first() with size=0"<<std::endl;exit(-1);
00144             exit(-1);
00145         }
00146     }
00147     const MC_double_vector& MC_double_vector_vector::last() const
00148     {
00149         if(size()>0)
00150             return double_vec_list[size()-1];
00151         else
00152         {std::cout<<"Error, call MC_double_vector::last() with size=0"<<std::endl;exit(-1);}
00153     }
00154     MC_double_vector& MC_double_vector_vector::last()
00155     {
00156         if(size()>0)
00157             return double_vec_list[size()-1];
00158         else
00159         {std::cout<<"Error, call MC_double_vector::last() with size=0"<<std::endl;exit(-1);}
00160     }
00161 
00162     std::ostream& operator<<(std::ostream& stream,const MC_double_vector_vector& input)
00163     {
00164         int N=input.size();
00165         for(int k=0;k<N-1;k++)
00166             stream<<"("<<input[k]<<"); ";
00167         if(N>0)
00168             stream<<"("<<input[N-1]<<")";
00169         return stream;
00170     }
00171     MC_double_vector_vector operator+(const MC_double_vector_vector& vec,const double& to_add)
00172     {
00173 
00174         int N=vec.size();
00175         MC_double_vector_vector res;res.resize(N);
00176         for(int k=0;k<N;++k)
00177             res[k]=vec[k]+to_add;
00178         return res;
00179     }
00180     MC_double_vector_vector operator-(const MC_double_vector_vector& vec,const double& to_add)
00181     {
00182         int N=vec.size();
00183         MC_double_vector_vector res(N);res.resize(N);
00184         for(int k=0;k<N;++k)
00185             res[k]=vec[k]-to_add;
00186         return res;
00187     }
00188 
00189     MC_double_vector_vector::MC_double_vector_vector(const std::list <MC_double_vector>& vec)
00190     {
00191         for(std::list <MC_double_vector> :: const_iterator it=vec.begin();it!=vec.end();++it)
00192             add(*it);
00193     }
00194 
00195     const MC_double_vector* MC_double_vector_vector::pointer() const {return &double_vec_list[0];}
00196     MC_double_vector* MC_double_vector_vector::pointer_unprotected() {return &double_vec_list[0];}
00197 
00198     MC_double_vector_vector MC_double_vector_vector::operator()(const MC_int_vector& index) const
00199     {
00200         int N=size();
00201         int N2=index.size();
00202         MC_double_vector_vector new_vec;new_vec.resize(N2);
00203         for(int k=0;k<N2;++k)
00204         {
00205             if(index[k]<0 || index[k]>N)
00206             {std::cout<<"Error in MC_double_vector_vector::operator()(MC_double_vector), value index["<<k<<"]="<<index[k]<<" not correct for size="<<N<<std::endl;exit(-1);}
00207             new_vec[k]=double_vec_list[index[k]];
00208         }
00209         return new_vec;
00210     }
00211     MC_double_vector_vector MC_double_vector_vector::operator[](const MC_int_vector& index) const
00212     {return (*this)(index);}
00213 
00214     MC_double_vector_vector MC_double_vector_vector::empty(const int& N)
00215     {
00216         MC_double_vector_vector vec;vec.resize(N);
00217         return vec;
00218     }
00219 
00220 }

Generated on Sun Apr 18 20:24:47 2010 by  doxygen 1.6.1