- Added WXK_SPECIAL keycodes for special hardware buttons.
- Fixed bug with wxFile::Seek(-1, wxFromCurrent).
- Added wxString/C array constructors to wxArrayString.
+- Added wxMemoryInputStream(wxMemoryOutputStream&) constructor (Stas Sergeev)
All (GUI):
{\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.
+\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}
\func{}{\destruct{wxMemoryInputStream}}{\void}
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
% -----------------------------------------------------------------------------
CopyTo returns the number of bytes copied to the buffer. Generally it is either
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.
#include "wx/stream.h"
+class WXDLLIMPEXP_BASE wxMemoryOutputStream;
+
class WXDLLIMPEXP_BASE wxMemoryInputStream : public wxInputStream
{
public:
wxMemoryInputStream(const void *data, size_t length);
+ wxMemoryInputStream(const wxMemoryOutputStream& stream);
virtual ~wxMemoryInputStream();
virtual wxFileOffset GetLength() const { return m_length; }
virtual bool Eof() const;
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()
{
delete m_i_streambuf;
CPPUNIT_TEST(Output_TellO);
// Other test specific for Memory stream test case.
+ CPPUNIT_TEST(Ctor_InFromOut);
CPPUNIT_TEST_SUITE_END();
protected:
// Add own test here.
+ void Ctor_InFromOut();
private:
const char *GetDataBuffer();
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.
// Note: Don't forget to connect it to the base suite (See: bstream.cpp => StreamCase::suite())