public:
// ctor associates the stream with the given string which makes a copy of
// it
- wxStringInputStream(const wxString& s)
- : m_str(s)
- {
- m_pos = 0;
- }
+ wxStringInputStream(const wxString& s);
- virtual size_t GetSize() const { return m_str.length(); }
+ virtual wxFileOffset GetLength() const;
protected:
- virtual off_t OnSysSeek(off_t ofs, wxSeekMode mode);
- virtual off_t OnSysTell() const;
+ virtual wxFileOffset OnSysSeek(wxFileOffset ofs, wxSeekMode mode);
+ virtual wxFileOffset OnSysTell() const;
virtual size_t OnSysRead(void *buffer, size_t size);
private:
- // the string we're reading from
+ // the string that was passed in the ctor
wxString m_str;
+ // the buffer we're reading from
+ 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);
const wxString& GetString() const { return *m_str; }
protected:
- virtual off_t OnSysTell() const;
+ virtual wxFileOffset OnSysTell() const;
virtual size_t OnSysWrite(const void *buffer, size_t size);
private:
// position in the stream in bytes, *not* in chars
size_t m_pos;
+ // 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