Added >> stream operator to Matrix to easily read from input streams
parent
5fa1b4b00e
commit
b7a13c7061
|
@ -248,11 +248,12 @@ istream& operator>>(istream& inputStream, Matrix& destinationMatrix) {
|
|||
coeffs.push_back(vector<double>());
|
||||
if(!first)
|
||||
coeffs.back().reserve(width);
|
||||
std::copy(istream_iterator<double>(stringstream(line)), istream_iterator<double>(),
|
||||
stringstream lineStream(line);
|
||||
std::copy(istream_iterator<double>(lineStream), istream_iterator<double>(),
|
||||
back_insert_iterator<vector<double> >(coeffs.back()));
|
||||
if(first)
|
||||
width = coeffs.back().size();
|
||||
if(coeffs.size() != width)
|
||||
if(coeffs.back().size() != width)
|
||||
throw runtime_error("Error reading matrix from input stream, inconsistent numbers of elements in rows");
|
||||
++ height;
|
||||
}
|
||||
|
@ -262,7 +263,10 @@ istream& operator>>(istream& inputStream, Matrix& destinationMatrix) {
|
|||
int row = 0;
|
||||
BOOST_FOREACH(const vector<double>& rowVec, coeffs) {
|
||||
destinationMatrix.row(row) = Eigen::Map<const Eigen::RowVectorXd>(&rowVec[0], width);
|
||||
++ row;
|
||||
}
|
||||
|
||||
return inputStream;
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
|
|
|
@ -188,7 +188,7 @@ void save(const Matrix& A, const std::string &s, const std::string& filename);
|
|||
* tab-, space-, or comma-separated, similar to the format read by the MATLAB
|
||||
* dlmread command.
|
||||
*/
|
||||
istream& operator>>(istream& inputStream, Matrix& destinationMatrix);
|
||||
std::istream& operator>>(std::istream& inputStream, Matrix& destinationMatrix);
|
||||
|
||||
/**
|
||||
* extract submatrix, slice semantics, i.e. range = [i1,i2[ excluding i2
|
||||
|
|
Loading…
Reference in New Issue