#ifndef _FULL_STREAM_H
#define _FULL_STREAM_H
#include <streambuf>
/*
* This full_streambuf purpose is to act like a full disk to check the right behavior
* of the STLport code in such a case.
*/
class full_streambuf : public std::streambuf {
public:
typedef std::streambuf _Base;
typedef _Base::int_type int_type;
typedef _Base::traits_type traits_type;
full_streambuf(size_t nb_output, bool do_throw = false)
: _nb_output(nb_output), _do_throw(do_throw)
{}
std::string const& str() const
{ return _buf; }
protected:
int_type overflow(int_type c) {
if (_nb_output == 0) {
#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
if (_do_throw) {
throw "streambuf full";
}
#endif
return traits_type::eof();
}
--_nb_output;
_buf += traits_type::to_char_type(c);
return c;
}
private:
size_t _nb_output;
bool _do_throw;
std::string _buf;
};
#endif //_FULL_STREAM_H