Unicodification of wxDataStreams
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16246 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -43,13 +43,20 @@ None
|
||||
|
||||
\func{}{wxDataInputStream}{\param{wxInputStream\&}{ stream}}
|
||||
|
||||
\func{}{wxDataInputStream}{\param{wxInputStream\&}{ stream}, \param{wxMBConv\&}{ conv = wxMBConvUTF8}}
|
||||
|
||||
Constructs a datastream object from an input stream. Only read methods will
|
||||
be available.
|
||||
be available. The second form is only available in Unicode build of wxWindows.
|
||||
|
||||
\wxheading{Parameters}
|
||||
|
||||
\docparam{stream}{The input stream.}
|
||||
|
||||
\docparam{conv}{Charset conversion object object used to decode strings in Unicode
|
||||
mode (see \helpref{wxDataInputStream::ReadString}{wxdatainputstreamreadstring}
|
||||
documentation for detailed description). Note that you must not destroy
|
||||
{\it conv} before you destroy this wxDataInputStream instance!}
|
||||
|
||||
\membersection{wxDataInputStream::\destruct{wxDataInputStream}}
|
||||
|
||||
\func{}{\destruct{wxDataInputStream}}{\void}
|
||||
@@ -89,12 +96,17 @@ Reads a 32 bit integer from the stream.
|
||||
|
||||
Reads a double (IEEE encoded) from the stream.
|
||||
|
||||
\membersection{wxDataInputStream::ReadString}
|
||||
\membersection{wxDataInputStream::ReadString}\label{wxdatainputstreamreadstring}
|
||||
|
||||
\func{wxString}{ReadString}{\void}
|
||||
|
||||
Reads a string from a stream. Actually, this function first reads a long integer
|
||||
specifying the length of the string (without the last null character) and then
|
||||
reads the string.
|
||||
Reads a string from a stream. Actually, this function first reads a long
|
||||
integer specifying the length of the string (without the last null character)
|
||||
and then reads the string.
|
||||
|
||||
In Unicode build of wxWindows, the fuction first reads multibyte (char*)
|
||||
string from the stream and then converts it to Unicode using the {\it conv}
|
||||
object passed to constructor and returns the result as wxString. You are
|
||||
responsible for using the same convertor as when writing the stream.
|
||||
|
||||
See also \helpref{wxDataOutputStream::WriteString}{wxdataoutputstreamwritestring}.
|
||||
|
@@ -23,13 +23,22 @@ None
|
||||
|
||||
\func{}{wxDataOutputStream}{\param{wxOutputStream\&}{ stream}}
|
||||
|
||||
\func{}{wxDataOutputStream}{\param{wxOutputStream\&}{ stream}, \param{wxMBConv\&}{ conv = wxMBConvUTF8}}
|
||||
|
||||
Constructs a datastream object from an output stream. Only write methods will
|
||||
be available.
|
||||
be available. The second form is only available in Unicode build of wxWindows.
|
||||
|
||||
\wxheading{Parameters}
|
||||
|
||||
\docparam{stream}{The output stream.}
|
||||
|
||||
\docparam{conv}{Charset conversion object object used to encoding Unicode
|
||||
strings before writing them to the stream
|
||||
in Unicode mode (see \helpref{wxDataOutputStream::WriteString}{wxdataoutputstreamwritestring}
|
||||
documentation for detailed description). Note that you must not destroy
|
||||
{\it conv} before you destroy this wxDataOutputStream instance! It is
|
||||
recommended to use default value (UTF-8).}
|
||||
|
||||
\membersection{wxDataOutputStream::\destruct{wxDataOutputStream}}
|
||||
|
||||
\func{}{\destruct{wxDataOutputStream}}{\void}
|
||||
@@ -69,10 +78,17 @@ Writes the 32 bit integer {\it i32} to the stream.
|
||||
|
||||
Writes the double {\it f} to the stream using the IEEE format.
|
||||
|
||||
\membersection{wxDataOutputStream::WriteString}
|
||||
\membersection{wxDataOutputStream::WriteString}\label{wxdataoutputstreamwritestring}
|
||||
|
||||
\func{void}{WriteString}{{\param const wxString\&}{string}}
|
||||
|
||||
\func{void}{WriteString}{{\param const wxString\& }{string}}
|
||||
|
||||
Writes {\it string} to the stream. Actually, this method writes the size of
|
||||
the string before writing {\it string} itself.
|
||||
|
||||
In ANSI build of wxWindows, the string is written to the stream in exactly
|
||||
same way it is represented in memory. In Unicode build, however, the string
|
||||
is first converted to multibyte representation with {\it conv} object passed
|
||||
to stream's constructor (consequently, ANSI application can read data
|
||||
written by Unicode application, as long as they agree on encoding) and this
|
||||
representation is written to the stream. UTF-8 is used by default.
|
||||
|
@@ -18,13 +18,18 @@
|
||||
|
||||
#include "wx/stream.h"
|
||||
#include "wx/longlong.h"
|
||||
#include "wx/strconv.h"
|
||||
|
||||
#if wxUSE_STREAMS
|
||||
|
||||
class WXDLLEXPORT wxDataInputStream
|
||||
{
|
||||
public:
|
||||
#if wxUSE_UNICODE
|
||||
wxDataInputStream(wxInputStream& s, wxMBConv& conv = wxConvUTF8);
|
||||
#else
|
||||
wxDataInputStream(wxInputStream& s);
|
||||
#endif
|
||||
~wxDataInputStream();
|
||||
|
||||
bool IsOk() { return m_input->IsOk(); }
|
||||
@@ -52,12 +57,19 @@ public:
|
||||
protected:
|
||||
wxInputStream *m_input;
|
||||
bool m_be_order;
|
||||
#if wxUSE_UNICODE
|
||||
wxMBConv& m_conv;
|
||||
#endif
|
||||
};
|
||||
|
||||
class WXDLLEXPORT wxDataOutputStream
|
||||
{
|
||||
public:
|
||||
#if wxUSE_UNICODE
|
||||
wxDataOutputStream(wxOutputStream& s, wxMBConv& conv = wxConvUTF8);
|
||||
#else
|
||||
wxDataOutputStream(wxOutputStream& s);
|
||||
#endif
|
||||
~wxDataOutputStream();
|
||||
|
||||
bool IsOk() { return m_output->IsOk(); }
|
||||
@@ -86,6 +98,9 @@ public:
|
||||
protected:
|
||||
wxOutputStream *m_output;
|
||||
bool m_be_order;
|
||||
#if wxUSE_UNICODE
|
||||
wxMBConv& m_conv;
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@@ -28,8 +28,13 @@
|
||||
// wxDataInputStream
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#if wxUSE_UNICODE
|
||||
wxDataInputStream::wxDataInputStream(wxInputStream& s, wxMBConv& conv)
|
||||
: m_input(&s), m_be_order(FALSE), m_conv(conv)
|
||||
#else
|
||||
wxDataInputStream::wxDataInputStream(wxInputStream& s)
|
||||
: m_input(&s), m_be_order(FALSE)
|
||||
#endif
|
||||
{
|
||||
}
|
||||
|
||||
@@ -108,7 +113,7 @@ wxString wxDataInputStream::ReadString()
|
||||
char *tmp = new char[len + 1];
|
||||
m_input->Read(tmp, len);
|
||||
tmp[len] = 0;
|
||||
wxString s(tmp);
|
||||
wxString s(tmp, m_conv);
|
||||
delete[] tmp;
|
||||
#else
|
||||
wxString s;
|
||||
@@ -185,8 +190,13 @@ wxDataInputStream& wxDataInputStream::operator>>(float& f)
|
||||
// wxDataOutputStream
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#if wxUSE_UNICODE
|
||||
wxDataOutputStream::wxDataOutputStream(wxOutputStream& s, wxMBConv& conv)
|
||||
: m_output(&s), m_be_order(FALSE), m_conv(conv)
|
||||
#else
|
||||
wxDataOutputStream::wxDataOutputStream(wxOutputStream& s)
|
||||
: m_output(&s), m_be_order(FALSE)
|
||||
#endif
|
||||
{
|
||||
}
|
||||
|
||||
@@ -235,10 +245,15 @@ void wxDataOutputStream::Write8(wxUint8 i)
|
||||
|
||||
void wxDataOutputStream::WriteString(const wxString& string)
|
||||
{
|
||||
#if wxUSE_UNICODE
|
||||
const wxWX2MBbuf buf = string.mb_str(m_conv);
|
||||
#else
|
||||
const wxWX2MBbuf buf = string.mb_str();
|
||||
Write32(string.Len());
|
||||
if (string.Len() > 0)
|
||||
m_output->Write(buf, string.Len());
|
||||
#endif
|
||||
size_t len = strlen(buf);
|
||||
Write32(len);
|
||||
if (len > 0)
|
||||
m_output->Write(buf, len);
|
||||
}
|
||||
|
||||
// Must be at global scope for VC++ 5
|
||||
|
Reference in New Issue
Block a user