X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/588066b7a39629e44bb39f1ab436b80f38c13f33..7344108e8a129a3f9b4df5ab0f98a1713db03b89:/include/wx/sstream.h?ds=sidebyside diff --git a/include/wx/sstream.h b/include/wx/sstream.h index 9926e33700..318cf776b7 100644 --- a/include/wx/sstream.h +++ b/include/wx/sstream.h @@ -25,13 +25,10 @@ class WXDLLIMPEXP_BASE wxStringInputStream : public wxInputStream 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 wxFileOffset GetLength() const { return m_str.length(); } + virtual wxFileOffset GetLength() const; + virtual bool IsSeekable() const { return true; } protected: virtual wxFileOffset OnSysSeek(wxFileOffset ofs, wxSeekMode mode); @@ -39,14 +36,19 @@ protected: 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); }; // ---------------------------------------------------------------------------- @@ -58,7 +60,15 @@ class WXDLLIMPEXP_BASE wxStringOutputStream : public wxOutputStream 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 + , m_unconv(0) +#endif // wxUSE_UNICODE { m_str = pString ? pString : &m_strInternal; m_pos = m_str->length() / sizeof(wxChar); @@ -67,6 +77,8 @@ public: // 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); @@ -81,8 +93,17 @@ 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 + // unconverted data from the last call to OnSysWrite() + wxMemoryBuffer m_unconv; +#endif // wxUSE_UNICODE - DECLARE_NO_COPY_CLASS(wxStringOutputStream) + wxDECLARE_NO_COPY_CLASS(wxStringOutputStream); }; #endif // wxUSE_STREAMS