// ctor associates the stream with the given string which makes a copy of
// it
wxStringInputStream(const wxString& s);
- virtual ~wxStringInputStream();
virtual wxFileOffset GetLength() const;
+ virtual bool IsSeekable() const { return true; }
protected:
virtual wxFileOffset OnSysSeek(wxFileOffset ofs, wxSeekMode mode);
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);
// get the string containing current output
const wxString& GetString() const { return *m_str; }
+ virtual bool IsSeekable() const { return true; }
+
protected:
virtual wxFileOffset OnSysTell() const;
virtual size_t OnSysWrite(const void *buffer, size_t size);
// position in the stream in bytes, *not* in chars
size_t m_pos;
- // string encoding converter (UTF8 is the standard)
- wxMBConvUTF8 m_conv;
+ // 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;
+
+#if wxUSE_UNICODE_WCHAR
+ // unconverted data from the last call to OnSysWrite()
+ wxMemoryBuffer m_unconv;
+#endif // wxUSE_UNICODE_WCHAR
- DECLARE_NO_COPY_CLASS(wxStringOutputStream)
+ wxDECLARE_NO_COPY_CLASS(wxStringOutputStream);
};
#endif // wxUSE_STREAMS