+void wxDataInputStream::ReadLL(wxLongLong *buffer, size_t size)
+{
+ DoReadLL(buffer, size, m_input, m_be_order);
+}
+
+wxLongLong wxDataInputStream::ReadLL(void)
+{
+ wxLongLong ll;
+ DoReadLL(&ll, (size_t)1, m_input, m_be_order);
+ return ll;
+}
+#endif // wxUSE_LONGLONG
+
+void wxDataInputStream::Read32(wxUint32 *buffer, size_t size)
+{
+ m_input->Read(buffer, size * 4);
+
+ if (m_be_order)
+ {
+ for (wxUint32 i=0; i<size; i++)
+ {
+ wxUint32 v = wxUINT32_SWAP_ON_LE(*buffer);
+ *(buffer++) = v;
+ }
+ }
+ else
+ {
+ for (wxUint32 i=0; i<size; i++)
+ {
+ wxUint32 v = wxUINT32_SWAP_ON_BE(*buffer);
+ *(buffer++) = v;
+ }
+ }
+}
+
+void wxDataInputStream::Read16(wxUint16 *buffer, size_t size)
+{
+ m_input->Read(buffer, size * 2);
+
+ if (m_be_order)
+ {
+ for (wxUint32 i=0; i<size; i++)
+ {
+ wxUint16 v = wxUINT16_SWAP_ON_LE(*buffer);
+ *(buffer++) = v;
+ }
+ }
+ else
+ {
+ for (wxUint32 i=0; i<size; i++)
+ {
+ wxUint16 v = wxUINT16_SWAP_ON_BE(*buffer);
+ *(buffer++) = v;
+ }
+ }
+}
+
+void wxDataInputStream::Read8(wxUint8 *buffer, size_t size)
+{
+ m_input->Read(buffer, size);
+}
+
+void wxDataInputStream::ReadDouble(double *buffer, size_t size)
+{
+ for (wxUint32 i=0; i<size; i++)
+ {
+ *(buffer++) = ReadDouble();
+ }
+}
+
+wxDataInputStream& wxDataInputStream::operator>>(wxString& s)
+{
+ s = ReadString();
+ return *this;
+}
+
+wxDataInputStream& wxDataInputStream::operator>>(wxInt8& c)
+{
+ c = (wxInt8)Read8();
+ return *this;
+}
+
+wxDataInputStream& wxDataInputStream::operator>>(wxInt16& i)
+{
+ i = (wxInt16)Read16();
+ return *this;
+}
+
+wxDataInputStream& wxDataInputStream::operator>>(wxInt32& i)
+{
+ i = (wxInt32)Read32();
+ return *this;
+}
+
+wxDataInputStream& wxDataInputStream::operator>>(wxUint8& c)
+{
+ c = Read8();
+ return *this;
+}
+
+wxDataInputStream& wxDataInputStream::operator>>(wxUint16& i)
+{
+ i = Read16();
+ return *this;
+}
+
+wxDataInputStream& wxDataInputStream::operator>>(wxUint32& i)
+{
+ i = Read32();
+ return *this;
+}
+
+#if wxHAS_INT64
+wxDataInputStream& wxDataInputStream::operator>>(wxUint64& i)
+{
+ i = Read64();
+ return *this;
+}
+
+wxDataInputStream& wxDataInputStream::operator>>(wxInt64& i)
+{
+ i = Read64();
+ return *this;
+}
+#endif // wxHAS_INT64
+
+#if defined(wxLongLong_t) && wxUSE_LONGLONG
+wxDataInputStream& wxDataInputStream::operator>>(wxULongLong& i)
+{
+ i = ReadLL();
+ return *this;
+}
+
+wxDataInputStream& wxDataInputStream::operator>>(wxLongLong& i)
+{
+ i = ReadLL();
+ return *this;
+}
+#endif // wxLongLong_t
+
+wxDataInputStream& wxDataInputStream::operator>>(double& i)
+{
+ i = ReadDouble();
+ return *this;
+}
+
+wxDataInputStream& wxDataInputStream::operator>>(float& f)
+{
+ f = (float)ReadDouble();
+ return *this;
+}
+
+// ---------------------------------------------------------------------------
+// wxDataOutputStream
+// ---------------------------------------------------------------------------
+
+#if wxUSE_UNICODE
+wxDataOutputStream::wxDataOutputStream(wxOutputStream& s, const wxMBConv& conv)
+ : m_output(&s), m_be_order(false), m_conv(conv.Clone())
+#else
+wxDataOutputStream::wxDataOutputStream(wxOutputStream& s)
+ : m_output(&s), m_be_order(false)
+#endif
+{
+}
+
+wxDataOutputStream::~wxDataOutputStream()
+{
+#if wxUSE_UNICODE
+ delete m_conv;
+#endif // wxUSE_UNICODE
+}
+
+#if wxHAS_INT64
+void wxDataOutputStream::Write64(wxUint64 i)
+{
+ Write64(&i, 1);
+}
+
+void wxDataOutputStream::Write64(wxInt64 i)
+{
+ Write64(&i, 1);
+}
+#endif // wxHAS_INT64
+
+void wxDataOutputStream::Write32(wxUint32 i)
+{
+ wxUint32 i32;
+
+ if (m_be_order)
+ i32 = wxUINT32_SWAP_ON_LE(i);
+ else
+ i32 = wxUINT32_SWAP_ON_BE(i);
+ m_output->Write(&i32, 4);
+}
+
+void wxDataOutputStream::Write16(wxUint16 i)
+{
+ wxUint16 i16;
+
+ if (m_be_order)
+ i16 = wxUINT16_SWAP_ON_LE(i);
+ else
+ i16 = wxUINT16_SWAP_ON_BE(i);
+
+ m_output->Write(&i16, 2);
+}
+
+void wxDataOutputStream::Write8(wxUint8 i)
+{
+ m_output->Write(&i, 1);
+}
+
+void wxDataOutputStream::WriteString(const wxString& string)
+{
+#if wxUSE_UNICODE
+ const wxWX2MBbuf buf = string.mb_str(*m_conv);
+#else
+ const wxWX2MBbuf buf = string.mb_str();
+#endif
+ size_t len = strlen(buf);
+ Write32(len);
+ if (len > 0)
+ m_output->Write(buf, len);
+}
+
+void wxDataOutputStream::WriteDouble(double d)
+{