added wxMemoryInputStream(wxMemoryOutputStream&) ctor (patch 1170635)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33293 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2005-04-02 22:37:58 +00:00
parent 1cd555d2de
commit 96461cc29d
5 changed files with 55 additions and 0 deletions

View File

@@ -15,6 +15,7 @@ All:
- Added WXK_SPECIAL keycodes for special hardware buttons. - Added WXK_SPECIAL keycodes for special hardware buttons.
- Fixed bug with wxFile::Seek(-1, wxFromCurrent). - Fixed bug with wxFile::Seek(-1, wxFromCurrent).
- Added wxString/C array constructors to wxArrayString. - Added wxString/C array constructors to wxArrayString.
- Added wxMemoryInputStream(wxMemoryOutputStream&) constructor (Stas Sergeev)
All (GUI): All (GUI):

View File

@@ -28,12 +28,24 @@ Initializes a new read-only memory stream which will use the specified buffer
{\it data} of length {\it len}. The stream does not take ownership of the {\it data} of length {\it len}. The stream does not take ownership of the
buffer, i.e. that it will not delete in its destructor. buffer, i.e. that it will not delete in its destructor.
\func{}{wxMemoryInputStream}{\param{const wxMemoryOutputStream&}{ stream}}
Creates a new read-only memory stream, initilalizing it with the
data from the given output stream \arg{stream}.
\membersection{wxMemoryInputStream::\destruct{wxMemoryInputStream}}\label{wxmemoryinputstreamdtor} \membersection{wxMemoryInputStream::\destruct{wxMemoryInputStream}}\label{wxmemoryinputstreamdtor}
\func{}{\destruct{wxMemoryInputStream}}{\void} \func{}{\destruct{wxMemoryInputStream}}{\void}
Destructor. Destructor.
\membersection{wxMemoryInputStream::GetInputStreamBuffer}\label{wxmemoryinputstreamgetistrmbuf}
\constfunc{wxStreamBuffer *}{GetInputStreamBuffer}{\void}
Returns the pointer to the stream object used as an internal buffer
for that stream.
% ----------------------------------------------------------------------------- % -----------------------------------------------------------------------------
% wxMemoryOutputStream % wxMemoryOutputStream
% ----------------------------------------------------------------------------- % -----------------------------------------------------------------------------
@@ -87,3 +99,9 @@ the buffer.
CopyTo returns the number of bytes copied to the buffer. Generally it is either CopyTo returns the number of bytes copied to the buffer. Generally it is either
len or the size of the stream buffer. len or the size of the stream buffer.
\membersection{wxMemoryOutputStream::GetOutputStreamBuffer}\label{wxmemoryoutputstreamgetostrmbuf}
\constfunc{wxStreamBuffer *}{GetOutputStreamBuffer}{\void}
Returns the pointer to the stream object used as an internal buffer
for that stream.

View File

@@ -18,10 +18,13 @@
#include "wx/stream.h" #include "wx/stream.h"
class WXDLLIMPEXP_BASE wxMemoryOutputStream;
class WXDLLIMPEXP_BASE wxMemoryInputStream : public wxInputStream class WXDLLIMPEXP_BASE wxMemoryInputStream : public wxInputStream
{ {
public: public:
wxMemoryInputStream(const void *data, size_t length); wxMemoryInputStream(const void *data, size_t length);
wxMemoryInputStream(const wxMemoryOutputStream& stream);
virtual ~wxMemoryInputStream(); virtual ~wxMemoryInputStream();
virtual wxFileOffset GetLength() const { return m_length; } virtual wxFileOffset GetLength() const { return m_length; }
virtual bool Eof() const; virtual bool Eof() const;

View File

@@ -52,6 +52,22 @@ wxMemoryInputStream::wxMemoryInputStream(const void *data, size_t len)
m_length = len; m_length = len;
} }
wxMemoryInputStream::wxMemoryInputStream(const wxMemoryOutputStream& stream)
{
int len = stream.GetLength();
if (len == wxInvalidOffset) {
m_i_streambuf = NULL;
m_lasterror = wxSTREAM_EOF;
return;
}
m_i_streambuf = new wxStreamBuffer(wxStreamBuffer::read);
m_i_streambuf->SetBufferIO(len); // create buffer
stream.CopyTo(m_i_streambuf->GetBufferStart(), len);
m_i_streambuf->SetIntPosition(0); // seek to start pos
m_i_streambuf->Fixed(true);
m_length = len;
}
wxMemoryInputStream::~wxMemoryInputStream() wxMemoryInputStream::~wxMemoryInputStream()
{ {
delete m_i_streambuf; delete m_i_streambuf;

View File

@@ -56,10 +56,12 @@ public:
CPPUNIT_TEST(Output_TellO); CPPUNIT_TEST(Output_TellO);
// Other test specific for Memory stream test case. // Other test specific for Memory stream test case.
CPPUNIT_TEST(Ctor_InFromOut);
CPPUNIT_TEST_SUITE_END(); CPPUNIT_TEST_SUITE_END();
protected: protected:
// Add own test here. // Add own test here.
void Ctor_InFromOut();
private: private:
const char *GetDataBuffer(); const char *GetDataBuffer();
@@ -103,6 +105,21 @@ wxMemoryOutputStream *memStream::DoCreateOutStream()
return pMemOutStream; return pMemOutStream;
} }
void memStream::Ctor_InFromOut()
{
wxMemoryOutputStream *pMemOutStream = DoCreateOutStream();
pMemOutStream->Write(GetDataBuffer(), DATABUFFER_SIZE);
wxMemoryInputStream *pMemInStream = new wxMemoryInputStream(*pMemOutStream);
CPPUNIT_ASSERT(pMemInStream->IsOk());
CPPUNIT_ASSERT(pMemInStream->GetLength() == pMemOutStream->GetLength());
int len = pMemInStream->GetLength();
wxStreamBuffer *in = pMemInStream->GetInputStreamBuffer();
wxStreamBuffer *out = pMemOutStream->GetOutputStreamBuffer();
void *pIn = in->GetBufferStart();
void *pOut = out->GetBufferStart();
CPPUNIT_ASSERT(pIn != pOut);
CPPUNIT_ASSERT(memcmp(pIn, pOut, len) == 0);
}
// Register the stream sub suite, by using some stream helper macro. // Register the stream sub suite, by using some stream helper macro.
// Note: Don't forget to connect it to the base suite (See: bstream.cpp => StreamCase::suite()) // Note: Don't forget to connect it to the base suite (See: bstream.cpp => StreamCase::suite())