diff -r 000000000000 -r e4d67989cc36 genericopenlibs/cppstdlib/stl/test/unit/full_streambuf.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/genericopenlibs/cppstdlib/stl/test/unit/full_streambuf.h Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,46 @@ +#ifndef _FULL_STREAM_H +#define _FULL_STREAM_H + +#include + +/* + * 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