X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f42c1512dd009866feb5a4410ef5e2dd1e535404..616c0d1f3ac084bb92f0a75dc48812e8647f1b22:/include/wx/stream.h diff --git a/include/wx/stream.h b/include/wx/stream.h index 3f34c95212..80c81bcbdc 100644 --- a/include/wx/stream.h +++ b/include/wx/stream.h @@ -64,7 +64,7 @@ public: bool operator!() const { return !IsOk(); } // reset the stream state - void Reset() { m_lasterror = wxSTREAM_NO_ERROR; } + void Reset(wxStreamError error = wxSTREAM_NO_ERROR) { m_lasterror = error; } // this doesn't make sense for all streams, always test its return value virtual size_t GetSize() const; @@ -83,7 +83,7 @@ protected: friend class wxStreamBuffer; DECLARE_ABSTRACT_CLASS(wxStreamBase) - DECLARE_NO_COPY_CLASS(wxStreamBase) + wxDECLARE_NO_COPY_CLASS(wxStreamBase); }; // ---------------------------------------------------------------------------- @@ -218,7 +218,7 @@ protected: friend class wxStreamBuffer; DECLARE_ABSTRACT_CLASS(wxInputStream) - DECLARE_NO_COPY_CLASS(wxInputStream) + wxDECLARE_NO_COPY_CLASS(wxInputStream); }; // ---------------------------------------------------------------------------- @@ -254,7 +254,7 @@ protected: friend class wxStreamBuffer; DECLARE_ABSTRACT_CLASS(wxOutputStream) - DECLARE_NO_COPY_CLASS(wxOutputStream) + wxDECLARE_NO_COPY_CLASS(wxOutputStream); }; // ============================================================================ @@ -282,7 +282,7 @@ protected: size_t m_currentPos; DECLARE_DYNAMIC_CLASS(wxCountingOutputStream) - DECLARE_NO_COPY_CLASS(wxCountingOutputStream) + wxDECLARE_NO_COPY_CLASS(wxCountingOutputStream); }; // --------------------------------------------------------------------------- @@ -308,7 +308,7 @@ protected: bool m_owns; DECLARE_ABSTRACT_CLASS(wxFilterInputStream) - DECLARE_NO_COPY_CLASS(wxFilterInputStream) + wxDECLARE_NO_COPY_CLASS(wxFilterInputStream); }; class WXDLLIMPEXP_BASE wxFilterOutputStream : public wxOutputStream @@ -330,7 +330,7 @@ protected: bool m_owns; DECLARE_ABSTRACT_CLASS(wxFilterOutputStream) - DECLARE_NO_COPY_CLASS(wxFilterOutputStream) + wxDECLARE_NO_COPY_CLASS(wxFilterOutputStream); }; enum wxStreamProtocolType @@ -421,13 +421,13 @@ public: InitWithStream(stream, mode); } - wxStreamBuffer(wxInputStream& stream, size_t bufsize) + wxStreamBuffer(size_t bufsize, wxInputStream& stream) { InitWithStream(stream, read); SetBufferIO(bufsize); } - wxStreamBuffer(wxOutputStream& stream, size_t bufsize) + wxStreamBuffer(size_t bufsize, wxOutputStream& stream) { InitWithStream(stream, write); SetBufferIO(bufsize); @@ -530,7 +530,7 @@ protected: m_flushable; - DECLARE_NO_ASSIGN_CLASS(wxStreamBuffer) + wxDECLARE_NO_ASSIGN_CLASS(wxStreamBuffer); }; // --------------------------------------------------------------------------- @@ -579,7 +579,7 @@ protected: wxStreamBuffer *m_i_streambuf; - DECLARE_NO_COPY_CLASS(wxBufferedInputStream) + wxDECLARE_NO_COPY_CLASS(wxBufferedInputStream); }; // ---------------------------------------------------------------------------- @@ -631,7 +631,7 @@ protected: wxStreamBuffer *m_o_streambuf; - DECLARE_NO_COPY_CLASS(wxBufferedOutputStream) + wxDECLARE_NO_COPY_CLASS(wxBufferedOutputStream); }; #if WXWIN_COMPATIBILITY_2_6 @@ -640,6 +640,54 @@ protected: inline wxStreamBuffer *wxBufferedOutputStream::OutputStreamBuffer() const { return m_o_streambuf; } #endif // WXWIN_COMPATIBILITY_2_6 +// --------------------------------------------------------------------------- +// wxWrapperInputStream: forwards all IO to another stream. +// --------------------------------------------------------------------------- + +class WXDLLIMPEXP_BASE wxWrapperInputStream : public wxFilterInputStream +{ +public: + // Constructor fully initializing the stream. The overload taking pointer + // takes ownership of the parent stream, the one taking reference does not. + // + // Notice that this class also has a default ctor but it's protected as the + // derived class is supposed to take care of calling InitParentStream() if + // it's used. + wxWrapperInputStream(wxInputStream& stream); + wxWrapperInputStream(wxInputStream* stream); + + // Override the base class methods to forward to the wrapped stream. + virtual wxFileOffset GetLength() const; + virtual bool IsSeekable() const; + +protected: + virtual size_t OnSysRead(void *buffer, size_t size); + virtual wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode); + virtual wxFileOffset OnSysTell() const; + + // Ensure that our own last error is the same as that of the real stream. + // + // This method is const because the error must be updated even from const + // methods (in other words, it really should have been mutable in the first + // place). + void SynchronizeLastError() const + { + const_cast(this)-> + Reset(m_parent_i_stream->GetLastError()); + } + + // Default constructor, use InitParentStream() later. + wxWrapperInputStream(); + + // Set up the wrapped stream for an object initialized using the default + // constructor. The ownership logic is the same as above. + void InitParentStream(wxInputStream& stream); + void InitParentStream(wxInputStream* stream); + + wxDECLARE_NO_COPY_CLASS(wxWrapperInputStream); +}; + + #endif // wxUSE_STREAMS #endif // _WX_WXSTREAM_H__