| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- ///////////////////////////////////////////////////////////////////////////////
- // Name: wx/sstream.h
- // Purpose: string-based streams
- // Author: Vadim Zeitlin
- // Modified by:
- // Created: 2004-09-19
- // Copyright: (c) 2004 Vadim Zeitlin <vadim@wxwindows.org>
- // Licence: wxWindows licence
- ///////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_SSTREAM_H_
- #define _WX_SSTREAM_H_
- #include "wx/stream.h"
- #if wxUSE_STREAMS
- // ----------------------------------------------------------------------------
- // wxStringInputStream is a stream reading from the given (fixed size) string
- // ----------------------------------------------------------------------------
- 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);
- virtual wxFileOffset GetLength() const;
- virtual bool IsSeekable() const { return true; }
- protected:
- virtual wxFileOffset OnSysSeek(wxFileOffset ofs, wxSeekMode mode);
- virtual wxFileOffset OnSysTell() const;
- virtual size_t OnSysRead(void *buffer, size_t size);
- private:
- // 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;
- wxDECLARE_NO_COPY_CLASS(wxStringInputStream);
- };
- // ----------------------------------------------------------------------------
- // wxStringOutputStream writes data to the given string, expanding it as needed
- // ----------------------------------------------------------------------------
- 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()
- //
- // 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);
- }
- // 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);
- private:
- // internal string, not used if caller provided his own string
- wxString m_strInternal;
- // pointer given by the caller or just pointer to m_strInternal
- wxString *m_str;
- // 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
- wxDECLARE_NO_COPY_CLASS(wxStringOutputStream);
- };
- #endif // wxUSE_STREAMS
- #endif // _WX_SSTREAM_H_
|