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
|
// Purpose: Memory stream classes
|
||||||
// Author: Guilhem Lavaux
|
// Author: Guilhem Lavaux
|
||||||
// Modified by:
|
// Modified by:
|
||||||
@@ -19,13 +19,16 @@
|
|||||||
class WXDLLEXPORT wxMemoryInputStream : public wxInputStream
|
class WXDLLEXPORT wxMemoryInputStream : public wxInputStream
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
wxMemoryInputStream(const char *data, size_t length);
|
wxMemoryInputStream(const void *data, size_t length);
|
||||||
virtual ~wxMemoryInputStream();
|
virtual ~wxMemoryInputStream();
|
||||||
virtual size_t GetSize() const { return m_length; }
|
virtual size_t GetSize() const { return m_length; }
|
||||||
virtual bool Eof() const;
|
virtual bool Eof() const;
|
||||||
|
|
||||||
char Peek();
|
char Peek();
|
||||||
|
|
||||||
|
wxStreamBuffer *GetInputStreamBuffer() const { return m_i_streambuf; }
|
||||||
|
|
||||||
|
// deprecated, compatibility only
|
||||||
wxStreamBuffer *InputStreamBuffer() const { return m_i_streambuf; }
|
wxStreamBuffer *InputStreamBuffer() const { return m_i_streambuf; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -42,13 +45,17 @@ private:
|
|||||||
class WXDLLEXPORT wxMemoryOutputStream : public wxOutputStream
|
class WXDLLEXPORT wxMemoryOutputStream : public wxOutputStream
|
||||||
{
|
{
|
||||||
public:
|
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 ~wxMemoryOutputStream();
|
||||||
virtual size_t GetSize() const { return m_o_streambuf->GetLastAccess(); }
|
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:
|
protected:
|
||||||
wxStreamBuffer *m_o_streambuf;
|
wxStreamBuffer *m_o_streambuf;
|
||||||
|
@@ -242,10 +242,12 @@ public:
|
|||||||
// NB: the buffer must always be allocated with malloc() if takeOwn is
|
// NB: the buffer must always be allocated with malloc() if takeOwn is
|
||||||
// TRUE as it will be deallocated by free()
|
// TRUE as it will be deallocated by free()
|
||||||
void SetBufferIO(void *start, void *end, bool takeOwnership = FALSE);
|
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 SetBufferIO(size_t bufsize);
|
||||||
void *GetBufferStart() const { return m_buffer_start; }
|
void *GetBufferStart() const { return m_buffer_start; }
|
||||||
void *GetBufferEnd() const { return m_buffer_end; }
|
void *GetBufferEnd() const { return m_buffer_end; }
|
||||||
void *GetBufferPos() const { return m_buffer_pos; }
|
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; }
|
size_t GetIntPosition() const { return m_buffer_pos - m_buffer_start; }
|
||||||
void SetIntPosition(size_t pos) { m_buffer_pos = m_buffer_start + pos; }
|
void SetIntPosition(size_t pos) { m_buffer_pos = m_buffer_start + pos; }
|
||||||
size_t GetLastAccess() const { return m_buffer_end - m_buffer_start; }
|
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
|
// Purpose: "Memory stream" classes
|
||||||
// Author: Guilhem Lavaux
|
// Author: Guilhem Lavaux
|
||||||
// Modified by:
|
// Modified by: VZ (23.11.00): general code review
|
||||||
// Created: 04/01/98
|
// Created: 04/01/98
|
||||||
// RCS-ID: $Id$
|
// RCS-ID: $Id$
|
||||||
// Copyright: (c) Guilhem Lavaux
|
// Copyright: (c) Guilhem Lavaux
|
||||||
// Licence: wxWindows license
|
// Licence: wxWindows license
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// declarations
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// headers
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
#ifdef __GNUG__
|
#ifdef __GNUG__
|
||||||
#pragma implementation "mstream.h"
|
#pragma implementation "mstream.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -26,34 +34,39 @@
|
|||||||
#include "wx/stream.h"
|
#include "wx/stream.h"
|
||||||
#include "wx/mstream.h"
|
#include "wx/mstream.h"
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// implementation
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxMemoryInputStream
|
// wxMemoryInputStream
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
wxMemoryInputStream::wxMemoryInputStream(const char *data, size_t len)
|
wxMemoryInputStream::wxMemoryInputStream(const void *data, size_t len)
|
||||||
: wxInputStream()
|
|
||||||
{
|
{
|
||||||
m_i_streambuf = new wxStreamBuffer(wxStreamBuffer::read);
|
m_i_streambuf = new wxStreamBuffer(wxStreamBuffer::read);
|
||||||
m_i_streambuf->SetBufferIO((char*) data, (char*) (data+len));
|
m_i_streambuf->SetBufferIO((void *)data, len); // const_cast
|
||||||
m_i_streambuf->SetIntPosition(0); // seek to start pos
|
m_i_streambuf->SetIntPosition(0); // seek to start pos
|
||||||
m_i_streambuf->Fixed(TRUE);
|
m_i_streambuf->Fixed(TRUE);
|
||||||
|
|
||||||
m_length = len;
|
m_length = len;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxMemoryInputStream::~wxMemoryInputStream()
|
wxMemoryInputStream::~wxMemoryInputStream()
|
||||||
{
|
{
|
||||||
delete m_i_streambuf;
|
delete m_i_streambuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
char wxMemoryInputStream::Peek()
|
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
|
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)
|
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)
|
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
|
off_t wxMemoryInputStream::OnSysTell() const
|
||||||
{
|
{
|
||||||
return m_i_streambuf->Tell();
|
return m_i_streambuf->Tell();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxMemoryOutputStream
|
// wxMemoryOutputStream
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
wxMemoryOutputStream::wxMemoryOutputStream(char *data, size_t len)
|
wxMemoryOutputStream::wxMemoryOutputStream(void *data, size_t len)
|
||||||
: wxOutputStream()
|
|
||||||
{
|
{
|
||||||
m_o_streambuf = new wxStreamBuffer(wxStreamBuffer::write);
|
m_o_streambuf = new wxStreamBuffer(wxStreamBuffer::write);
|
||||||
if (data)
|
if ( data )
|
||||||
m_o_streambuf->SetBufferIO(data, data+len);
|
m_o_streambuf->SetBufferIO(data, len);
|
||||||
m_o_streambuf->Fixed(FALSE);
|
m_o_streambuf->Fixed(FALSE);
|
||||||
m_o_streambuf->Flushable(FALSE);
|
m_o_streambuf->Flushable(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxMemoryOutputStream::~wxMemoryOutputStream()
|
wxMemoryOutputStream::~wxMemoryOutputStream()
|
||||||
{
|
{
|
||||||
delete m_o_streambuf;
|
delete m_o_streambuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t wxMemoryOutputStream::OnSysWrite(const void *buffer, size_t nbytes)
|
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();
|
||||||
size_t oldpos = m_o_streambuf->GetIntPosition();
|
m_o_streambuf->Write(buffer, nbytes);
|
||||||
m_o_streambuf->Write(buffer, nbytes);
|
size_t newpos = m_o_streambuf->GetIntPosition();
|
||||||
size_t newpos = m_o_streambuf->GetIntPosition();
|
|
||||||
if (newpos == 0) return bufsize - oldpos;
|
// FIXME can someone please explain what this does? (VZ)
|
||||||
else return newpos - oldpos;
|
if ( !newpos )
|
||||||
|
newpos = m_o_streambuf->GetBufferSize();
|
||||||
|
|
||||||
|
return newpos - oldpos;
|
||||||
}
|
}
|
||||||
|
|
||||||
off_t wxMemoryOutputStream::OnSysSeek(off_t pos, wxSeekMode mode)
|
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
|
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)
|
wxCHECK_MSG( buffer, 0, _T("must have buffer to CopyTo") );
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (len > GetSize())
|
if ( len > GetSize() )
|
||||||
len = GetSize();
|
len = GetSize();
|
||||||
|
|
||||||
memcpy(buffer, m_o_streambuf->GetBufferStart(), len);
|
memcpy(buffer, m_o_streambuf->GetBufferStart(), len);
|
||||||
return len;
|
|
||||||
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif // wxUSE_STREAMS
|
||||||
|
@@ -132,14 +132,22 @@ wxStreamBuffer::~wxStreamBuffer()
|
|||||||
void wxStreamBuffer::SetBufferIO(void *buffer_start,
|
void wxStreamBuffer::SetBufferIO(void *buffer_start,
|
||||||
void *buffer_end,
|
void *buffer_end,
|
||||||
bool takeOwnership)
|
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
|
// start by freeing the old buffer
|
||||||
FreeBuffer();
|
FreeBuffer();
|
||||||
|
|
||||||
m_buffer_start = (char *)buffer_start;
|
m_buffer_start = (char *)start;
|
||||||
m_buffer_end = (char *)buffer_end;
|
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
|
// if we own it, we free it
|
||||||
m_destroybuf = !takeOwnership;
|
m_destroybuf = !takeOwnership;
|
||||||
@@ -154,8 +162,7 @@ void wxStreamBuffer::SetBufferIO(size_t bufsize)
|
|||||||
|
|
||||||
if ( bufsize )
|
if ( bufsize )
|
||||||
{
|
{
|
||||||
char *buf = (char *)malloc(bufsize);
|
SetBufferIO(malloc(bufsize), bufsize, TRUE /* take ownership */);
|
||||||
SetBufferIO(buf, buf + bufsize, TRUE /* take ownership */);
|
|
||||||
}
|
}
|
||||||
else // no buffer size => no buffer
|
else // no buffer size => no buffer
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user