Opened 12 years ago
Last modified 12 years ago
#4617 new Bugs
Use of stringstreams in numeric/ublas/io
| Reported by: | Owned by: | Gunter | |
|---|---|---|---|
| Milestone: | To Be Determined | Component: | uBLAS |
| Version: | Boost 1.44.0 | Severity: | Optimization |
| Keywords: | Cc: |
Description
Not 100% sure it is a bug, but use of additional string streams seems a bit odd.
template<class E, class T, class ME>
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
std::basic_ostream<E, T> &operator << (std::basic_ostream<E, T> &os,
const matrix_expression<ME> &m) {
typedef typename ME::size_type size_type;
size_type size1 = m ().size1 ();
size_type size2 = m ().size2 ();
std::basic_ostringstream<E, T, std::allocator<E> > s;
s.flags (os.flags ());
s.imbue (os.getloc ());
s.precision (os.precision ());
s << '[' << size1 << ',' << size2 << "](";
if (size1 > 0) {
s << '(' ;
if (size2 > 0)
s << m () (0, 0);
for (size_type j = 1; j < size2; ++ j)
s << ',' << m () (0, j);
s << ')';
}
for (size_type i = 1; i < size1; ++ i) {
s << ",(" ;
if (size2 > 0)
s << m () (i, 0);
for (size_type j = 1; j < size2; ++ j)
s << ',' << m () (i, j);
s << ')';
}
s << ')';
return os << s.str ().c_str ();
}
why do we create stringstream 's' and serialize everything in memory and only then pump it to 'os'?
Change History (2)
comment:1 by , 12 years ago
comment:2 by , 12 years ago
could you, please, elaborate a bit? or maybe post a link to some discussion on the matter?
Note:
See TracTickets
for help on using tickets.

Using a stringstream is a common way of making sure that width is handled correctly.