Changeset 1008
- Timestamp:
- Feb 1, 2008, 4:49:13 AM (16 years ago)
- Location:
- branches/peter-dev
- Files:
-
- 4 deleted
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/peter-dev/test/matrix_test.cc
r865 r1008 36 36 : m_(i,j,value) {} 37 37 38 inline theplu::yat::utility::vector 39 row(const size_t& i) { return theplu::yat::utility::vector(m_,i); }38 inline theplu::yat::utility::vectorView 39 row(const size_t& i) { return m_.row_vec(i); } 40 40 41 41 inline const theplu::yat::utility::matrix& matrix(void) const { return m_; } … … 258 258 for (size_t j=0; j<m5.columns(); ++j) 259 259 m5_sum2+=m5(i,j); 260 utility::vector v5subrow(m5,3);260 utility::vectorView v5subrow(m5,3); 261 261 double v5subrow_sum=0; 262 262 for (size_t i=0; i<v5subrow.size(); ++i) { … … 280 280 for (size_t j=0; j<m5.columns(); ++j) 281 281 m5_sum3+=m5(i,j); 282 utility::vector v5subcolumn(m5,0,false);282 utility::vectorView v5subcolumn = m5.column_vec(0); 283 283 double v5subcolumn_sum=0; 284 284 for (size_t i=0; i<v5subcolumn.size(); ++i) { … … 332 332 *error << "\tthat class member returns a view" << std::endl; 333 333 matrixwrapper mw(5,2); 334 utility::vector mwrow=mw.row(2);334 utility::vectorView mwrow=mw.row(2); 335 335 if (mwrow.gsl_vector_p()->data != &(mw.matrix()(2,0))) { 336 336 ok=false; -
branches/peter-dev/test/pca_test.cc
r865 r1008 33 33 #include <vector> 34 34 35 36 35 using namespace theplu::yat; 37 36 int main() -
branches/peter-dev/test/score_test.cc
r865 r1008 32 32 #include "yat/utility/matrix.h" 33 33 #include "yat/utility/vector.h" 34 #include "yat/utility/vectorView.h" 34 35 35 36 #include <cmath> … … 92 93 const double tol = 0.001; 93 94 for (size_t i=0; i<data.rows(); i++){ 94 utility::vector vec(data,i);95 utility::vectorView vec(data,i); 95 96 if (vec.size()!=target2.size()){ 96 97 *error << "vec.size() is " << vec.size() << " and target2.size() is " … … 108 109 utility::vector weight(target2.size(),1); 109 110 for (size_t i=0; i<data.rows(); i++){ 110 utility::vector vec(data,i);111 utility::vectorView vec = data.row_vec(i); 111 112 area = auc.score(target2, vec, weight); 112 113 if (area<correct_area(i)-tol || area>correct_area(i)+tol){ -
branches/peter-dev/test/vector_test.cc
r995 r1008 29 29 #include "yat/utility/utility.h" 30 30 #include "yat/utility/vector.h" 31 #include "yat/utility/vectorView.h" 31 32 32 33 #include <fstream> … … 74 75 for (size_t i=0; i<vec.size(); i+=2) 75 76 sum_before+=vec[i]; 76 utility::vector vec_view(vec,0,6,2);77 utility::vectorView vec_view(vec,0,6,2); 77 78 sum_after=utility::sum(vec_view); 78 79 ok &= (sum_after==sum_before); … … 88 89 *message << "const view implementation" << std::endl; 89 90 const utility::vector vv(10,3.0); 90 utility::vector vview(vv,0,5,1);91 utility::vectorView vview(vv,0,5,1); 91 92 // const utility::vector vview(vv,0,5,1); // this is the proper line 92 93 utility::vector vv2(5,2.0); 93 94 vv2.mul(vview); // should work even without const since const arg passing 94 95 vv2.div(vview); // should work even without const since const arg passing 96 *message << "end view" << std::endl; 95 97 ok &= (vview*vview == 3.0*3.0*vview.size()); 96 } 97 98 *message << "end view" << std::endl; 99 } 100 return 0; 101 102 *message << "end view" << std::endl; 98 103 // checking that copy constructor creates an independent object when 99 104 // a non-view vector is copied … … 114 119 ok &= (vec_view.size()==vec3.size()); 115 120 ok &= (vec3 == vec_view); 116 ok &= (&vec3 != &vec_view);117 121 ok &= !vec3.isview(); 118 122 } 119 123 124 /* different sizes are allowed in new design 120 125 // checking that assignment operator throws an exception if vectors 121 126 // differ in size … … 141 146 gsl_set_error_handler(err_handler); 142 147 } 148 */ 143 149 144 150 // checking that assignment operator changes the underlying object when … … 147 153 *message << "assignment operator on view" << std::endl; 148 154 vec[3]=vec[4]=vec[5]=13; 149 utility::vector vec_view(vec,3,3,1);155 utility::vectorView vec_view(vec,3,3,1); 150 156 utility::vector vec2(3,123.0); 151 157 vec_view=vec2; 152 if (vec[3]!=vec_view[0] || vec[4]!=vec_view[1] || vec[5]!=vec_view[2]) 153 ok=false; 158 if (vec[3]!=vec_view[0] || vec[4]!=vec_view[1] || vec[5]!=vec_view[2]){ 159 *message << " failed\n"; 160 ok=false; 161 } 154 162 } 155 163 … … 160 168 *message << "\tcloning normal vector" << std::endl; 161 169 utility::vector vec2(3,123.0); 162 vec2 .clone(vec);170 vec2 = vec; 163 171 if (vec.size()!=vec2.size()) 164 172 this_ok=false; … … 170 178 this_ok=false; 171 179 *message << "\tcloning vector view" << std::endl; 172 utility::vector* vec_view=new utility::vector(vec,3,3,1); 173 utility::vector vec_view2; 174 vec_view2.clone(*vec_view); 180 utility::vectorView* vec_view=new utility::vectorView(vec,3,3,1); 181 utility::vectorView vec_view2(*vec_view); 175 182 if (!vec_view2.isview()) 176 183 this_ok=false; -
branches/peter-dev/yat/classifier/IGP.h
r936 r1008 86 86 87 87 // Calculate IGP for each class 88 igp_ .clone(utility::vector(target_.nof_classes()));88 igp_ = utility::vector(target_.nof_classes()); 89 89 90 90 for(u_int i=0; i<target_.size(); i++) { -
branches/peter-dev/yat/classifier/KNN.h
r948 r1008 240 240 for(size_t sample=0;sample<distances->columns();sample++) { 241 241 std::vector<size_t> k_index; 242 utility::sort_smallest_index(k_index,k_, utility::vector(*distances,sample,false));242 utility::sort_smallest_index(k_index,k_,distances->column_vec(sample)); 243 243 for(size_t j=0;j<k_index.size();j++) { 244 244 prediction(target_(k_index[j]),sample)++; -
branches/peter-dev/yat/classifier/NBC.cc
r995 r1008 207 207 for (size_t i=0; i<prediction.rows(); ++i){ 208 208 prediction.row_vec(i) *= 209 1.0/sum(prediction.row_vec(i)); 209 1.0/sum( 210 prediction.row_vec(i) 211 ); 210 212 } 211 213 } -
branches/peter-dev/yat/utility/Makefile.am
r995 r1008 29 29 matrix.cc NNI.cc Option.cc OptionFile.cc OptionHelp.cc OptionSwitch.cc \ 30 30 PCA.cc stl_utility.cc SVD.cc TypeInfo.cc utility.cc vector.cc \ 31 vectorBase.cc vector ConstView.cc vectorMutable.cc vectorView.cc WeNNI.cc Peter.cc31 vectorBase.cc vectorView.cc WeNNI.cc 32 32 33 33 include_utilitydir = $(includedir)/yat/utility … … 38 38 IteratorWeighted.h kNNI.h matrix.h NNI.h \ 39 39 Option.h OptionArg.h OptionFile.h OptionHelp.h OptionSwitch.h \ 40 PCA.h stl_utility.h SVD.h TypeInfo.h utility.h vector.h 41 vectorBase.h vector Mutable.h vectorView.h vectorConstView.h40 PCA.h stl_utility.h SVD.h TypeInfo.h utility.h vector.h \ 41 vectorBase.h vectorView.h \ 42 42 WeNNI.h yat_assert.h 43 43 -
branches/peter-dev/yat/utility/PCA.cc
r995 r1008 29 29 #include "SVD.h" 30 30 #include "utility.h" 31 #include "vector ConstView.h"31 #include "vectorView.h" 32 32 33 33 #include <iostream> … … 193 193 utility::vector A_row_sum(A_.rows()); 194 194 for (size_t i=0; i<A_row_sum.size(); ++i){ 195 vectorConstView tmp; 196 tmp = A_.const_row(i); 195 const vectorView tmp(A_.row_vec(i)); 197 196 A_row_sum(i) = sum(tmp); 198 197 } -
branches/peter-dev/yat/utility/matrix.cc
r995 r1008 28 28 #include "vector.h" 29 29 #include "vectorView.h" 30 #include "vectorConstView.h"31 30 #include "utility.h" 32 31 … … 311 310 312 311 313 vectorConstView matrix::const_column(size_t col) const314 { 315 return vector ConstView(*this, col, false);316 } 317 318 319 vectorConstView matrix::const_row(size_t col) const320 { 321 return vector ConstView(*this, col, true);312 const vectorView matrix::column_vec(size_t col) const 313 { 314 return vectorView(*this, col, false); 315 } 316 317 318 const vectorView matrix::row_vec(size_t col) const 319 { 320 return vectorView(*this, col, true); 322 321 } 323 322 … … 563 562 utility::vector res(m.rows()); 564 563 for (size_t i=0; i<res.size(); ++i) 565 res(i) = vector ConstView(m,i) * v;564 res(i) = vectorView(m,i) * v; 566 565 return res; 567 566 } … … 572 571 utility::vector res(m.columns()); 573 572 for (size_t i=0; i<res.size(); ++i) 574 res(i) = v * vector ConstView(m,i,false);573 res(i) = v * vectorView(m,i,false); 575 574 return res; 576 575 } -
branches/peter-dev/yat/utility/matrix.h
r995 r1008 30 30 #include "vector.h" 31 31 #include "vectorView.h" 32 #include "vectorConstView.h"33 32 #include "Exception.h" 34 33 … … 160 159 vectorView column_vec(size_t); 161 160 161 /** 162 */ 163 const vectorView column_vec(size_t) const; 164 162 165 /// 163 166 /// @return The number of columns in the matrix. 164 167 /// 165 168 size_t columns(void) const; 166 167 /**168 */169 vectorConstView const_column(size_t) const;170 171 /**172 */173 vectorConstView const_row(size_t) const;174 169 175 170 /** … … 238 233 */ 239 234 vectorView row_vec(size_t); 235 236 /** 237 */ 238 const vectorView row_vec(size_t) const; 240 239 241 240 /** -
branches/peter-dev/yat/utility/vector.cc
r995 r1008 44 44 45 45 vector::vector(void) 46 : vector Mutable(NULL)46 : vectorBase() 47 47 { 48 48 } … … 50 50 51 51 vector::vector(size_t n, double init_value) 52 : vector Mutable(gsl_vector_alloc(n))52 : vectorBase(gsl_vector_alloc(n)) 53 53 { 54 54 if (!vec_) 55 55 throw utility::GSL_error("vector::vector failed to allocate memory"); 56 56 assert(const_vec_); 57 57 all(init_value); 58 58 } … … 60 60 61 61 vector::vector(const vector& other) 62 : vector Mutable(create_gsl_vector_copy(other))62 : vectorBase(create_gsl_vector_copy(other)) 63 63 { 64 64 } … … 66 66 67 67 vector::vector(const vectorBase& other) 68 : vector Mutable(create_gsl_vector_copy(other))68 : vectorBase(create_gsl_vector_copy(other)) 69 69 { 70 70 } … … 73 73 vector::vector(std::istream& is, char sep) 74 74 throw (utility::IO_error, std::exception) 75 : vector Mutable(NULL)75 : vectorBase() 76 76 { 77 77 // read the data file and store in stl vectors (dynamically … … 145 145 for (size_t j=0; j<nof_columns; j++) 146 146 gsl_vector_set( vec_, n++, data_matrix[i][j] ); 147 const_vec_ = vec_; 147 148 } 148 149 … … 150 151 vector::~vector(void) 151 152 { 152 gsl_vector_free(vec_);153 delete_allocated_memory(); 153 154 } 154 155 … … 165 166 166 167 168 void vector::delete_allocated_memory(void) 169 { 170 if (vec_) 171 gsl_vector_free(vec_); 172 const_vec_ = vec_ = NULL; 173 } 174 175 176 bool vector::isview(void) const 177 { 178 return false; 179 } 180 181 167 182 void vector::resize(size_t n, double init_value) 168 183 { 169 gsl_vector_free(vec_);170 vec_ = gsl_vector_alloc(n);184 delete_allocated_memory(); 185 const_vec_ = vec_ = gsl_vector_alloc(n); 171 186 if (!vec_) 172 187 throw utility::GSL_error("vector::vector failed to allocate memory"); 173 188 all(init_value); 189 174 190 } 175 191 176 192 193 /* 177 194 //Peter use swap idiom 178 const vector & vector::operator=( const vectorBase& other )195 const vectorBase& vector::operator=( const vectorBase& other ) 179 196 { 180 197 if (!other.size()) … … 187 204 return *this; 188 205 } 189 190 191 //Peter use swap idiom 192 const vectorMutable& vector::operator=( vectorMutable& other ) 206 */ 207 208 const vectorBase& vector::operator=( const vector& other ) 209 { 210 return assign(other); 211 } 212 213 /* 214 const vectorBase& vector::assign(vectorBase& other) 215 { 216 assign(other); 217 } 218 */ 219 220 const vectorBase& vector::assign(const vectorBase& other) 193 221 { 194 222 if (!other.size()) … … 199 227 gsl_vector_memcpy(vec_,other.gsl_vector_p()); 200 228 } 229 const_vec_ = vec_; 201 230 return *this; 202 231 } -
branches/peter-dev/yat/utility/vector.h
r995 r1008 29 29 */ 30 30 31 #include "vector Mutable.h"31 #include "vectorBase.h" 32 32 #include "Exception.h" 33 33 #include "Iterator.h" … … 85 85 */ 86 86 87 class vector : public vector Mutable87 class vector : public vectorBase 88 88 { 89 89 public: … … 145 145 146 146 /** 147 \return false 148 */ 149 bool isview(void) const; 150 151 /** 147 152 @brief Resize vector 148 153 … … 154 159 void resize(size_t n, double init_value); 155 160 161 // using vectorBase::operator=; 162 156 163 /** 157 164 \brief The assignment operator. … … 159 166 \return A const reference to the resulting vector. 160 167 */ 161 const vectorMutable& operator=(vectorMutable&);162 const vector& operator=(const vectorBase&);168 //const vectorBase& operator=(const vectorBase&); 169 const vectorBase& operator=(const vector&); 163 170 164 171 private: 172 const vectorBase& assign(const vectorBase& other); 173 //const vectorBase& assign(vectorBase& other); 165 174 166 175 /** … … 177 186 gsl_vector* create_gsl_vector_copy(const vectorBase&) const; 178 187 188 void delete_allocated_memory(void); 179 189 }; 180 190 -
branches/peter-dev/yat/utility/vectorBase.cc
r995 r1008 43 43 44 44 45 vectorBase::vectorBase(void) 46 : vec_(NULL), const_vec_(NULL) 47 { 48 } 49 50 51 vectorBase::vectorBase(gsl_vector* v) 52 : vec_(v), const_vec_(v) 53 { 54 } 55 56 45 57 vectorBase::vectorBase(const gsl_vector* v) 46 : const_vec_(v)58 : vec_(NULL), const_vec_(v) 47 59 { 48 60 } … … 54 66 55 67 68 void vectorBase::all(double value) 69 { 70 assert(vec_); 71 gsl_vector_set_all(vec_,value); 72 } 73 74 56 75 vectorBase::const_iterator vectorBase::begin(void) const 57 76 { 58 return vectorBase::const_iterator(*this, 0); 77 return const_iterator(*this, 0); 78 } 79 80 81 vectorBase::iterator vectorBase::begin(void) 82 { 83 return iterator(*this, 0); 84 } 85 86 87 void vectorBase::div(const vectorBase& other) 88 { 89 assert(vec_); 90 int status=gsl_vector_div(vec_,other.gsl_vector_p()); 91 if (status) 92 throw utility::GSL_error(std::string("vectorBase::div",status)); 59 93 } 60 94 … … 62 96 vectorBase::const_iterator vectorBase::end(void) const 63 97 { 64 return vectorBase::const_iterator(*this, size()); 98 return const_iterator(*this, size()); 99 } 100 101 102 vectorBase::iterator vectorBase::end(void) 103 { 104 return iterator(*this, size()); 65 105 } 66 106 … … 88 128 89 129 130 gsl_vector* vectorBase::gsl_vector_p(void) 131 { 132 return vec_; 133 } 134 135 136 void vectorBase::mul(const vectorBase& other) 137 { 138 assert(vec_); 139 int status=gsl_vector_mul(vec_,other.gsl_vector_p()); 140 if (status) 141 throw utility::GSL_error(std::string("vectorBase::div",status)); 142 } 143 144 90 145 size_t vectorBase::size(void) const 91 146 { 92 if ( const_vec_)147 if (!const_vec_) 93 148 return 0; 94 149 return const_vec_->size; … … 105 160 106 161 162 double& vectorBase::operator()(size_t i) 163 { 164 double* d=gsl_vector_ptr(vec_, i); 165 if (!d) 166 throw utility::GSL_error("vectorBase::operator()",GSL_EINVAL); 167 return *d; 168 } 169 170 171 double& vectorBase::operator[](size_t i) 172 { 173 return this->operator()(i); 174 } 175 176 107 177 const double& vectorBase::operator[](size_t i) const 108 178 { 109 const double* d=gsl_vector_const_ptr(const_vec_, i); 110 if (!d) 111 throw utility::GSL_error("vectorBase::operator[]",GSL_EINVAL); 112 return *d; 179 return this->operator()(i); 113 180 } 114 181 … … 132 199 res += other(i) * (*this)(i); 133 200 return res; 201 } 202 203 204 const vectorBase& vectorBase::operator+=(double d) 205 { 206 assert(vec_); 207 gsl_vector_add_constant(vec_, d); 208 return *this; 209 } 210 211 212 const vectorBase& vectorBase::operator-=(const vectorBase& other) 213 { 214 assert(vec_); 215 int status=gsl_vector_sub(vec_, other.gsl_vector_p()); 216 if (status) 217 throw utility::GSL_error(std::string("vectorBase::sub", status)); 218 return *this; 219 } 220 221 222 const vectorBase& vectorBase::operator-=(const double d) 223 { 224 assert(vec_); 225 gsl_vector_add_constant(vec_, -d); 226 return *this; 227 } 228 229 230 const vectorBase& vectorBase::operator*=(double d) 231 { 232 assert(vec_); 233 gsl_vector_scale(vec_, d); 234 return *this; 134 235 } 135 236 … … 179 280 180 281 282 void shuffle(vectorBase& invec) 283 { 284 random::DiscreteUniform rnd; 285 std::random_shuffle(invec.begin(), invec.end(), rnd); 286 } 287 288 181 289 void sort_index(std::vector<size_t>& sort_index, const vectorBase& invec) 182 290 { -
branches/peter-dev/yat/utility/vectorBase.h
r995 r1008 10 10 Copyright (C) 2006 Jari Häkkinen, Markus Ringnér 11 11 Copyright (C) 2007 Jari Häkkinen, Peter Johansson 12 Copyright (C) 2008 Peter Johansson 12 13 13 14 This file is part of the yat library, http://trac.thep.lu.se/trac/yat … … 89 90 public: 90 91 92 /// \brief vectorBase::iterator 93 typedef Iterator<double&, vectorBase> iterator; 94 91 95 /// \brief vectorBase::const_iterator 92 96 typedef Iterator<const double, const vectorBase> const_iterator; 93 97 94 98 /** 99 \brief default constructor 100 */ 101 vectorBase(void); 102 103 /** 95 104 \brief Constructor. 96 105 */ 106 vectorBase(gsl_vector*); 107 108 /** 109 \brief Constructor. 110 */ 97 111 vectorBase(const gsl_vector*); 98 112 … … 102 116 virtual ~vectorBase(void); 103 117 118 /// 119 /// Set all elements to \a value. 120 /// 121 void all(double value); 122 123 /** 124 \return mutable iterator to start of vectorBase 125 */ 126 iterator begin(void); 127 104 128 /** 105 129 \return read-only iterator to start of vectorBase 106 130 */ 107 131 const_iterator begin(void) const; 132 133 /** 134 \brief This function performs element-wise division, \f$ this_i = 135 this_i/other_i \; \forall i \f$. 136 137 \throw GSL_error if dimensions mis-match. 138 */ 139 void div(const vectorBase& other); 140 141 /** 142 \return mutable iterator to end of vectorBase 143 */ 144 iterator end(void); 108 145 109 146 /** … … 124 161 125 162 /// 163 /// @return A pointer to the internal GSL vector, 164 /// 165 gsl_vector* gsl_vector_p(void); 166 167 /// 126 168 /// @return A const pointer to the internal GSL vector, 127 169 /// 128 170 const gsl_vector* gsl_vector_p(void) const; 129 171 172 /** 173 174 Check if the vector object is a view (sub-vector) to another 175 vector. 176 177 \return True if the object is a view, false othwerwise. 178 179 */ 180 virtual bool isview(void) const=0; 181 182 /** 183 \brief This function performs element-wise multiplication, \f$ 184 this_i = this_i * other_i \; \forall i \f$. 185 186 \throw GSL_error if dimensions mis-match. 187 */ 188 void mul(const vectorBase& other); 189 190 /** 191 \brief Reverse the order of elements in the vectorBase. 192 */ 193 void reverse(void); 194 130 195 /// 131 196 /// @return the number of elements in the vectorBase. … … 134 199 135 200 /** 201 \brief Exchange elements \a i and \a j. 202 203 \throw GSL_error if vectorBase lengths differs. 204 */ 205 void swap(size_t i, size_t j); 206 207 /** 136 208 \brief Element access operator. 137 209 138 \return Const reference to element \a i.210 \return Reference to element \a i. 139 211 140 212 \throw If GSL range checks are enabled in the underlying GSL … … 142 214 of range. 143 215 */ 216 double& operator()(size_t i); 217 // Peter, remove this one 218 double& operator[](size_t i); 219 220 /** 221 \brief Element access operator. 222 223 \return Const reference to element \a i. 224 225 \throw If GSL range checks are enabled in the underlying GSL 226 library a GSL_error exception is thrown if either index is out 227 of range. 228 */ 144 229 const double& operator()(size_t i) const; 230 // Peter, remove this one 145 231 const double& operator[](size_t i) const; 146 232 … … 176 262 double operator*(const vectorBase&) const; 177 263 264 /** 265 \brief The assignment operator. 266 267 Dimensions of the vectorBases must match. If the LHS vectorBase is a 268 view, the underlying data will be changed. 269 270 \return A const reference to the resulting vectorBase. 271 272 \see void set(const vectorBase&). 273 274 \throw GSL_error if dimensions mis-match. 275 */ 276 //const vectorBase& operator=(vectorBase&); 277 278 /** 279 \brief Addition and assign operator. VectorBase addition, \f$ 280 this_i = this_i + other_i \; \forall i \f$. 281 282 \return A const reference to the resulting vectorBase. 283 284 \throw GSL_error if dimensions mis-match. 285 */ 286 const vectorBase& operator+=(const vectorBase&); 287 288 /** 289 \brief Add a constant to a vectorBase, \f$ this_i = this_i + d \; 290 \forall i \f$. 291 292 \return A const reference to the resulting vectorBase. 293 */ 294 const vectorBase& operator+=(double d); 295 296 /** 297 \brief Subtract and assign operator. VectorBase subtraction, \f$ 298 this_i = this_i - other_i \; \forall i \f$. 299 300 \return A const reference to the resulting vectorBase. 301 302 \throw GSL_error if dimensions mis-match. 303 */ 304 const vectorBase& operator-=(const vectorBase&); 305 306 /** 307 \brief Subtract a constant to a vectorBase, \f$ this_i = this_i - d 308 \; \forall i \f$. 309 310 \return A const reference to the resulting vectorBase. 311 */ 312 const vectorBase& operator-=(double d); 313 314 /** 315 \brief Multiply with scalar and assign operator, \f$ this_i = 316 this_i * d \; \forall i \f$. 317 318 \return A const reference to the resulting vectorBase. 319 */ 320 const vectorBase& operator*=(double d); 321 322 323 178 324 protected: 325 gsl_vector* vec_; 179 326 const gsl_vector* const_vec_; 327 328 /* 329 struct proxy 330 { 331 gsl_vector* vec_; 332 }; 333 */ 334 335 private: 336 // copy assignment no allowed 337 const vectorBase& operator=(const vectorBase&); 338 public: 339 /** 340 */ 341 //operator proxy(); 342 180 343 }; 181 344 … … 236 399 237 400 /** 238 Create a vectorBase \a sort_index containing the indeces of 401 Randomly shuffles the elements in vectorBase \a invec 402 */ 403 void shuffle(vectorBase& invec); 404 405 /** 406 Sort the elements in the vectorBase. 407 */ 408 void sort(vectorBase&); 409 410 /** 411 Create a vector \a sort_index containing the indeces of 239 412 elements in a another vectorBase \a invec. The elements of \a 240 413 sort_index give the index of the vectorBase element which would … … 251 424 smallest elements in \a invec. 252 425 */ 253 void sort_smallest_index(std::vector<size_t>& sort_index, size_t k, const254 vectorBase& invec);426 void sort_smallest_index(std::vector<size_t>& sort_index, size_t k, 427 const vectorBase& invec); 255 428 256 429 /** … … 258 431 largest elements in \a invec. 259 432 */ 260 void sort_largest_index(std::vector<size_t>& sort_index, size_t k, const 261 vectorBase& invec); 262 263 433 void sort_largest_index(std::vector<size_t>& sort_index, size_t k, 434 const vectorBase& invec); 264 435 265 436 /** … … 271 442 272 443 /** 444 \brief Swap vector elements by copying. 445 446 The two vectorMutables must have the same length. 447 448 \throw GSL_error if vectorMutable lengths differs. 449 */ 450 //void swap(vectorMutable&, vectorMutable&); 451 452 /** 273 453 \brief The output operator for the vectorBase class. 274 454 */ -
branches/peter-dev/yat/utility/vectorView.cc
r995 r1008 44 44 45 45 vectorView::vectorView(void) 46 : vectorMutable(NULL) 47 { 48 } 49 50 51 vectorView::vectorView(vectorMutable& other) 52 : vectorMutable(NULL), view_(NULL) 53 { 54 view_ = new gsl_vector_view(gsl_vector_subvector(other.gsl_vector_p(),0, 55 other.size())); 56 const_vec_ = vec_ = &(view_->vector); 57 } 58 59 60 vectorView::vectorView(vectorMutable& v, size_t offset,size_t n,size_t stride) 61 : vectorMutable(NULL) 46 : vectorBase() 47 { 48 } 49 50 51 vectorView::vectorView(vectorView& other) 52 : vectorBase() 53 { 54 view_ = new gsl_vector_view(gsl_vector_subvector(other.gsl_vector_p(), 55 0, other.size())); 56 const_vec_ = vec_ = &(view_->vector); 57 58 } 59 60 61 vectorView::vectorView(const vectorView& other) 62 : vectorBase(), view_(NULL) 63 { 64 const_view_ = new gsl_vector_const_view( 65 gsl_vector_const_subvector(other.gsl_vector_p(), 0, other.size())); 66 const_vec_ = &(const_view_->vector); 67 } 68 69 70 vectorView::vectorView(vectorBase& other) 71 : vectorBase(other.gsl_vector_p()) 72 { 73 view_ = 74 new gsl_vector_view(gsl_vector_subvector_with_stride(other.gsl_vector_p(), 75 0, 1,other.size())); 76 const_vec_ = vec_ = &(view_->vector); 77 } 78 79 80 /* 81 vectorView::vectorView(const vectorBase& other) 82 : vectorBase(other.const_vec_), view_(NULL) 83 { 84 } 85 */ 86 87 vectorView::vectorView(vectorBase& v, size_t offset,size_t n,size_t stride) 88 : vectorBase() 62 89 { 63 90 view_ = … … 68 95 69 96 97 vectorView::vectorView(const vectorBase& v, size_t offset,size_t n, 98 size_t stride) 99 : vectorBase(), view_(NULL) 100 { 101 const_view_ = new gsl_vector_const_view( 102 gsl_vector_const_subvector_with_stride(v.gsl_vector_p(), 103 offset, stride,n)); 104 const_vec_ = &(const_view_->vector); 105 } 106 107 70 108 vectorView::vectorView(matrix& m, size_t i, bool row) 71 : vector Mutable(NULL)109 : vectorBase() 72 110 { 73 111 view_=new gsl_vector_view(row ? … … 78 116 79 117 118 vectorView::vectorView(const matrix& m, size_t i, bool row) 119 : vectorBase(), view_(NULL) 120 { 121 const_view_ = 122 new gsl_vector_const_view(row ? 123 gsl_matrix_const_row(m.gsl_matrix_p(),i) : 124 gsl_matrix_const_column(m.gsl_matrix_p(),i)); 125 const_vec_ = &(const_view_->vector); 126 } 127 128 129 /* 80 130 vectorView::vectorView(proxy p) 81 : vector Mutable(NULL)131 : vectorBase() 82 132 { 83 133 view_ = new gsl_vector_view(gsl_vector_subvector(p.vec_, 0, p.vec_->size)); 84 134 const_vec_ = vec_ = &(view_->vector); 85 135 } 86 136 */ 87 137 88 138 vectorView::~vectorView(void) 89 139 { 90 clean_up();91 } 92 93 94 const vector Mutable& vectorView::operator=(vectorMutable& other )140 delete_allocated_memory(); 141 } 142 143 144 const vectorBase& vectorView::assign(const vectorBase& other ) 95 145 { 96 146 if (size()!=other.size()) … … 98 148 if (!other.size()) 99 149 return *this; 100 clean_up(); 101 view_ = new gsl_vector_view(gsl_vector_subvector(other.gsl_vector_p(),0, 102 other.size())); 103 const_vec_ = vec_ = &view_->vector; 150 gsl_vector_memcpy(vec_, other.gsl_vector_p()); 151 const_vec_ = vec_; 104 152 return *this; 105 153 } 106 154 107 155 108 const vectorMutable& vectorView::operator=(proxy p) 156 bool vectorView::isview(void) const 157 { 158 return true; 159 } 160 161 162 163 const vectorBase& vectorView::operator=(const vectorView& other ) 164 { 165 return assign(other); 166 } 167 168 169 const vectorBase& vectorView::operator=(const vectorBase& other ) 170 { 171 return assign(other); 172 } 173 174 175 /* 176 const vectorBase& vectorView::operator=(proxy p) 109 177 { 110 178 if (size()!=p.vec_->size) … … 114 182 clean_up(); 115 183 view_ = new gsl_vector_view(gsl_vector_subvector(p.vec_,0, p.vec_->size)); 116 const_vec_ =vec_ = &view_->vector;184 const_vec_=vec_ = &view_->vector; 117 185 return *this; 118 186 } 119 120 121 void vectorView:: clean_up(void)122 { 123 if (view_) 187 */ 188 189 void vectorView::delete_allocated_memory(void) 190 { 191 if (view_){ 124 192 delete view_; 193 view_=NULL; 194 } 195 else if (const_view_){ 196 delete const_view_; 197 const_view_=NULL; 198 } 199 const_vec_ = vec_ = NULL; 125 200 } 126 201 -
branches/peter-dev/yat/utility/vectorView.h
r995 r1008 29 29 */ 30 30 31 #include "vector Mutable.h"31 #include "vectorBase.h" 32 32 33 33 #include "Exception.h" … … 87 87 */ 88 88 89 class vectorView : public vector Mutable89 class vectorView : public vectorBase 90 90 { 91 91 public: … … 101 101 \brief The copy constructor. 102 102 */ 103 vectorView(vectorMutable& other); 103 vectorView(vectorBase& other); 104 vectorView(vectorView& other); 105 // Peter, privatize 106 vectorView(const vectorView& other); 104 107 105 108 /** … … 122 125 \throw GSL_error if a view cannot be set up. 123 126 */ 124 vectorView(vectorMutable& v, size_t offset, size_t n, size_t stride=1); 127 vectorView(vectorBase& v, size_t offset, size_t n, size_t stride=1); 128 // Peter, privatize 129 vectorView(const vectorBase& v, size_t offset, size_t n, size_t stride=1); 125 130 126 131 /// … … 146 151 vectorView(matrix& m, size_t i, bool row=true); 147 152 153 // Peter should be private 154 vectorView(const matrix& m, size_t i, bool row=true); 155 148 156 /** 149 157 */ 150 vectorView(proxy p);158 //vectorView(proxy p); 151 159 152 160 /// … … 154 162 /// 155 163 ~vectorView(void); 164 165 /** 166 \return true 167 */ 168 bool isview(void) const; 156 169 157 170 /** … … 162 175 \throw GSL_error if dimensions mis-match. 163 176 */ 164 const vectorMutable& operator=(vectorMutable&); 177 const vectorBase& operator=(const vectorBase&); 178 const vectorBase& operator=(const vectorView&); 165 179 166 const vectorMutable& operator=(proxy);180 //const vectorBase& operator=(proxy); 167 181 168 182 private: 169 void clean_up(void); 183 const vectorBase& assign(const vectorBase& other); 184 void delete_allocated_memory(void); 170 185 171 186 gsl_vector_view* view_; 187 gsl_vector_const_view* const_view_; 172 188 173 189 };
Note: See TracChangeset
for help on using the changeset viewer.