| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/stdstream.h
- // Purpose: Header of std::istream and std::ostream derived wrappers for
- // wxInputStream and wxOutputStream
- // Author: Jonathan Liu <net147@gmail.com>
- // Created: 2009-05-02
- // Copyright: (c) 2009 Jonathan Liu
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_STDSTREAM_H_
- #define _WX_STDSTREAM_H_
- #include "wx/defs.h" // wxUSE_STD_IOSTREAM
- #if wxUSE_STREAMS && wxUSE_STD_IOSTREAM
- #include "wx/defs.h"
- #include "wx/stream.h"
- #include "wx/ioswrap.h"
- // ==========================================================================
- // wxStdInputStreamBuffer
- // ==========================================================================
- class WXDLLIMPEXP_BASE wxStdInputStreamBuffer : public std::streambuf
- {
- public:
- wxStdInputStreamBuffer(wxInputStream& stream);
- virtual ~wxStdInputStreamBuffer() { }
- protected:
- virtual std::streambuf *setbuf(char *s, std::streamsize n);
- virtual std::streampos seekoff(std::streamoff off,
- std::ios_base::seekdir way,
- std::ios_base::openmode which =
- std::ios_base::in |
- std::ios_base::out);
- virtual std::streampos seekpos(std::streampos sp,
- std::ios_base::openmode which =
- std::ios_base::in |
- std::ios_base::out);
- virtual std::streamsize showmanyc();
- virtual std::streamsize xsgetn(char *s, std::streamsize n);
- virtual int underflow();
- virtual int uflow();
- virtual int pbackfail(int c = EOF);
- // Special work around for VC8/9 (this bug was fixed in VC10 and later):
- // these versions have non-standard _Xsgetn_s() that it being called from
- // the stream code instead of xsgetn() and so our overridden implementation
- // never actually gets used. To work around this, forward to it explicitly.
- #if defined(__VISUALC8__) || defined(__VISUALC9__)
- virtual std::streamsize
- _Xsgetn_s(char *s, size_t WXUNUSED(size), std::streamsize n)
- {
- return xsgetn(s, n);
- }
- #endif // VC8 or VC9
- wxInputStream& m_stream;
- int m_lastChar;
- };
- // ==========================================================================
- // wxStdInputStream
- // ==========================================================================
- class WXDLLIMPEXP_BASE wxStdInputStream : public std::istream
- {
- public:
- wxStdInputStream(wxInputStream& stream);
- virtual ~wxStdInputStream() { }
- protected:
- wxStdInputStreamBuffer m_streamBuffer;
- };
- // ==========================================================================
- // wxStdOutputStreamBuffer
- // ==========================================================================
- class WXDLLIMPEXP_BASE wxStdOutputStreamBuffer : public std::streambuf
- {
- public:
- wxStdOutputStreamBuffer(wxOutputStream& stream);
- virtual ~wxStdOutputStreamBuffer() { }
- protected:
- virtual std::streambuf *setbuf(char *s, std::streamsize n);
- virtual std::streampos seekoff(std::streamoff off,
- std::ios_base::seekdir way,
- std::ios_base::openmode which =
- std::ios_base::in |
- std::ios_base::out);
- virtual std::streampos seekpos(std::streampos sp,
- std::ios_base::openmode which =
- std::ios_base::in |
- std::ios_base::out);
- virtual std::streamsize xsputn(const char *s, std::streamsize n);
- virtual int overflow(int c);
- wxOutputStream& m_stream;
- };
- // ==========================================================================
- // wxStdOutputStream
- // ==========================================================================
- class WXDLLIMPEXP_BASE wxStdOutputStream : public std::ostream
- {
- public:
- wxStdOutputStream(wxOutputStream& stream);
- virtual ~wxStdOutputStream() { }
- protected:
- wxStdOutputStreamBuffer m_streamBuffer;
- };
- #endif // wxUSE_STREAMS && wxUSE_STD_IOSTREAM
- #endif // _WX_STDSTREAM_H_
|