/////////////////////////////////////////////////////////////////////////////
-// Name: datstrm.cpp
+// Name: src/common/datstrm.cpp
// Purpose: Data stream classes
// Author: Guilhem Lavaux
// Modified by: Mickael Gilabert
#if wxUSE_STREAMS
#include "wx/datstrm.h"
-#include "wx/math.h"
+
+#ifndef WX_PRECOMP
+ #include "wx/math.h"
+#endif //WX_PRECOMP
// ---------------------------------------------------------------------------
// wxDataInputStream
// ---------------------------------------------------------------------------
#if wxUSE_UNICODE
-wxDataInputStream::wxDataInputStream(wxInputStream& s, wxMBConv& conv)
- : m_input(&s), m_be_order(false), m_conv(conv)
+wxDataInputStream::wxDataInputStream(wxInputStream& s, const wxMBConv& conv)
+ : m_input(&s), m_be_order(false), m_conv(conv.Clone())
#else
wxDataInputStream::wxDataInputStream(wxInputStream& s)
: m_input(&s), m_be_order(false)
{
}
+wxDataInputStream::~wxDataInputStream()
+{
+#if wxUSE_UNICODE
+ delete m_conv;
+#endif // wxUSE_UNICODE
+}
+
+#if wxUSE_UNICODE
+void wxDataInputStream::SetConv( const wxMBConv &conv )
+{
+ delete m_conv;
+ m_conv = conv.Clone();
+}
+#endif
+
#if wxHAS_INT64
wxUint64 wxDataInputStream::Read64()
{
char buf[10];
m_input->Read(buf, 10);
- return ConvertFromIeeeExtended((const wxInt8 *)buf);
+ return wxConvertFromIeeeExtended((const wxInt8 *)buf);
#else
return 0.0;
#endif
wxString wxDataInputStream::ReadString()
{
- size_t len;
-
- len = Read32();
+ wxString ret;
- if (len > 0)
- {
+ const size_t len = Read32();
+ if ( len > 0 )
+ {
#if wxUSE_UNICODE
- wxCharBuffer tmp(len + 1);
- m_input->Read(tmp.data(), len);
- tmp.data()[len] = '\0';
- wxString ret(m_conv.cMB2WX(tmp.data()));
+ wxCharBuffer tmp(len + 1);
+ if ( tmp )
+ {
+ m_input->Read(tmp.data(), len);
+ tmp.data()[len] = '\0';
+ ret = m_conv->cMB2WX(tmp.data());
+ }
#else
- wxString ret;
- m_input->Read( wxStringBuffer(ret, len), len);
+ wxStringBuffer buf(ret, len);
+ if ( buf )
+ m_input->Read(buf, len);
#endif
+ }
+
return ret;
- }
- else
- return wxEmptyString;
}
#if wxUSE_LONGLONG
wxLongLong wxDataInputStream::ReadLL(void)
{
wxLongLong ll;
- DoReadLL(&ll, 1, m_input, m_be_order);
+ DoReadLL(&ll, (size_t)1, m_input, m_be_order);
return ll;
}
#endif // wxUSE_LONGLONG
// ---------------------------------------------------------------------------
#if wxUSE_UNICODE
-wxDataOutputStream::wxDataOutputStream(wxOutputStream& s, wxMBConv& conv)
- : m_output(&s), m_be_order(false), m_conv(conv)
+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)
{
}
+wxDataOutputStream::~wxDataOutputStream()
+{
+#if wxUSE_UNICODE
+ delete m_conv;
+#endif // wxUSE_UNICODE
+}
+
+#if wxUSE_UNICODE
+void wxDataOutputStream::SetConv( const wxMBConv &conv )
+{
+ delete m_conv;
+ m_conv = conv.Clone();
+}
+#endif
+
#if wxHAS_INT64
void wxDataOutputStream::Write64(wxUint64 i)
{
void wxDataOutputStream::WriteString(const wxString& string)
{
#if wxUSE_UNICODE
- const wxWX2MBbuf buf = string.mb_str(m_conv);
+ const wxWX2MBbuf buf = string.mb_str(*m_conv);
#else
const wxWX2MBbuf buf = string.mb_str();
#endif
char buf[10];
#if wxUSE_APPLE_IEEE
- ConvertToIeeeExtended(d, (wxInt8 *)buf);
+ wxConvertToIeeeExtended(d, (wxInt8 *)buf);
#else
+ wxUnusedVar(d);
#if !defined(__VMS__) && !defined(__GNUG__)
+#ifdef _MSC_VER
+# pragma message("wxDataOutputStream::WriteDouble() not using IeeeExtended - will not work!")
+#else
# pragma warning "wxDataOutputStream::WriteDouble() not using IeeeExtended - will not work!"
+#endif
#endif
buf[0] = '\0';
#endif
}
}
-wxDataOutputStream& wxDataOutputStream::operator<<(const wxChar *string)
-{
- Write32(wxStrlen(string));
- m_output->Write((const char *)string, wxStrlen(string)*sizeof(wxChar));
- return *this;
-}
-
wxDataOutputStream& wxDataOutputStream::operator<<(const wxString& string)
{
WriteString(string);
#endif
// wxUSE_STREAMS
-