From ca8cf4fffbe8e6671dd96927cd06ec11513b4173 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 1 Jun 2008 03:09:25 +0000 Subject: [PATCH] added wxTextOutputStream::Flush(): this is necessary with the stateful encodings, such as UTF-7 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53890 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/txtstrm.h | 2 ++ interface/txtstrm.h | 17 +++++++++++++++-- src/common/txtstrm.cpp | 13 +++++++++++++ tests/mbconv/mbconvtest.cpp | 3 +++ 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/include/wx/txtstrm.h b/include/wx/txtstrm.h index a2614ab..0c39837 100644 --- a/include/wx/txtstrm.h +++ b/include/wx/txtstrm.h @@ -127,6 +127,8 @@ public: wxTextOutputStream& PutChar(wxChar c); + void Flush(); + wxTextOutputStream& operator<<(const wxString& string); wxTextOutputStream& operator<<(char c); #if wxUSE_UNICODE && wxWCHAR_T_IS_REAL_TYPE diff --git a/interface/txtstrm.h b/interface/txtstrm.h index 83ab454..89dd377 100644 --- a/interface/txtstrm.h +++ b/interface/txtstrm.h @@ -196,10 +196,10 @@ typedef enum @class wxTextOutputStream @wxheader{txtstrm.h} - This class provides functions that writes text data using an output stream, + This class provides functions that write text data using an output stream, allowing you to write text, floats, and integers. - You can also simulate the C++ cout class: + You can also simulate the C++ @c std::cout class: @code wxFFileOutputStream output( stderr ); @@ -239,10 +239,23 @@ public: /** Destroys the wxTextOutputStream object. + + Also calls Flush(). */ ~wxTextOutputStream(); /** + Flushes the stream. + + This method should be called when using stateful encodings (currently + the only example of such encoding in wxWidgets is wxMBConvUTF7) to + write the end of the encoded data to the stream. + + @since 2.9.0 + */ + void Flush(); + + /** Returns the end-of-line mode. One of ::wxEOL_DOS, ::wxEOL_MAC and ::wxEOL_UNIX. */ diff --git a/src/common/txtstrm.cpp b/src/common/txtstrm.cpp index e516fb4..f7d6c09 100644 --- a/src/common/txtstrm.cpp +++ b/src/common/txtstrm.cpp @@ -426,6 +426,19 @@ wxTextOutputStream& wxTextOutputStream::PutChar(wxChar c) return *this; } +void wxTextOutputStream::Flush() +{ +#if wxUSE_UNICODE + const size_t len = m_conv->FromWChar(NULL, 0, L"", 1); + if ( len > m_conv->GetMBNulLen() ) + { + wxCharBuffer buf(len); + m_conv->FromWChar(buf.data(), len, L"", 1); + m_output.Write(buf, len - m_conv->GetMBNulLen()); + } +#endif // wxUSE_UNICODE +} + wxTextOutputStream& wxTextOutputStream::operator<<(const wxString& string) { WriteString( string ); diff --git a/tests/mbconv/mbconvtest.cpp b/tests/mbconv/mbconvtest.cpp index d25230d..a067451 100644 --- a/tests/mbconv/mbconvtest.cpp +++ b/tests/mbconv/mbconvtest.cpp @@ -1050,6 +1050,9 @@ void MBConvTestCase::TestStreamEncoder( { textOutputStream.PutChar( wideBuffer[i] ); } + + textOutputStream.Flush(); + CPPUNIT_ASSERT_EQUAL( (wxFileOffset)multiBytes, memoryOutputStream.TellO() ); wxCharBuffer copy( memoryOutputStream.TellO() ); memoryOutputStream.CopyTo( copy.data(), memoryOutputStream.TellO()); -- 2.7.4