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
This commit is contained in:
Vadim Zeitlin 2008-06-01 03:09:25 +00:00
parent 9d653e810c
commit ca8cf4fffb
4 changed files with 33 additions and 2 deletions

View File

@ -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

View File

@ -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,9 +239,22 @@ 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.

View File

@ -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 );

View File

@ -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());