]>
git.saurik.com Git - wxWidgets.git/blob - src/common/sstream.cpp
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: common/sstream.cpp
3 // Purpose: string-based streams implementation
4 // Author: Vadim Zeitlin
5 // Modified by: Ryan Norton (UTF8 UNICODE)
8 // Copyright: (c) 2004 Vadim Zeitlin <vadim@wxwindows.org>
9 // Licence: wxWindows licence
10 ///////////////////////////////////////////////////////////////////////////////
12 // ============================================================================
14 // ============================================================================
16 // ----------------------------------------------------------------------------
18 // ----------------------------------------------------------------------------
20 // For compilers that support precompilation, includes "wx.h".
21 #include "wx/wxprec.h"
29 #include "wx/sstream.h"
31 // ============================================================================
32 // wxStringInputStream implementation
33 // ============================================================================
35 // ----------------------------------------------------------------------------
36 // construction/destruction
37 // ----------------------------------------------------------------------------
39 wxStringInputStream::wxStringInputStream(const wxString
& s
)
41 : m_str(s
), m_buf(wxMBConvUTF8().cWX2MB(s
).release()), m_len(strlen(m_buf
))
43 : m_str(s
), m_buf((char*)s
.c_str()), m_len(s
.length())
47 wxASSERT_MSG(m_buf
!= NULL
, _T("Could not convert string to UTF8!"));
52 wxStringInputStream::~wxStringInputStream()
55 // Note: wx[W]CharBuffer uses malloc()/free()
60 // ----------------------------------------------------------------------------
62 // ----------------------------------------------------------------------------
64 wxFileOffset
wxStringInputStream::GetLength() const
69 // ----------------------------------------------------------------------------
71 // ----------------------------------------------------------------------------
73 wxFileOffset
wxStringInputStream::OnSysSeek(wxFileOffset ofs
, wxSeekMode mode
)
78 // nothing to do, ofs already ok
90 wxFAIL_MSG( _T("invalid seek mode") );
91 return wxInvalidOffset
;
94 if ( ofs
< 0 || wx_static_cast(size_t, ofs
) >= m_len
)
95 return wxInvalidOffset
;
97 m_pos
= wx_static_cast(size_t, ofs
);
102 wxFileOffset
wxStringInputStream::OnSysTell() const
104 return wx_static_cast(wxFileOffset
, m_pos
);
107 // ----------------------------------------------------------------------------
109 // ----------------------------------------------------------------------------
111 size_t wxStringInputStream::OnSysRead(void *buffer
, size_t size
)
113 const size_t sizeMax
= m_len
- m_pos
;
115 if ( size
>= sizeMax
)
119 m_lasterror
= wxSTREAM_EOF
;
126 memcpy(buffer
, m_buf
+ m_pos
, size
);
132 // ============================================================================
133 // wxStringOutputStream implementation
134 // ============================================================================
136 // ----------------------------------------------------------------------------
138 // ----------------------------------------------------------------------------
140 wxFileOffset
wxStringOutputStream::OnSysTell() const
142 return wx_static_cast(wxFileOffset
, m_pos
);
145 // ----------------------------------------------------------------------------
147 // ----------------------------------------------------------------------------
149 size_t wxStringOutputStream::OnSysWrite(const void *buffer
, size_t size
)
151 const char *p
= wx_static_cast(const char *, buffer
);
153 // append the input buffer (may not be null terminated - thus
154 // the literal length
155 m_str
->Append(wxString(p
, m_conv
, size
));
157 // return number of bytes actually written
163 #endif // wxUSE_STREAMS