From 67c8c225f469529d86afa1c4e817e96d97c22d18 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Thu, 23 Nov 2000 16:26:12 +0000 Subject: [PATCH] compilation fixes for wxMemoryStreams git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8775 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/mstream.h | 17 +++++--- include/wx/stream.h | 2 + src/common/mstream.cpp | 91 ++++++++++++++++++++++++------------------ src/common/stream.cpp | 17 +++++--- 4 files changed, 79 insertions(+), 48 deletions(-) diff --git a/include/wx/mstream.h b/include/wx/mstream.h index bdb4a65997..b1b15cb8d6 100644 --- a/include/wx/mstream.h +++ b/include/wx/mstream.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: mstream.h +// Name: wx/mstream.h // Purpose: Memory stream classes // Author: Guilhem Lavaux // Modified by: @@ -19,13 +19,16 @@ class WXDLLEXPORT wxMemoryInputStream : public wxInputStream { public: - wxMemoryInputStream(const char *data, size_t length); + wxMemoryInputStream(const void *data, size_t length); virtual ~wxMemoryInputStream(); virtual size_t GetSize() const { return m_length; } virtual bool Eof() const; char Peek(); + wxStreamBuffer *GetInputStreamBuffer() const { return m_i_streambuf; } + + // deprecated, compatibility only wxStreamBuffer *InputStreamBuffer() const { return m_i_streambuf; } protected: @@ -42,13 +45,17 @@ private: class WXDLLEXPORT wxMemoryOutputStream : public wxOutputStream { public: - wxMemoryOutputStream(char *data = NULL, size_t length = 0); + // if data is !NULL it must be allocated with malloc() + wxMemoryOutputStream(void *data = NULL, size_t length = 0); virtual ~wxMemoryOutputStream(); virtual size_t GetSize() const { return m_o_streambuf->GetLastAccess(); } - wxStreamBuffer *OutputStreamBuffer() const { return m_o_streambuf; } + size_t CopyTo(void *buffer, size_t len) const; - size_t CopyTo(char *buffer, size_t len) const; + wxStreamBuffer *GetOutputStreamBuffer() const { return m_o_streambuf; } + + // deprecated, compatibility only + wxStreamBuffer *OutputStreamBuffer() const { return m_o_streambuf; } protected: wxStreamBuffer *m_o_streambuf; diff --git a/include/wx/stream.h b/include/wx/stream.h index 2f1c4b9098..c2574995f4 100644 --- a/include/wx/stream.h +++ b/include/wx/stream.h @@ -242,10 +242,12 @@ public: // NB: the buffer must always be allocated with malloc() if takeOwn is // TRUE as it will be deallocated by free() void SetBufferIO(void *start, void *end, bool takeOwnership = FALSE); + void SetBufferIO(void *start, size_t len, bool takeOwnership = FALSE); void SetBufferIO(size_t bufsize); void *GetBufferStart() const { return m_buffer_start; } void *GetBufferEnd() const { return m_buffer_end; } void *GetBufferPos() const { return m_buffer_pos; } + size_t GetBufferSize() const { return m_buffer_size; } size_t GetIntPosition() const { return m_buffer_pos - m_buffer_start; } void SetIntPosition(size_t pos) { m_buffer_pos = m_buffer_start + pos; } size_t GetLastAccess() const { return m_buffer_end - m_buffer_start; } diff --git a/src/common/mstream.cpp b/src/common/mstream.cpp index b0f1ab6a1a..9226ce4461 100644 --- a/src/common/mstream.cpp +++ b/src/common/mstream.cpp @@ -1,14 +1,22 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: mstream.cpp +// Name: src/common/mstream.cpp // Purpose: "Memory stream" classes // Author: Guilhem Lavaux -// Modified by: +// Modified by: VZ (23.11.00): general code review // Created: 04/01/98 // RCS-ID: $Id$ // Copyright: (c) Guilhem Lavaux // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + #ifdef __GNUG__ #pragma implementation "mstream.h" #endif @@ -26,34 +34,39 @@ #include "wx/stream.h" #include "wx/mstream.h" +// ============================================================================ +// implementation +// ============================================================================ + // ---------------------------------------------------------------------------- // wxMemoryInputStream // ---------------------------------------------------------------------------- -wxMemoryInputStream::wxMemoryInputStream(const char *data, size_t len) - : wxInputStream() +wxMemoryInputStream::wxMemoryInputStream(const void *data, size_t len) { - m_i_streambuf = new wxStreamBuffer(wxStreamBuffer::read); - m_i_streambuf->SetBufferIO((char*) data, (char*) (data+len)); - m_i_streambuf->SetIntPosition(0); // seek to start pos - m_i_streambuf->Fixed(TRUE); + m_i_streambuf = new wxStreamBuffer(wxStreamBuffer::read); + m_i_streambuf->SetBufferIO((void *)data, len); // const_cast + m_i_streambuf->SetIntPosition(0); // seek to start pos + m_i_streambuf->Fixed(TRUE); - m_length = len; + m_length = len; } wxMemoryInputStream::~wxMemoryInputStream() { - delete m_i_streambuf; + delete m_i_streambuf; } char wxMemoryInputStream::Peek() { - return m_i_streambuf->GetBufferStart()[m_i_streambuf->GetIntPosition()]; + char *buf = (char *)m_i_streambuf->GetBufferStart(); + + return buf[m_i_streambuf->GetIntPosition()]; } bool wxMemoryInputStream::Eof() const { - return m_i_streambuf->GetBufferPos() == m_i_streambuf->GetBufferEnd(); + return !m_i_streambuf->GetBytesLeft(); } size_t wxMemoryInputStream::OnSysRead(void *buffer, size_t nbytes) @@ -74,63 +87,65 @@ size_t wxMemoryInputStream::OnSysRead(void *buffer, size_t nbytes) off_t wxMemoryInputStream::OnSysSeek(off_t pos, wxSeekMode mode) { - return m_i_streambuf->Seek(pos, mode); + return m_i_streambuf->Seek(pos, mode); } off_t wxMemoryInputStream::OnSysTell() const { - return m_i_streambuf->Tell(); + return m_i_streambuf->Tell(); } // ---------------------------------------------------------------------------- // wxMemoryOutputStream // ---------------------------------------------------------------------------- -wxMemoryOutputStream::wxMemoryOutputStream(char *data, size_t len) - : wxOutputStream() +wxMemoryOutputStream::wxMemoryOutputStream(void *data, size_t len) { - m_o_streambuf = new wxStreamBuffer(wxStreamBuffer::write); - if (data) - m_o_streambuf->SetBufferIO(data, data+len); - m_o_streambuf->Fixed(FALSE); - m_o_streambuf->Flushable(FALSE); + m_o_streambuf = new wxStreamBuffer(wxStreamBuffer::write); + if ( data ) + m_o_streambuf->SetBufferIO(data, len); + m_o_streambuf->Fixed(FALSE); + m_o_streambuf->Flushable(FALSE); } wxMemoryOutputStream::~wxMemoryOutputStream() { - delete m_o_streambuf; + delete m_o_streambuf; } size_t wxMemoryOutputStream::OnSysWrite(const void *buffer, size_t nbytes) { - size_t bufsize = m_o_streambuf->GetBufferEnd() - m_o_streambuf->GetBufferStart(); - size_t oldpos = m_o_streambuf->GetIntPosition(); - m_o_streambuf->Write(buffer, nbytes); - size_t newpos = m_o_streambuf->GetIntPosition(); - if (newpos == 0) return bufsize - oldpos; - else return newpos - oldpos; + size_t oldpos = m_o_streambuf->GetIntPosition(); + m_o_streambuf->Write(buffer, nbytes); + size_t newpos = m_o_streambuf->GetIntPosition(); + + // FIXME can someone please explain what this does? (VZ) + if ( !newpos ) + newpos = m_o_streambuf->GetBufferSize(); + + return newpos - oldpos; } off_t wxMemoryOutputStream::OnSysSeek(off_t pos, wxSeekMode mode) { - return m_o_streambuf->Seek(pos, mode); + return m_o_streambuf->Seek(pos, mode); } off_t wxMemoryOutputStream::OnSysTell() const { - return m_o_streambuf->Tell(); + return m_o_streambuf->Tell(); } -size_t wxMemoryOutputStream::CopyTo(char *buffer, size_t len) const +size_t wxMemoryOutputStream::CopyTo(void *buffer, size_t len) const { - if (!buffer) - return 0; + wxCHECK_MSG( buffer, 0, _T("must have buffer to CopyTo") ); - if (len > GetSize()) - len = GetSize(); + if ( len > GetSize() ) + len = GetSize(); - memcpy(buffer, m_o_streambuf->GetBufferStart(), len); - return len; + memcpy(buffer, m_o_streambuf->GetBufferStart(), len); + + return len; } -#endif +#endif // wxUSE_STREAMS diff --git a/src/common/stream.cpp b/src/common/stream.cpp index 872d03c52c..38499f5793 100644 --- a/src/common/stream.cpp +++ b/src/common/stream.cpp @@ -132,14 +132,22 @@ wxStreamBuffer::~wxStreamBuffer() void wxStreamBuffer::SetBufferIO(void *buffer_start, void *buffer_end, bool takeOwnership) +{ + SetBufferIO(buffer_start, (char *)buffer_end - (char *)buffer_start, + takeOwnership); +} + +void wxStreamBuffer::SetBufferIO(void *start, + size_t len, + bool takeOwnership) { // start by freeing the old buffer FreeBuffer(); - m_buffer_start = (char *)buffer_start; - m_buffer_end = (char *)buffer_end; + m_buffer_start = (char *)start; + m_buffer_end = m_buffer_start + len; - m_buffer_size = m_buffer_end - m_buffer_start; + m_buffer_size = len; // if we own it, we free it m_destroybuf = !takeOwnership; @@ -154,8 +162,7 @@ void wxStreamBuffer::SetBufferIO(size_t bufsize) if ( bufsize ) { - char *buf = (char *)malloc(bufsize); - SetBufferIO(buf, buf + bufsize, TRUE /* take ownership */); + SetBufferIO(malloc(bufsize), bufsize, TRUE /* take ownership */); } else // no buffer size => no buffer { -- 2.45.2