This is a modified version of ostrstream for Eco Lab use, with slightly altered behaviour making it more suited for Eco Lab use.
In particular, operator<< add spaces in between its arguments,
and a new operator| is defined that is similar to ostrstream
operator<<. This makes it easier to construct TCL commands.
Note that | has higher precedence than <<, so when
mixing the two, ensure that no << operator appears to the right
of |, or use brackets to ensure the correct interpretaion:
eg.
s << a << b | c;
or
(s | a) << b | c;
but not
s | a << b | c;
In any case, you'll most likely get a compiler warning if you do the wrong thing.
eco_strstream is derived from eco_string class, so has
all the string behaviour. The str() member is defiend as
equivalent to a (char*) cast for compatibility with ostrstream.
However, the contents of the char* are not frozen, unless
explicitly specified with freeze() (opposite to ostrstream behaviour).
class eco_strstream: public eco_string
{
public:
char* str() const;
template<class T>
eco_strstream& operator<<(const T x);
template<class T>
eco_strstream& operator|(T);
}
inline ostream& operator<<(ostream& x, eco_strstream& y);