X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/75ed1d15d0d866cac78f7c0da176db8dd5288bc8..8ffd43c56b793781fde046aa532340b92a0067eb:/include/wx/stream.h?ds=sidebyside diff --git a/include/wx/stream.h b/include/wx/stream.h index 1e6e6fad85..c9d0bb7b84 100644 --- a/include/wx/stream.h +++ b/include/wx/stream.h @@ -28,7 +28,7 @@ class WXDLLEXPORT wxOutputStream; typedef wxInputStream& (*__wxInputManip)(wxInputStream&); typedef wxOutputStream& (*__wxOutputManip)(wxOutputStream&); -wxOutputStream& WXDLLEXPORT wxEndL(wxOutputStream& o_stream); +WXDLLEXPORT wxOutputStream& wxEndL(wxOutputStream& o_stream); // --------------------------------------------------------------------------- // Stream buffer @@ -37,22 +37,29 @@ wxOutputStream& WXDLLEXPORT wxEndL(wxOutputStream& o_stream); class WXDLLEXPORT wxStreamBuffer { public: typedef enum { - read, write + read = 0, write, read_write } BufMode; // ----------- // ctor & dtor // ----------- wxStreamBuffer(wxStreamBase& stream, BufMode mode); + wxStreamBuffer(BufMode mode); + wxStreamBuffer(const wxStreamBuffer& buf); ~wxStreamBuffer(); // ----------- // Filtered IO // ----------- - void Read(void *buffer, size_t size); - void Write(const void *buffer, size_t size); - bool WriteBack(const char *buffer, size_t size); + size_t Read(void *buffer, size_t size); + size_t Read(wxStreamBuffer *buf); + size_t Write(const void *buffer, size_t size); + size_t Write(wxStreamBuffer *buf); + + size_t WriteBack(const char *buffer, size_t size); bool WriteBack(char c); + char GetChar(); + void PutChar(char c); off_t Tell() const; off_t Seek(off_t pos, wxSeekMode mode); @@ -68,11 +75,18 @@ class WXDLLEXPORT wxStreamBuffer { off_t GetIntPosition() const { return m_buffer_pos-m_buffer_start; } void SetIntPosition(off_t pos) { m_buffer_pos = m_buffer_start+pos; } size_t GetLastAccess() const { return m_buffer_end-m_buffer_start; } + void Fixed(bool fixed) { m_fixed = fixed; } + void Flushable(bool f) { m_flushable = f; } bool FlushBuffer(); bool FillBuffer(); - size_t GetDataLeft() const; + size_t GetDataLeft(); + + // -------------- + // Administration + // -------------- + wxStreamBase *Stream() { return m_stream; } protected: char *AllocSpaceWBack(size_t needed_size); @@ -88,10 +102,11 @@ class WXDLLEXPORT wxStreamBuffer { char *m_wback; size_t m_wbacksize, m_wbackcur; - bool m_fixed; + bool m_fixed, m_flushable; wxStreamBase *m_stream; BufMode m_mode; + bool m_destroybuf, m_destroystream; }; // --------------------------------------------------------------------------- @@ -99,8 +114,10 @@ class WXDLLEXPORT wxStreamBuffer { // --------------------------------------------------------------------------- typedef enum { - wxStream_NOERROR, - wxStream_EOF + wxStream_NOERROR = 0, + wxStream_EOF, + wxStream_WRITE_ERR, + wxStream_READ_ERR } wxStreamError; class WXDLLEXPORT wxStreamBase { @@ -108,7 +125,8 @@ class WXDLLEXPORT wxStreamBase { wxStreamBase(); virtual ~wxStreamBase(); - wxStreamError LastError() { return m_lasterror; } + wxStreamError LastError() const { return m_lasterror; } + virtual size_t StreamSize() const { return ~((size_t)0); } protected: friend class wxStreamBuffer; @@ -116,7 +134,7 @@ class WXDLLEXPORT wxStreamBase { virtual size_t OnSysRead(void *buffer, size_t bufsize); virtual size_t OnSysWrite(const void *buffer, size_t bufsize); virtual off_t OnSysSeek(off_t seek, wxSeekMode mode); - virtual off_t OnSysTell(); + virtual off_t OnSysTell() const; protected: size_t m_lastcount; @@ -132,7 +150,7 @@ class WXDLLEXPORT wxInputStream: public wxStreamBase { // IO functions virtual char Peek(); char GetC(); - wxInputStream& Read(void *buffer, size_t size); + virtual wxInputStream& Read(void *buffer, size_t size); wxInputStream& Read(wxOutputStream& stream_out); // Position functions @@ -173,7 +191,7 @@ class WXDLLEXPORT wxOutputStream: public wxStreamBase { wxOutputStream(wxStreamBuffer *sbuf); virtual ~wxOutputStream(); - wxOutputStream& Write(const void *buffer, size_t size); + virtual wxOutputStream& Write(const void *buffer, size_t size); wxOutputStream& Write(wxInputStream& stream_in); off_t SeekO(off_t pos, wxSeekMode mode = wxFromStart); @@ -220,6 +238,9 @@ class WXDLLEXPORT wxFilterInputStream: public wxInputStream { char Peek() { return m_parent_i_stream->Peek(); } + wxStreamError LastError() const { return m_parent_i_stream->LastError(); } + size_t StreamSize() const { return m_parent_i_stream->StreamSize(); } + protected: wxInputStream *m_parent_i_stream; }; @@ -230,6 +251,9 @@ class WXDLLEXPORT wxFilterOutputStream: public wxOutputStream { wxFilterOutputStream(wxOutputStream& stream); ~wxFilterOutputStream(); + wxStreamError LastError() const { return m_parent_o_stream->LastError(); } + size_t StreamSize() const { return m_parent_o_stream->StreamSize(); } + protected: wxOutputStream *m_parent_o_stream; };