Further stream tests, doc updates and minor clean-ups.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4880 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -398,6 +398,8 @@ libraries, and to provide enhanced functionality.
|
|||||||
\twocolitem{\helpref{wxFilterOutputStream}{wxfilteroutputstream}}{Filtered output stream class}
|
\twocolitem{\helpref{wxFilterOutputStream}{wxfilteroutputstream}}{Filtered output stream class}
|
||||||
\twocolitem{\helpref{wxBufferedInputStream}{wxbufferedinputstream}}{Buffered input stream class}
|
\twocolitem{\helpref{wxBufferedInputStream}{wxbufferedinputstream}}{Buffered input stream class}
|
||||||
\twocolitem{\helpref{wxBufferedOutputStream}{wxbufferedoutputstream}}{Buffered output stream class}
|
\twocolitem{\helpref{wxBufferedOutputStream}{wxbufferedoutputstream}}{Buffered output stream class}
|
||||||
|
\twocolitem{\helpref{wxMemoryInputStream}{wxmeminputstream}}{Memory input stream class}
|
||||||
|
\twocolitem{\helpref{wxMemoryOutputStream}{wxmemoutputstream}}{Memory output stream class}
|
||||||
\twocolitem{\helpref{wxDataInputStream}{wxdatainputstream}}{Platform-independent binary data input stream class}
|
\twocolitem{\helpref{wxDataInputStream}{wxdatainputstream}}{Platform-independent binary data input stream class}
|
||||||
\twocolitem{\helpref{wxDataOutputStream}{wxdataoutputstream}}{Platform-independent binary data output stream class}
|
\twocolitem{\helpref{wxDataOutputStream}{wxdataoutputstream}}{Platform-independent binary data output stream class}
|
||||||
\twocolitem{\helpref{wxTextInputStream}{wxtextinputstream}}{Platform-independent text data input stream class}
|
\twocolitem{\helpref{wxTextInputStream}{wxtextinputstream}}{Platform-independent text data input stream class}
|
||||||
|
@@ -27,24 +27,25 @@ None
|
|||||||
Constructor, creates a new stream buffer using \it{stream} as a parent stream
|
Constructor, creates a new stream buffer using \it{stream} as a parent stream
|
||||||
and \it{mode} as the IO mode. \it{mode} can be: wxStreamBuffer::read,
|
and \it{mode} as the IO mode. \it{mode} can be: wxStreamBuffer::read,
|
||||||
wxStreamBuffer::write, wxStreamBuffer::read\_write.
|
wxStreamBuffer::write, wxStreamBuffer::read\_write.
|
||||||
|
|
||||||
|
|
||||||
One stream can have many stream buffers but only one is used internally to
|
One stream can have many stream buffers but only one is used internally to
|
||||||
pass IO call (e.g. wxInputStream::Read() -> wxStreamBuffer::Read()). But you
|
pass IO call (e.g. wxInputStream::Read() -> wxStreamBuffer::Read()), but you
|
||||||
can call directly wxStreamBuffer::Read without any problems.
|
can call directly wxStreamBuffer::Read without any problems. Note that
|
||||||
|
all errors and messages linked to the stream are stored in the stream, not
|
||||||
\wxheading{Warning}
|
the stream buffers:
|
||||||
|
|
||||||
All errors and messages linked to the stream are stored in the stream object.
|
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
streambuffer.Read(...);
|
streambuffer.Read(...);
|
||||||
streambuffer2.Read(...); /* This one erases previous error messages set by
|
streambuffer2.Read(...); /* This call erases previous error messages set by
|
||||||
``streambuffer'' */
|
``streambuffer'' */
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
\func{}{wxStreamBuffer}{\param{BufMode}{ mode}}
|
\func{}{wxStreamBuffer}{\param{BufMode}{ mode}}
|
||||||
|
|
||||||
Constructor, creates a new empty stream buffer which won't flush any data
|
Constructor, creates a new empty stream buffer which won't flush any data
|
||||||
to a stream. \it{mode} specifies the type of the buffer (read, write, read\_write). This stream buffer has the advantage to be stream independent and to
|
to a stream. \it{mode} specifies the type of the buffer (read, write, read\_write).
|
||||||
|
This stream buffer has the advantage to be stream independent and to
|
||||||
work only on memory buffers but it is still compatible with the rest of the
|
work only on memory buffers but it is still compatible with the rest of the
|
||||||
wxStream classes. You can write, read to this special stream and it will
|
wxStream classes. You can write, read to this special stream and it will
|
||||||
grow (if it is allowed by the user) its internal buffer. Briefly, it has all
|
grow (if it is allowed by the user) its internal buffer. Briefly, it has all
|
||||||
@@ -53,32 +54,15 @@ functionality of a ``normal'' stream.
|
|||||||
\wxheading{Warning}
|
\wxheading{Warning}
|
||||||
|
|
||||||
The "read\_write" mode may not work: it isn't completely finished.
|
The "read\_write" mode may not work: it isn't completely finished.
|
||||||
You can create "memory" streams by this way:
|
|
||||||
|
|
||||||
\begin{verbatim}
|
|
||||||
wxStreamBuffer *sb = new wxStreamBuffer(wxStreamBuffer::read)
|
|
||||||
wxInputStream *input = new wxInputStream(sb);
|
|
||||||
|
|
||||||
sb->Fixed(FALSE); // It can change the size of the buffer.
|
|
||||||
|
|
||||||
// input is now a read-only memory stream.
|
|
||||||
\end{verbatim}
|
|
||||||
|
|
||||||
But you should take care when destroying the stream buffer yourself.
|
|
||||||
|
|
||||||
\func{}{wxStreamBuffer}{\param{const wxStreamBuffer\&}{buffer}}
|
\func{}{wxStreamBuffer}{\param{const wxStreamBuffer\&}{buffer}}
|
||||||
|
|
||||||
Constructor. It initializes the stream buffer with the data of the specified
|
Constructor. It initializes the stream buffer with the data of the specified
|
||||||
stream buffer. The new stream buffer is nearly exactly the same as the
|
stream buffer. The new stream buffer has the same attributes, size, position
|
||||||
original: it has the same attributes, the same size, the same position, shares
|
and they share the same buffer. This will cause problems if the stream to
|
||||||
the same internal buffer. The interresting point is that they can differ
|
which the stream buffer belong is destroyed and the newly cloned stream
|
||||||
in the future but the root is the same.
|
buffer continues to be used, trying to call functions in the (destroyed)
|
||||||
|
stream. It is advised to use this feature only in very local area of the
|
||||||
\wxheading{Warning}
|
|
||||||
|
|
||||||
The fact that the two stream buffers shared the same buffer could generate
|
|
||||||
segmentation violation if the parent is destroyed and the children continues
|
|
||||||
operating. It is advised to use this feature only in very local area of the
|
|
||||||
program.
|
program.
|
||||||
|
|
||||||
\wxheading{See also}
|
\wxheading{See also}
|
||||||
@@ -90,9 +74,7 @@ program.
|
|||||||
\func{}{wxStreamBuffer}{\destruct{wxStreamBuffer}}
|
\func{}{wxStreamBuffer}{\destruct{wxStreamBuffer}}
|
||||||
|
|
||||||
Destructor. It finalizes all IO calls and frees all internal buffers if
|
Destructor. It finalizes all IO calls and frees all internal buffers if
|
||||||
necessary. In the case of a children stream buffer, the internal buffer isn't
|
necessary.
|
||||||
freed, this is the job of the parent.
|
|
||||||
The "Write-Back" buffer is freed.
|
|
||||||
|
|
||||||
% -----------
|
% -----------
|
||||||
% Filtered IO
|
% Filtered IO
|
||||||
@@ -101,27 +83,26 @@ The "Write-Back" buffer is freed.
|
|||||||
|
|
||||||
\func{size\_t}{Read}{\param{void *}{buffer}, \param{size\_t }{size}}
|
\func{size\_t}{Read}{\param{void *}{buffer}, \param{size\_t }{size}}
|
||||||
|
|
||||||
Reads a block of the specified \it{size} and stores datas in \it{buffer}.
|
Reads a block of the specified {\it size} and stores the data in {\it buffer}.
|
||||||
This function uses also the "Write-Back" buffer: in the case there are datas
|
This function tries to read from the buffer first and if more data has been
|
||||||
waiting in this buffer, they are used before anything else. After that, if there
|
requested, reads more data from the associated stream and updates the buffer
|
||||||
are still datas to be read, the stream is read and the stream buffer position
|
accordingly until all requested data is read.
|
||||||
is incremented.
|
|
||||||
|
|
||||||
\wxheading{Return value}
|
\wxheading{Return value}
|
||||||
|
|
||||||
It returns the real read size. If returned size is different of the specified
|
It returns the size of the data read. If thereturned size is different of the specified
|
||||||
\it{size}, an error occured and should be tested using
|
{\it size}, an error has occured and should be tested using
|
||||||
\helpref{LastError}{wxstreambaselasterror}.
|
\helpref{LastError}{wxstreambaselasterror}.
|
||||||
|
|
||||||
|
\func{size\_t}{Read}{\param{wxStreamBuffer *}{buffer}}
|
||||||
|
|
||||||
|
Reads a \it{buffer}. The function returns when \it{buffer} is full or when there isn't
|
||||||
|
data anymore in the current buffer.
|
||||||
|
|
||||||
\wxheading{See also}
|
\wxheading{See also}
|
||||||
|
|
||||||
\helpref{wxStreamBuffer::Write}{wxstreambufferwrite}
|
\helpref{wxStreamBuffer::Write}{wxstreambufferwrite}
|
||||||
|
|
||||||
\func{size\_t}{Read}{\param{wxStreamBuffer *}{buffer}}
|
|
||||||
|
|
||||||
Reads a \it{buffer}. The function returns when \it{buffer} is full or
|
|
||||||
when there aren't datas anymore in the current buffer.
|
|
||||||
|
|
||||||
\membersection{wxStreamBuffer::Write}\label{wxstreambufferwrite}
|
\membersection{wxStreamBuffer::Write}\label{wxstreambufferwrite}
|
||||||
|
|
||||||
\func{size\_t}{Write}{\param{const void *}{buffer}, \param{size\_t }{size}}
|
\func{size\_t}{Write}{\param{const void *}{buffer}, \param{size\_t }{size}}
|
||||||
|
@@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
\wxheading{See also}
|
\wxheading{See also}
|
||||||
|
|
||||||
\helpref{wxStreamBuffer}{wxstreamBuffer}
|
\helpref{wxStreamBuffer}{wxstreambuffer}
|
||||||
|
|
||||||
% ----------
|
% ----------
|
||||||
% Members
|
% Members
|
||||||
@@ -25,7 +25,8 @@
|
|||||||
\func{}{wxMemoryInputStream}{\param{const char *}{ data}, \param{size\_t}{ len}}
|
\func{}{wxMemoryInputStream}{\param{const char *}{ data}, \param{size\_t}{ len}}
|
||||||
|
|
||||||
Initializes a new read-only memory stream which will use the specified buffer
|
Initializes a new read-only memory stream which will use the specified buffer
|
||||||
\it{data} of length \it{len}.
|
{\it data} of length {\it len}. The stream does not take ownership of the
|
||||||
|
buffer, i.e. that it will not delete in its constructor.
|
||||||
|
|
||||||
\membersection{wxMemoryInputStream::\destruct{wxMemoryInputStream}}
|
\membersection{wxMemoryInputStream::\destruct{wxMemoryInputStream}}
|
||||||
|
|
||||||
@@ -48,7 +49,7 @@ Destructor.
|
|||||||
|
|
||||||
\wxheading{See also}
|
\wxheading{See also}
|
||||||
|
|
||||||
\helpref{wxStreamBuffer}{wxstreamBuffer}
|
\helpref{wxStreamBuffer}{wxstreambuffer}
|
||||||
|
|
||||||
% ----------
|
% ----------
|
||||||
% Members
|
% Members
|
||||||
@@ -60,7 +61,7 @@ Destructor.
|
|||||||
\func{}{wxMemoryOutputStream}{\param{char *}{ data = NULL}, \param{size\_t}{ length = 0}}
|
\func{}{wxMemoryOutputStream}{\param{char *}{ data = NULL}, \param{size\_t}{ length = 0}}
|
||||||
|
|
||||||
If \it{data} is NULL, then it will initialize a new empty buffer which will
|
If \it{data} is NULL, then it will initialize a new empty buffer which will
|
||||||
grow when it needs.
|
grow if required.
|
||||||
|
|
||||||
\wxheading{Warning}
|
\wxheading{Warning}
|
||||||
|
|
||||||
|
@@ -253,9 +253,6 @@ class WXDLLEXPORT wxStreamBuffer {
|
|||||||
char *m_buffer_start, *m_buffer_end, *m_buffer_pos;
|
char *m_buffer_start, *m_buffer_end, *m_buffer_pos;
|
||||||
size_t m_buffer_size;
|
size_t m_buffer_size;
|
||||||
|
|
||||||
char *m_wback;
|
|
||||||
size_t m_wbacksize, m_wbackcur;
|
|
||||||
|
|
||||||
bool m_fixed, m_flushable;
|
bool m_fixed, m_flushable;
|
||||||
|
|
||||||
wxStreamBase *m_stream;
|
wxStreamBase *m_stream;
|
||||||
|
@@ -63,6 +63,7 @@ BEGIN_EVENT_TABLE(MyApp, wxApp)
|
|||||||
EVT_MENU(TYPES_STREAM, MyApp::DoStreamDemo)
|
EVT_MENU(TYPES_STREAM, MyApp::DoStreamDemo)
|
||||||
EVT_MENU(TYPES_STREAM2, MyApp::DoStreamDemo2)
|
EVT_MENU(TYPES_STREAM2, MyApp::DoStreamDemo2)
|
||||||
EVT_MENU(TYPES_STREAM3, MyApp::DoStreamDemo3)
|
EVT_MENU(TYPES_STREAM3, MyApp::DoStreamDemo3)
|
||||||
|
EVT_MENU(TYPES_STREAM4, MyApp::DoStreamDemo4)
|
||||||
EVT_MENU(TYPES_MIME, MyApp::DoMIMEDemo)
|
EVT_MENU(TYPES_MIME, MyApp::DoMIMEDemo)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
@@ -93,6 +94,7 @@ bool MyApp::OnInit()
|
|||||||
test_menu->Append(TYPES_STREAM, "&Stream test");
|
test_menu->Append(TYPES_STREAM, "&Stream test");
|
||||||
test_menu->Append(TYPES_STREAM2, "&Stream seek test");
|
test_menu->Append(TYPES_STREAM2, "&Stream seek test");
|
||||||
test_menu->Append(TYPES_STREAM3, "&Stream error test");
|
test_menu->Append(TYPES_STREAM3, "&Stream error test");
|
||||||
|
test_menu->Append(TYPES_STREAM4, "&Stream buffer test");
|
||||||
test_menu->AppendSeparator();
|
test_menu->AppendSeparator();
|
||||||
test_menu->Append(TYPES_MIME, "&MIME database test");
|
test_menu->Append(TYPES_MIME, "&MIME database test");
|
||||||
|
|
||||||
@@ -491,7 +493,145 @@ void MyApp::DoStreamDemo3(wxCommandEvent& WXUNUSED(event))
|
|||||||
case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( "wxSTREAM_WRITE_ERROR\n" ); break;
|
case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( "wxSTREAM_WRITE_ERROR\n" ); break;
|
||||||
default: textCtrl.WriteText( "Huh?\n" ); break;
|
default: textCtrl.WriteText( "Huh?\n" ); break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MyApp::DoStreamDemo4(wxCommandEvent& WXUNUSED(event))
|
||||||
|
{
|
||||||
|
wxTextCtrl& textCtrl = * GetTextCtrl();
|
||||||
|
|
||||||
|
wxString msg;
|
||||||
|
|
||||||
|
textCtrl.Clear();
|
||||||
|
textCtrl << "\nTesting wxStreamBuffer:\n\n";
|
||||||
|
|
||||||
|
// bigger than buffer
|
||||||
|
textCtrl.WriteText( "Writing 2000x 1 to wxFileOutputStream.\n\n" );
|
||||||
|
|
||||||
|
wxFileOutputStream file_output( "test_wx.dat" );
|
||||||
|
for (int i = 0; i < 2000; i++)
|
||||||
|
{
|
||||||
|
char ch = 1;
|
||||||
|
file_output.Write( &ch, 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
textCtrl.WriteText( "Opening with a buffered wxFileInputStream:\n\n" );
|
||||||
|
|
||||||
|
wxFileInputStream file_input( "test_wx.dat" );
|
||||||
|
wxBufferedInputStream buf_input( file_input );
|
||||||
|
|
||||||
|
textCtrl.WriteText( "wxBufferedInputStream.LastError() returns: " );
|
||||||
|
switch (buf_input.LastError())
|
||||||
|
{
|
||||||
|
case wxSTREAM_NOERROR: textCtrl.WriteText( "wxSTREAM_NOERROR\n" ); break;
|
||||||
|
case wxSTREAM_EOF: textCtrl.WriteText( "wxSTREAM_EOF\n" ); break;
|
||||||
|
case wxSTREAM_READ_ERROR: textCtrl.WriteText( "wxSTREAM_READ_ERROR\n" ); break;
|
||||||
|
case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( "wxSTREAM_WRITE_ERROR\n" ); break;
|
||||||
|
default: textCtrl.WriteText( "Huh?\n" ); break;
|
||||||
|
}
|
||||||
|
msg.Printf( "wxBufferedInputStream.LastRead() returns: %d\n", (int)buf_input.LastRead() );
|
||||||
|
textCtrl.WriteText( msg );
|
||||||
|
msg.Printf( "wxBufferedInputStream.TellI() returns: %d\n", (int)buf_input.TellI() );
|
||||||
|
textCtrl.WriteText( msg );
|
||||||
|
textCtrl.WriteText( "\n\n" );
|
||||||
|
|
||||||
|
|
||||||
|
textCtrl.WriteText( "Seeking to position 300:\n\n" );
|
||||||
|
|
||||||
|
buf_input.SeekI( 300 );
|
||||||
|
|
||||||
|
textCtrl.WriteText( "wxBufferedInputStream.LastError() returns: " );
|
||||||
|
switch (buf_input.LastError())
|
||||||
|
{
|
||||||
|
case wxSTREAM_NOERROR: textCtrl.WriteText( "wxSTREAM_NOERROR\n" ); break;
|
||||||
|
case wxSTREAM_EOF: textCtrl.WriteText( "wxSTREAM_EOF\n" ); break;
|
||||||
|
case wxSTREAM_READ_ERROR: textCtrl.WriteText( "wxSTREAM_READ_ERROR\n" ); break;
|
||||||
|
case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( "wxSTREAM_WRITE_ERROR\n" ); break;
|
||||||
|
default: textCtrl.WriteText( "Huh?\n" ); break;
|
||||||
|
}
|
||||||
|
msg.Printf( "wxBufferedInputStream.LastRead() returns: %d\n", (int)buf_input.LastRead() );
|
||||||
|
textCtrl.WriteText( msg );
|
||||||
|
msg.Printf( "wxBufferedInputStream.TellI() returns: %d\n", (int)buf_input.TellI() );
|
||||||
|
textCtrl.WriteText( msg );
|
||||||
|
textCtrl.WriteText( "\n\n" );
|
||||||
|
|
||||||
|
|
||||||
|
char buf[2000];
|
||||||
|
|
||||||
|
textCtrl.WriteText( "Reading 500 bytes:\n\n" );
|
||||||
|
|
||||||
|
buf_input.Read( buf, 500 );
|
||||||
|
|
||||||
|
textCtrl.WriteText( "wxBufferedInputStream.LastError() returns: " );
|
||||||
|
switch (buf_input.LastError())
|
||||||
|
{
|
||||||
|
case wxSTREAM_NOERROR: textCtrl.WriteText( "wxSTREAM_NOERROR\n" ); break;
|
||||||
|
case wxSTREAM_EOF: textCtrl.WriteText( "wxSTREAM_EOF\n" ); break;
|
||||||
|
case wxSTREAM_READ_ERROR: textCtrl.WriteText( "wxSTREAM_READ_ERROR\n" ); break;
|
||||||
|
case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( "wxSTREAM_WRITE_ERROR\n" ); break;
|
||||||
|
default: textCtrl.WriteText( "Huh?\n" ); break;
|
||||||
|
}
|
||||||
|
msg.Printf( "wxBufferedInputStream.LastRead() returns: %d\n", (int)buf_input.LastRead() );
|
||||||
|
textCtrl.WriteText( msg );
|
||||||
|
msg.Printf( "wxBufferedInputStream.TellI() returns: %d\n", (int)buf_input.TellI() );
|
||||||
|
textCtrl.WriteText( msg );
|
||||||
|
textCtrl.WriteText( "\n\n" );
|
||||||
|
|
||||||
|
textCtrl.WriteText( "Reading another 500 bytes:\n\n" );
|
||||||
|
|
||||||
|
buf_input.Read( buf, 500 );
|
||||||
|
|
||||||
|
textCtrl.WriteText( "wxBufferedInputStream.LastError() returns: " );
|
||||||
|
switch (buf_input.LastError())
|
||||||
|
{
|
||||||
|
case wxSTREAM_NOERROR: textCtrl.WriteText( "wxSTREAM_NOERROR\n" ); break;
|
||||||
|
case wxSTREAM_EOF: textCtrl.WriteText( "wxSTREAM_EOF\n" ); break;
|
||||||
|
case wxSTREAM_READ_ERROR: textCtrl.WriteText( "wxSTREAM_READ_ERROR\n" ); break;
|
||||||
|
case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( "wxSTREAM_WRITE_ERROR\n" ); break;
|
||||||
|
default: textCtrl.WriteText( "Huh?\n" ); break;
|
||||||
|
}
|
||||||
|
msg.Printf( "wxBufferedInputStream.LastRead() returns: %d\n", (int)buf_input.LastRead() );
|
||||||
|
textCtrl.WriteText( msg );
|
||||||
|
msg.Printf( "wxBufferedInputStream.TellI() returns: %d\n", (int)buf_input.TellI() );
|
||||||
|
textCtrl.WriteText( msg );
|
||||||
|
textCtrl.WriteText( "\n\n" );
|
||||||
|
|
||||||
|
textCtrl.WriteText( "Reading another 500 bytes:\n\n" );
|
||||||
|
|
||||||
|
buf_input.Read( buf, 500 );
|
||||||
|
|
||||||
|
textCtrl.WriteText( "wxBufferedInputStream.LastError() returns: " );
|
||||||
|
switch (buf_input.LastError())
|
||||||
|
{
|
||||||
|
case wxSTREAM_NOERROR: textCtrl.WriteText( "wxSTREAM_NOERROR\n" ); break;
|
||||||
|
case wxSTREAM_EOF: textCtrl.WriteText( "wxSTREAM_EOF\n" ); break;
|
||||||
|
case wxSTREAM_READ_ERROR: textCtrl.WriteText( "wxSTREAM_READ_ERROR\n" ); break;
|
||||||
|
case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( "wxSTREAM_WRITE_ERROR\n" ); break;
|
||||||
|
default: textCtrl.WriteText( "Huh?\n" ); break;
|
||||||
|
}
|
||||||
|
msg.Printf( "wxBufferedInputStream.LastRead() returns: %d\n", (int)buf_input.LastRead() );
|
||||||
|
textCtrl.WriteText( msg );
|
||||||
|
msg.Printf( "wxBufferedInputStream.TellI() returns: %d\n", (int)buf_input.TellI() );
|
||||||
|
textCtrl.WriteText( msg );
|
||||||
|
textCtrl.WriteText( "\n\n" );
|
||||||
|
|
||||||
|
textCtrl.WriteText( "Reading another 500 bytes:\n\n" );
|
||||||
|
|
||||||
|
buf_input.Read( buf, 500 );
|
||||||
|
|
||||||
|
textCtrl.WriteText( "wxBufferedInputStream.LastError() returns: " );
|
||||||
|
switch (buf_input.LastError())
|
||||||
|
{
|
||||||
|
case wxSTREAM_NOERROR: textCtrl.WriteText( "wxSTREAM_NOERROR\n" ); break;
|
||||||
|
case wxSTREAM_EOF: textCtrl.WriteText( "wxSTREAM_EOF\n" ); break;
|
||||||
|
case wxSTREAM_READ_ERROR: textCtrl.WriteText( "wxSTREAM_READ_ERROR\n" ); break;
|
||||||
|
case wxSTREAM_WRITE_ERROR: textCtrl.WriteText( "wxSTREAM_WRITE_ERROR\n" ); break;
|
||||||
|
default: textCtrl.WriteText( "Huh?\n" ); break;
|
||||||
|
}
|
||||||
|
msg.Printf( "wxBufferedInputStream.LastRead() returns: %d\n", (int)buf_input.LastRead() );
|
||||||
|
textCtrl.WriteText( msg );
|
||||||
|
msg.Printf( "wxBufferedInputStream.TellI() returns: %d\n", (int)buf_input.TellI() );
|
||||||
|
textCtrl.WriteText( msg );
|
||||||
|
textCtrl.WriteText( "\n\n" );
|
||||||
}
|
}
|
||||||
|
|
||||||
#if wxUSE_UNICODE
|
#if wxUSE_UNICODE
|
||||||
|
@@ -32,6 +32,7 @@ public:
|
|||||||
void DoStreamDemo(wxCommandEvent& event);
|
void DoStreamDemo(wxCommandEvent& event);
|
||||||
void DoStreamDemo2(wxCommandEvent& event);
|
void DoStreamDemo2(wxCommandEvent& event);
|
||||||
void DoStreamDemo3(wxCommandEvent& event);
|
void DoStreamDemo3(wxCommandEvent& event);
|
||||||
|
void DoStreamDemo4(wxCommandEvent& event);
|
||||||
#if wxUSE_UNICODE
|
#if wxUSE_UNICODE
|
||||||
void DoUnicodeDemo(wxCommandEvent& event);
|
void DoUnicodeDemo(wxCommandEvent& event);
|
||||||
#endif
|
#endif
|
||||||
@@ -78,6 +79,7 @@ enum
|
|||||||
TYPES_STREAM,
|
TYPES_STREAM,
|
||||||
TYPES_STREAM2,
|
TYPES_STREAM2,
|
||||||
TYPES_STREAM3,
|
TYPES_STREAM3,
|
||||||
|
TYPES_STREAM4,
|
||||||
TYPES_MIME
|
TYPES_MIME
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user