diff -r 000000000000 -r bde4ae8d615e os/ossrv/genericopenlibs/cppstdlib/stl/src/stdio_streambuf.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/ossrv/genericopenlibs/cppstdlib/stl/src/stdio_streambuf.h Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,101 @@ +/* + * Copyright (c) 1999 + * Silicon Graphics Computer Systems, Inc. + * + * Copyright (c) 1999 + * Boris Fomitchev + * + * This material is provided "as is", with absolutely no warranty expressed + * or implied. Any use is at your own risk. + * + * Permission to use or copy this software for any purpose is hereby granted + * without fee, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. + * + */ + +// This header is an extension. It defines two streambufs: +// stdio_istreambuf, a read-only streambuf synchronized with a C stdio +// FILE object, and stdio_ostreambuf, a write-only streambuf +// synchronized with a C stdio FILE object. Note that neither +// stdio_istreambuf nor stdio_ostreambuf is a template; both classes +// are derived from basic_streambuf >. + +// Note: the imbue() member function is a no-op. In particular, these +// classes assume that codecvt is always an identity +// transformation. This is true of the default locale, and of all locales +// defined for the C I/O library. If you need to use a locale where +// the codecvt facet performs a nontrivial +// conversion, then you should use basic_filebuf<> instead of stdio_istreambuf +// or stdio_ostreambuf. (If you don't understand what any of this means, +// then it's not a feature you need to worry about. Locales where +// codecvt does something nontrivial are a rare +// corner case.) + + +#ifndef _STLP_STDIO_STREAMBUF +#define _STLP_STDIO_STREAMBUF + +#include +#include // For FILE. + +_STLP_BEGIN_NAMESPACE +_STLP_MOVE_TO_PRIV_NAMESPACE + +// Base class for features common to stdio_istreambuf and stdio_ostreambuf +class stdio_streambuf_base : + public basic_streambuf > /* FILE_basic_streambuf */ { +public: // Constructor, destructor. + // The argument may not be null. It must be an open file pointer. + stdio_streambuf_base(FILE*); + + // The destructor flushes the stream, but does not close it. + ~stdio_streambuf_base(); + +protected: // Virtual functions from basic_streambuf. + streambuf* setbuf(char*, streamsize); + + pos_type seekoff(off_type, ios_base::seekdir, + ios_base::openmode + = ios_base::in | ios_base::out); + pos_type seekpos(pos_type, + ios_base::openmode + = ios_base::in | ios_base::out); + int sync(); + +protected: + FILE* _M_file; +}; + +class stdio_istreambuf : public stdio_streambuf_base { +public: // Constructor, destructor. + stdio_istreambuf(FILE* __f) : stdio_streambuf_base(__f) {} + ~stdio_istreambuf(); + +protected: // Virtual functions from basic_streambuf. + streamsize showmanyc(); + int_type underflow(); + int_type uflow(); + virtual int_type pbackfail(int_type c = traits_type::eof()); +}; + +class stdio_ostreambuf : public stdio_streambuf_base { +public: // Constructor, destructor. + stdio_ostreambuf(FILE* __f) : stdio_streambuf_base(__f) {} + ~stdio_ostreambuf(); + +protected: // Virtual functions from basic_streambuf. + streamsize showmanyc(); + int_type overflow(int_type c = traits_type::eof()); +}; + +_STLP_MOVE_TO_STD_NAMESPACE +_STLP_END_NAMESPACE + +#endif /* _STLP_STDIO_STREAMBUF */ + +// Local Variables: +// mode:C++ +// End: