diff -r e20de85af2ee -r ce057bb09d0b 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 Fri Jun 04 16:20:51 2010 +0100 @@ -0,0 +1,62 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#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