// Modified by:
// Created: 28/06/98
// RCS-ID: $Id$
-// Copyright: (c) Guilhem Lavaux
-// Licence: wxWindows license
+// Copyright: (c) Guilhem Lavaux
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
// 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
{
}
{
}
+wxUint64 wxDataInputStream::Read64()
+{
+ wxUint64 i64;
+
+ m_input->Read(&i64, 8);
+
+ if (m_be_order)
+ return wxUINT64_SWAP_ON_LE(i64);
+ else
+ return wxUINT64_SWAP_ON_BE(i64);
+}
+
wxUint32 wxDataInputStream::Read32()
{
wxUint32 i32;
wxString wxDataInputStream::ReadString()
{
- wxString wx_string;
- char *string;
- unsigned long len;
+ size_t len;
len = Read32();
- string = new char[len+1];
- m_input->Read(string, len);
-
- string[len] = 0;
- wx_string = string;
- delete string;
-
- return wx_string;
+ 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;
}
-
+
wxDataInputStream& wxDataInputStream::operator>>(wxString& s)
{
s = ReadString();
return *this;
}
+wxDataInputStream& wxDataInputStream::operator>>(wxUint64& i)
+{
+ i = Read64();
+ return *this;
+}
+
wxDataInputStream& wxDataInputStream::operator>>(double& i)
{
i = ReadDouble();
// 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_output(&s), m_be_order(FALSE)
+#endif
{
}
{
}
+void wxDataOutputStream::Write64(wxUint64 i)
+{
+ wxUint64 i64;
+
+ if (m_be_order)
+ i64 = wxUINT64_SWAP_ON_LE(i);
+ else
+ i64 = wxUINT64_SWAP_ON_BE(i);
+ m_output->Write(&i64, 8);
+}
+
void wxDataOutputStream::Write32(wxUint32 i)
{
wxUint32 i32;
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.Length());
- 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
#if wxUSE_APPLE_IEEE
ConvertToIeeeExtended(d, (unsigned char *)buf);
#else
-# pragma warning "wxDataOutputStream::WriteDouble() not using IeeeExtended - will not work!"
- buf[0] = '\0';
+#ifndef __VMS__
+# pragma warning "wxDataOutputStream::WriteDouble() not using IeeeExtended - will not work!"
+#endif
+ buf[0] = '\0';
#endif
m_output->Write(buf, 10);
}
return *this;
}
-wxDataOutputStream& wxDataOutputStream::operator<<(wxString& string)
+wxDataOutputStream& wxDataOutputStream::operator<<(const wxString& string)
{
WriteString(string);
return *this;
return *this;
}
+wxDataOutputStream& wxDataOutputStream::operator<<(wxUint64 i)
+{
+ Write64(i);
+ return *this;
+}
+
wxDataOutputStream& wxDataOutputStream::operator<<(double f)
{
WriteDouble(f);
#endif
// wxUSE_STREAMS
-
+