// ctor associates the stream with the given string which makes a copy of
// it
wxStringInputStream(const wxString& s);
- virtual ~wxStringInputStream();
virtual wxFileOffset GetLength() const;
wxString m_str;
// the buffer we're reading from
- char* m_buf;
+ wxCharBuffer m_buf;
// length of the buffer we're reading from
size_t m_len;
// position in the stream in bytes, *not* in chars
size_t m_pos;
- DECLARE_NO_COPY_CLASS(wxStringInputStream)
+ wxDECLARE_NO_COPY_CLASS(wxStringInputStream);
};
// ----------------------------------------------------------------------------
public:
// The stream will write data either to the provided string or to an
// internal string which can be retrieved using GetString()
- wxStringOutputStream(wxString *pString = NULL)
+ //
+ // Note that the conversion object should have the life time greater than
+ // this stream.
+ wxStringOutputStream(wxString *pString = NULL,
+ wxMBConv& conv = wxConvUTF8)
+ : m_conv(conv)
+#if wxUSE_UNICODE_WCHAR
+ , m_unconv(0)
+#endif // wxUSE_UNICODE_WCHAR
{
m_str = pString ? pString : &m_strInternal;
m_pos = m_str->length() / sizeof(wxChar);
// position in the stream in bytes, *not* in chars
size_t m_pos;
-#if wxUSE_WCHAR_T
- // string encoding converter (UTF8 is the standard)
- wxMBConvUTF8 m_conv;
-#else
- wxMBConv m_conv;
-#endif
+ // converter to use: notice that with the default UTF-8 one the input
+ // stream must contain valid UTF-8 data, use wxConvISO8859_1 to work with
+ // arbitrary 8 bit data
+ wxMBConv& m_conv;
- DECLARE_NO_COPY_CLASS(wxStringOutputStream)
+#if wxUSE_UNICODE_WCHAR
+ // unconverted data from the last call to OnSysWrite()
+ wxMemoryBuffer m_unconv;
+#endif // wxUSE_UNICODE_WCHAR
+
+ wxDECLARE_NO_COPY_CLASS(wxStringOutputStream);
};
#endif // wxUSE_STREAMS