compilation fixes for wxMemoryStreams
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8775 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -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;
|
||||
|
@@ -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; }
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
{
|
||||
|
Reference in New Issue
Block a user