git-svn-id: svn://db.shs.com.ru/pip@664 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2018-11-27 08:20:02 +00:00
parent 659f53470a
commit 139694fce3
2 changed files with 8 additions and 11 deletions

View File

@@ -85,12 +85,12 @@ public:
inline Row & operator =(const Row & other) {
if (p_ == other.p_ && st_ == other.st_) return *this;
size_t sz = piMin<size_t>(sz_, other.sz_);
copyRow(st_, other.data(), sz, p_);
p_->_copyRaw(p_->data(st_), other.data(), sz);
return *this;
}
inline Row & operator =(const PIVector<T> & other) {
size_t sz = piMin<size_t>(sz, other.size());
copyRow(st_, other.data(), sz, p_);
p_->_copyRaw(p_->data(st_), other.data(), sz);
return *this;
}
inline PIVector<T> toVector() const {return PIVector<T>(p_->data(st_), sz_);}
@@ -153,7 +153,7 @@ public:
inline PIVector<T> toVector() const {
PIVector<T> ret;
ret.reserve(sz_);
for (int i=0; i<rows_; i++) ret << (*p_)[i * step_ + row_];
for (int i=0; i<size(); i++) ret << (*p_)[i * step_ + row_];
return ret;
}
};
@@ -171,12 +171,12 @@ public:
inline ColConst col(size_t index) const {return ColConst(this, index);}
inline PIVector2D<T> & setRow(size_t row, const Row & other) {
size_t sz = piMin<size_t>(cols_, other.p_->cols_);
copyRow(cols_ * row, other.data(), sz, &mat);
mat._copyRaw(mat.data(cols_ * row), other.data(), sz);
return *this;
}
inline PIVector2D<T> & setRow(size_t row, const PIVector<T> & other) {
size_t sz = piMin<size_t>(cols_, other.size());
copyRow(cols_ * row, other.data(), sz, &mat);
mat._copyRaw(mat.data(cols_ * row), other.data(), sz);
return *this;
}
@@ -203,11 +203,6 @@ public:
}
protected:
inline void copyRow(size_t start, const T * data, size_t size, PIVector<T> * dst) {
for (size_t i = 0; i < size; i++)
(*dst)[start + i] = data[i];
}
size_t rows_, cols_;
PIVector<T> mat;
};
@@ -233,7 +228,6 @@ inline PICout operator <<(PICout s, const PIVector2D<T> & v) {
}
#define __PIVECTOR2D_SIMPLE_TYPE__(T) \
template<> inline void PIVector2D<T>::copyRow(size_t start, const T * data, size_t size, PIVector<T> * dst) {memcpy(dst->data(start), data, size * sizeof(T));} \
template<> inline PIVector2D<T> & PIVector2D<T>::_resizeRaw(size_t r, size_t c) {rows_ = r; cols_ = c; mat._resizeRaw(r*c); return *this;}
__PIVECTOR2D_SIMPLE_TYPE__(bool)