Added wxWrapperInputStream class.
This stream allows to wrap another stream. This is a useful base class for adapter classes providing stream interface on top of something else, like the upcoming wxFSInputStream. See #14185. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71205 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -36,6 +36,7 @@
|
||||
#include <ctype.h>
|
||||
#include "wx/datstrm.h"
|
||||
#include "wx/textfile.h"
|
||||
#include "wx/scopeguard.h"
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// constants
|
||||
@@ -1446,6 +1447,93 @@ void wxBufferedOutputStream::SetOutputStreamBuffer(wxStreamBuffer *buffer)
|
||||
m_o_streambuf = buffer;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// wxWrapperInputStream implementation
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
wxWrapperInputStream::wxWrapperInputStream()
|
||||
{
|
||||
m_lasterror = wxSTREAM_READ_ERROR;
|
||||
}
|
||||
|
||||
wxWrapperInputStream::wxWrapperInputStream(wxInputStream& stream)
|
||||
: wxFilterInputStream(stream)
|
||||
{
|
||||
SynchronizeLastError();
|
||||
}
|
||||
|
||||
wxWrapperInputStream::wxWrapperInputStream(wxInputStream *stream)
|
||||
: wxFilterInputStream(stream)
|
||||
{
|
||||
if ( m_parent_i_stream )
|
||||
SynchronizeLastError();
|
||||
else
|
||||
m_lasterror = wxSTREAM_READ_ERROR;
|
||||
}
|
||||
|
||||
void wxWrapperInputStream::InitParentStream(wxInputStream& stream)
|
||||
{
|
||||
wxCHECK_RET( !m_parent_i_stream, "Can't init parent stream twice" );
|
||||
|
||||
m_parent_i_stream = &stream;
|
||||
|
||||
SynchronizeLastError();
|
||||
}
|
||||
|
||||
void wxWrapperInputStream::InitParentStream(wxInputStream* stream)
|
||||
{
|
||||
wxCHECK_RET( !m_parent_i_stream, "Can't init parent stream twice" );
|
||||
|
||||
m_parent_i_stream = stream;
|
||||
|
||||
if ( m_parent_i_stream )
|
||||
{
|
||||
m_owns = true;
|
||||
|
||||
SynchronizeLastError();
|
||||
}
|
||||
}
|
||||
|
||||
wxFileOffset wxWrapperInputStream::GetLength() const
|
||||
{
|
||||
wxCHECK_MSG(m_parent_i_stream, wxInvalidOffset, "Stream not valid");
|
||||
|
||||
wxON_BLOCK_EXIT_THIS0(wxWrapperInputStream::SynchronizeLastError);
|
||||
return m_parent_i_stream->GetLength();
|
||||
}
|
||||
|
||||
bool wxWrapperInputStream::IsSeekable() const
|
||||
{
|
||||
wxCHECK_MSG(m_parent_i_stream, false, "Stream not valid");
|
||||
return m_parent_i_stream->IsSeekable();
|
||||
}
|
||||
|
||||
size_t wxWrapperInputStream::OnSysRead(void *buffer, size_t size)
|
||||
{
|
||||
wxCHECK_MSG(m_parent_i_stream, false, "Stream not valid");
|
||||
|
||||
wxON_BLOCK_EXIT_THIS0(wxWrapperInputStream::SynchronizeLastError);
|
||||
|
||||
m_parent_i_stream->Read(buffer, size);
|
||||
return m_parent_i_stream->LastRead();
|
||||
}
|
||||
|
||||
wxFileOffset wxWrapperInputStream::OnSysSeek(wxFileOffset pos, wxSeekMode mode)
|
||||
{
|
||||
wxCHECK_MSG(IsSeekable(), false, "Stream not seekable");
|
||||
|
||||
wxON_BLOCK_EXIT_THIS0(wxWrapperInputStream::SynchronizeLastError);
|
||||
return m_parent_i_stream->SeekI (pos, mode);
|
||||
}
|
||||
|
||||
wxFileOffset wxWrapperInputStream::OnSysTell() const
|
||||
{
|
||||
wxCHECK_MSG(m_parent_i_stream, false, "Stream not valid");
|
||||
|
||||
wxON_BLOCK_EXIT_THIS0(wxWrapperInputStream::SynchronizeLastError);
|
||||
return m_parent_i_stream->TellI();
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Some IOManip function
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user