genericopenlibs/cppstdlib/stl/test/unit/full_streambuf.h
changeset 0 e4d67989cc36
child 18 47c74d1534e1
--- /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 <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