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)
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 }