+ if (len > 0)
+ {
+#if wxUSE_UNICODE
+ char *tmp = new char[len + 1];
+ m_input->Read(tmp, len);
+ tmp[len] = 0;
+ wxString ret( (const wxChar*) m_conv.cMB2WX(tmp) );
+ delete[] tmp;
+#else
+ wxString ret;
+ m_input->Read( ret.GetWriteBuf(len), len);
+ ret.UngetWriteBuf();
+#endif
+ return ret;
+ }
+ else
+ return wxEmptyString;
+}
+
+void wxDataInputStream::Read64(wxUint64 *buffer, size_t size)
+{
+ m_input->Read(buffer, size * 8);
+
+ if (m_be_order)
+ {
+ for (wxUint32 i=0; i<size; i++)
+ {
+ wxUint64 v = wxUINT64_SWAP_ON_LE(*buffer);
+ *(buffer++) = v;
+ }
+ }
+ else
+ {
+ for (wxUint32 i=0; i<size; i++)
+ {
+ wxUint64 v = wxUINT64_SWAP_ON_BE(*buffer);
+ *(buffer++) = v;
+ }
+ }
+}
+
+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();
+ }