summaryrefslogtreecommitdiffstats
path: root/qtools
diff options
context:
space:
mode:
authorDimitri van Heesch <doxygen@gmail.com>2021-03-03 20:13:49 (GMT)
committerDimitri van Heesch <doxygen@gmail.com>2021-03-03 20:13:49 (GMT)
commit29ea1e8227b3e892e7124c8cd8b5f2b8be81a058 (patch)
treeaaf1a0a05d6691789fa79de86fc7f152cc411424 /qtools
parent93f5398050245c427869d865fe04c43c907666d1 (diff)
downloadDoxygen-29ea1e8227b3e892e7124c8cd8b5f2b8be81a058.zip
Doxygen-29ea1e8227b3e892e7124c8cd8b5f2b8be81a058.tar.gz
Doxygen-29ea1e8227b3e892e7124c8cd8b5f2b8be81a058.tar.bz2
Refactoring: replace QTextStream by ifstream
Diffstat (limited to 'qtools')
-rw-r--r--qtools/CMakeLists.txt1
-rw-r--r--qtools/qtextstream.cpp2236
-rw-r--r--qtools/qtextstream.h351
-rw-r--r--qtools/qtl.h27
4 files changed, 1 insertions, 2614 deletions
diff --git a/qtools/CMakeLists.txt b/qtools/CMakeLists.txt
index 78faba1..732449c 100644
--- a/qtools/CMakeLists.txt
+++ b/qtools/CMakeLists.txt
@@ -16,7 +16,6 @@ qgstring.cpp
qiodevice.cpp
qregexp.cpp
qstring.cpp
-qtextstream.cpp
qtextcodec.cpp
qstringlist.cpp
qcstringlist.cpp
diff --git a/qtools/qtextstream.cpp b/qtools/qtextstream.cpp
deleted file mode 100644
index a3abb53..0000000
--- a/qtools/qtextstream.cpp
+++ /dev/null
@@ -1,2236 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of QTextStream class
-**
-** Created : 940922
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#include "qtextstream.h"
-
-#ifndef QT_NO_TEXTSTREAM
-#include "qtextcodec.h"
-#include "qbuffer.h"
-#include "qfile.h"
-#include <stdio.h>
-#include <ctype.h>
-#include <stdlib.h>
-
-#if defined(_OS_WIN32_)
-#include <windows.h>
-#endif
-
-// NOT REVISED
-/*!
- \class QTextStream qtextstream.h
-
- \brief The QTextStream class provides basic functions for reading and
- writing text using a QIODevice.
-
- \ingroup io
-
- \define endl
- \define bin
- \define oct
- \define dec
- \define hex
- \define flush
- \define ws
-
- The text stream class has a functional interface that is very
- similar to that of the standard C++ iostream class. The difference
- between iostream and QTextStream is that our stream operates on a
- QIODevice, which is easily subclassed, while iostream operates on
- FILE * pointers, which can not be subclassed.
-
- Qt provides several global functions similar to the ones in iostream:
- <ul>
- <li> \c bin sets the QTextStream to read/write binary numbers
- <li> \c oct sets the QTextStream to read/write octal numbers
- <li> \c dec sets the QTextStream to read/write decimal numbers
- <li> \c hex sets the QTextStream to read/write hexadecimal numbers
- <li> \c endl forces a line break
- <li> \c flush forces the QIODevice to flush any buffered data
- <li> \c ws eats any available white space (on input)
- <li> \c reset resets the QTextStream to its default mode (see reset()).
- </ul>
-
- \warning By default, QTextStream will automatically detect whether
- integers in the stream are in decimal, octal, hexadecimal or binary
- format when reading from the stream. In particular, a leading '0'
- signifies octal, ie. the sequence "0100" will be interpreted as
- 64.
-
- The QTextStream class reads and writes text and it is not
- appropriate for dealing with binary data (but QDataStream is).
-
- By default output of Unicode text (ie. QString) is done using the
- local 8-bit encoding. This can be changed using the setEncoding()
- method. For input, the QTextStream will auto-detect standard
- Unicode "byte order marked" text files, but otherwise the local
- 8-bit encoding is used.
-
- \sa QDataStream
-*/
-
-/*
- \class QTSManip qtextstream.h
-
- \brief The QTSManip class is an internal helper class for the
- QTextStream.
-
- It is generally a very bad idea to use this class directly in
- application programs.
-
- \internal
-
- This class makes it possible to give the QTextStream function objects
- with arguments, like this:
- \code
- QTextStream cout( stdout, IO_WriteOnly );
- cout << setprecision( 8 ); // QTSManip used here!
- cout << 3.14159265358979323846;
- \endcode
-
- The setprecision() function returns a QTSManip object.
- The QTSManip object contains a pointer to a member function in
- QTextStream and an integer argument.
- When serializing a QTSManip into a QTextStream, the function
- is executed with the argument.
-*/
-
-/*! \fn QTSManip::QTSManip (QTSMFI m, int a)
-
- Constructs a QTSManip object which will call \a m (a member function
- in QTextStream which accepts a single int) with argument \a a when
- QTSManip::exec() is called. Used internally in e.g. endl:
-
- \code
- s << "some text" << endl << "more text";
- \endcode
-*/
-
-/*! \fn void QTSManip::exec (QTextStream& s)
-
- Calls the member function specified in the constructor, for object
- \a s. Used internally in e.g. endl:
-
- \code
- s << "some text" << endl << "more text";
- \endcode
-*/
-
-
-/*****************************************************************************
- QTextStream member functions
- *****************************************************************************/
-
-#if defined(CHECK_STATE)
-#undef CHECK_STREAM_PRECOND
-#define CHECK_STREAM_PRECOND if ( !dev ) { \
- qWarning( "QTextStream: No device" ); \
- return *this; }
-#else
-#define CHECK_STREAM_PRECOND
-#endif
-
-
-#define I_SHORT 0x0010
-#define I_INT 0x0020
-#define I_LONG 0x0030
-#define I_TYPE_MASK 0x00f0
-
-#define I_BASE_2 QTS::bin
-#define I_BASE_8 QTS::oct
-#define I_BASE_10 QTS::dec
-#define I_BASE_16 QTS::hex
-#define I_BASE_MASK (QTS::bin | QTS::oct | QTS::dec | QTS::hex)
-
-#define I_SIGNED 0x0100
-#define I_UNSIGNED 0x0200
-#define I_SIGN_MASK 0x0f00
-
-
-static const QChar QEOF = QChar((ushort)0xffff); //guaranteed not to be a character.
-
-const int QTextStream::basefield = I_BASE_MASK;
-const int QTextStream::adjustfield = ( QTextStream::left |
- QTextStream::right |
- QTextStream::internal );
-const int QTextStream::floatfield = ( QTextStream::scientific |
- QTextStream::fixed );
-
-
-class QTextStreamPrivate {
-public:
-#ifndef QT_NO_TEXTCODEC
- QTextStreamPrivate() : decoder( 0 ), sourceType( NotSet ) {}
- ~QTextStreamPrivate() { delete decoder; }
- QTextDecoder *decoder; //???
-#else
- QTextStreamPrivate() : sourceType( NotSet ) {}
- ~QTextStreamPrivate() { }
-#endif
- QString ungetcBuf;
-
- enum SourceType { NotSet, IODevice, String, ByteArray, File };
- SourceType sourceType;
-};
-
-
-// skips whitespace and returns the first non-whitespace character
-QChar QTextStream::eat_ws()
-{
- QChar c;
- do { c = ts_getc(); } while ( c != QEOF && ts_isspace(c) );
- return c;
-}
-
-void QTextStream::init()
-{
- // ### ungetcBuf = QEOF;
- dev = 0; // no device set
- fstrm = owndev = FALSE;
- mapper = 0;
- d = new QTextStreamPrivate;
- doUnicodeHeader = TRUE; //default to autodetect
- latin1 = TRUE; // ### should use local?
- internalOrder = QChar::networkOrdered(); //default to network order
-}
-
-/*!
- Constructs a data stream that has no IO device.
-*/
-
-QTextStream::QTextStream()
-{
- init();
- setEncoding( Locale ); //###
- reset();
- d->sourceType = QTextStreamPrivate::NotSet;
-}
-
-/*!
- Constructs a text stream that uses the IO device \a iod.
-*/
-
-QTextStream::QTextStream( QIODevice *iod )
-{
- init();
- setEncoding( Locale ); //###
- dev = iod; // set device
- reset();
- d->sourceType = QTextStreamPrivate::IODevice;
-}
-
-// TODO: use special-case handling of this case in QTextStream, and
-// simplify this class to only deal with QChar or QString data.
-class QStringBuffer : public QIODevice {
-public:
- QStringBuffer( QString* str );
- ~QStringBuffer();
- bool open( int m );
- void close();
- void flush();
- uint size() const;
- int at() const;
- bool at( int pos );
- int readBlock( char *p, uint len );
- int writeBlock( const char *p, uint len );
- int getch();
- int putch( int ch );
- int ungetch( int ch );
-protected:
- QString* s;
-
-private: // Disabled copy constructor and operator=
- QStringBuffer( const QStringBuffer & );
- QStringBuffer &operator=( const QStringBuffer & );
-};
-
-
-QStringBuffer::QStringBuffer( QString* str )
-{
- s = str;
-}
-
-QStringBuffer::~QStringBuffer()
-{
-}
-
-
-bool QStringBuffer::open( int m )
-{
- if ( !s ) {
-#if defined(CHECK_STATE)
- qWarning( "QStringBuffer::open: No string" );
-#endif
- return FALSE;
- }
- if ( isOpen() ) { // buffer already open
-#if defined(CHECK_STATE)
- qWarning( "QStringBuffer::open: Buffer already open" );
-#endif
- return FALSE;
- }
- setMode( m );
- if ( m & IO_Truncate ) { // truncate buffer
- s->truncate( 0 );
- }
- if ( m & IO_Append ) { // append to end of buffer
- ioIndex = s->length()*(int)sizeof(QChar);
- } else {
- ioIndex = 0;
- }
- setState( IO_Open );
- setStatus( 0 );
- return TRUE;
-}
-
-void QStringBuffer::close()
-{
- if ( isOpen() ) {
- setFlags( IO_Direct );
- ioIndex = 0;
- }
-}
-
-void QStringBuffer::flush()
-{
-}
-
-uint QStringBuffer::size() const
-{
- return s ? s->length()*(int)sizeof(QChar) : 0;
-}
-
-int QStringBuffer::at() const
-{
- return ioIndex;
-}
-
-bool QStringBuffer::at( int pos )
-{
-#if defined(CHECK_STATE)
- if ( !isOpen() ) {
- qWarning( "QStringBuffer::at: Buffer is not open" );
- return FALSE;
- }
-#endif
- if ( (uint)pos >= s->length()*2 ) {
-#if defined(CHECK_RANGE)
- qWarning( "QStringBuffer::at: Index %d out of range", pos );
-#endif
- return FALSE;
- }
- ioIndex = pos;
- return TRUE;
-}
-
-
-int QStringBuffer::readBlock( char *p, uint len )
-{
-#if defined(CHECK_STATE)
- CHECK_PTR( p );
- if ( !isOpen() ) { // buffer not open
- qWarning( "QStringBuffer::readBlock: Buffer not open" );
- return -1;
- }
- if ( !isReadable() ) { // reading not permitted
- qWarning( "QStringBuffer::readBlock: Read operation not permitted" );
- return -1;
- }
-#endif
- if ( (uint)ioIndex + len > s->length()*sizeof(QChar) ) {
- // overflow
- if ( (uint)ioIndex >= s->length()*sizeof(QChar) ) {
- setStatus( IO_ReadError );
- return -1;
- } else {
- len = s->length()*2 - (uint)ioIndex;
- }
- }
- memcpy( p, ((const char*)(s->unicode()))+ioIndex, len );
- ioIndex += len;
- return len;
-}
-
-int QStringBuffer::writeBlock( const char *p, uint len )
-{
-#if defined(CHECK_NULL)
- if ( p == 0 && len != 0 )
- qWarning( "QStringBuffer::writeBlock: Null pointer error" );
-#endif
-#if defined(CHECK_STATE)
- if ( !isOpen() ) { // buffer not open
- qWarning( "QStringBuffer::writeBlock: Buffer not open" );
- return -1;
- }
- if ( !isWritable() ) { // writing not permitted
- qWarning( "QStringBuffer::writeBlock: Write operation not permitted" );
- return -1;
- }
- if ( ioIndex&1 ) {
- qWarning( "QStringBuffer::writeBlock: non-even index - non Unicode" );
- return -1;
- }
- if ( len&1 ) {
- qWarning( "QStringBuffer::writeBlock: non-even length - non Unicode" );
- return -1;
- }
-#endif
- s->replace(ioIndex/2, len/2, (QChar*)p, len/2);
- ioIndex += len;
- return len;
-}
-
-int QStringBuffer::getch()
-{
-#if defined(CHECK_STATE)
- if ( !isOpen() ) { // buffer not open
- qWarning( "QStringBuffer::getch: Buffer not open" );
- return -1;
- }
- if ( !isReadable() ) { // reading not permitted
- qWarning( "QStringBuffer::getch: Read operation not permitted" );
- return -1;
- }
-#endif
- if ( (uint)ioIndex >= s->length()*2 ) { // overflow
- setStatus( IO_ReadError );
- return -1;
- }
- return *((char*)s->unicode() + ioIndex++);
-}
-
-int QStringBuffer::putch( int ch )
-{
- char c = ch;
- if ( writeBlock(&c,1) < 0 )
- return -1;
- else
- return ch;
-}
-
-int QStringBuffer::ungetch( int ch )
-{
-#if defined(CHECK_STATE)
- if ( !isOpen() ) { // buffer not open
- qWarning( "QStringBuffer::ungetch: Buffer not open" );
- return -1;
- }
- if ( !isReadable() ) { // reading not permitted
- qWarning( "QStringBuffer::ungetch: Read operation not permitted" );
- return -1;
- }
-#endif
- if ( ch != -1 ) { // something to do with eof
- if ( ioIndex )
- ioIndex--;
- else
- ch = -1;
- }
- return ch;
-}
-
-
-/*!
- Constructs a text stream that operates on a Unicode QString through an
- internal device.
-
- If you set an encoding or codec with setEncoding() or setCodec(), this
- setting is ignored for text streams that operate on QString.
-
- Example:
- \code
- QString str;
- QTextStream ts( &str, IO_WriteOnly );
- ts << "pi = " << 3.14; // str == "pi = 3.14"
- \endcode
-
- Writing data to the text stream will modify the contents of the string.
- The string will be expanded when data is written beyond the end of the
- string. Note that the string will not be truncated:
- \code
- QString str = "pi = 3.14";
- QTextStream ts( &str, IO_WriteOnly );
- ts << "2+2 = " << 2+2; // str == "2+2 = 414"
- \endcode
-
- Note that since QString is Unicode, you should not use readRawBytes()
- or writeRawBytes() on such a stream.
-*/
-
-QTextStream::QTextStream( QString* str, int filemode )
-{
- // TODO: optimize for this case as it becomes more common
- // (see QStringBuffer above)
- init();
- dev = new QStringBuffer( str );
- ((QStringBuffer *)dev)->open( filemode );
- owndev = TRUE;
- setEncoding(RawUnicode);
- reset();
- d->sourceType = QTextStreamPrivate::String;
-}
-
-/*! \obsolete
-
- This constructor is equivalent to the constructor taking a QString*
- parameter.
-*/
-
-QTextStream::QTextStream( QString& str, int filemode )
-{
- init();
- dev = new QStringBuffer( &str );
- ((QStringBuffer *)dev)->open( filemode );
- owndev = TRUE;
- setEncoding(RawUnicode);
- reset();
- d->sourceType = QTextStreamPrivate::String;
-}
-
-/*!
- Constructs a text stream that operates on a byte array through an
- internal QBuffer device.
-
- Example:
- \code
- QByteArray array;
- QTextStream ts( array, IO_WriteOnly );
- ts << "pi = " << 3.14 << '\0'; // array == "pi = 3.14"
- \endcode
-
- Writing data to the text stream will modify the contents of the array.
- The array will be expanded when data is written beyond the end of the
- string.
-
- Same example, using a QBuffer:
- \code
- QByteArray array;
- QBuffer buf( array );
- buf.open( IO_WriteOnly );
- QTextStream ts( &buf );
- ts << "pi = " << 3.14 << '\0'; // array == "pi = 3.14"
- buf.close();
- \endcode
-*/
-
-QTextStream::QTextStream( QByteArray a, int mode )
-{
- init();
- dev = new QBuffer( a );
- ((QBuffer *)dev)->open( mode );
- owndev = TRUE;
- setEncoding( Locale ); //### Locale???
- reset();
- d->sourceType = QTextStreamPrivate::ByteArray;
-}
-
-/*!
- Constructs a text stream that operates on an existing file handle \e fh
- through an internal QFile device.
-
- Example:
- \code
- QTextStream cout( stdout, IO_WriteOnly );
- QTextStream cin ( stdin, IO_ReadOnly );
- QTextStream cerr( stderr, IO_WriteOnly );
- \endcode
-*/
-
-QTextStream::QTextStream( FILE *fh, int mode )
-{
- init();
- setEncoding( Locale ); //###
- dev = new QFile;
- ((QFile *)dev)->open( mode, fh );
- fstrm = owndev = TRUE;
- reset();
- d->sourceType = QTextStreamPrivate::File;
-}
-
-/*!
- Destructs the text stream.
-
- The destructor does not affect the current IO device.
-*/
-
-QTextStream::~QTextStream()
-{
- if ( owndev )
- delete dev;
- delete d;
-}
-
-/*!
- Positions the read pointer at the first non-whitespace character.
-*/
-void QTextStream::skipWhiteSpace()
-{
- ts_ungetc( eat_ws() );
-}
-
-
-/*!
- \fn Encoding QTextStream::encoding() const
-
- Returns the encoding mode of the stream.
-
- \sa setEncoding()
-*/
-
-/*!
- Tries to read len characters from the stream and stores them in \a buf.
- Returns the number of characters really read.
- Attention: There will no QEOF appended if the read reaches the end of
- the file. EOF is reached when the return value does not equal \a len.
-*/
-uint QTextStream::ts_getbuf( QChar* buf, uint len )
-{
- if( len<1 )
- return 0;
-
- uint rnum=0; // the number of QChars really read
-
- if ( d && d->ungetcBuf.length() ) {
- while( rnum < len && rnum < d->ungetcBuf.length() ) {
- buf[rnum] = d->ungetcBuf.constref(rnum);
- rnum++;
- }
- d->ungetcBuf = d->ungetcBuf.mid( rnum );
- if ( rnum >= len )
- return rnum;
- }
-
- // we use dev->ungetch() for one of the bytes of the unicode
- // byte-order mark, but a local unget hack for the other byte:
- int ungetHack = EOF;
-
- if ( doUnicodeHeader ) {
- doUnicodeHeader = FALSE; //only at the top
- int c1 = dev->getch();
- if ( c1 == EOF )
- return rnum;
- int c2 = dev->getch();
- if ( c1 == 0xfe && c2 == 0xff ) {
- mapper = 0;
- latin1 = FALSE;
- internalOrder = QChar::networkOrdered(); //network order
- } else if ( c1 == 0xff && c2 == 0xfe ) {
- mapper = 0;
- latin1 = FALSE;
- internalOrder = !QChar::networkOrdered(); //reverse network order
- } else {
- if ( c2 != EOF ) {
- dev->ungetch( c2 );
- ungetHack = c1;
- } else {
- dev->ungetch( c1 );
- // note that a small possible bug might hide here
- // here, if only the first byte of a file has made it
- // so far, and that first byte is half of the
- // byte-order mark, then the utfness will not be
- // detected. whether or not this is a bug depends on
- // taste. I can't really decide.
- }
- }
- }
-
-#ifndef QT_NO_TEXTCODEC
- if ( mapper ) {
- bool shortRead = FALSE;
- if ( !d->decoder )
- d->decoder = mapper->makeDecoder();
- while( rnum < len ) {
- QString s;
- bool readBlock = !( len == 1+rnum );
- while ( TRUE ) {
- // for efficiency: normally read a whole block
- if ( readBlock ) {
- // guess buffersize; this may be wrong (too small or too
- // big). But we can handle this (either iterate reading
- // or use ungetcBuf).
- // Note that this might cause problems for codecs where
- // one byte can result in >1 Unicode Characters if bytes
- // are written to the stream in the meantime (loss of
- // synchronicity).
- uint rlen = len - rnum;
- char *cbuf = new char[ rlen ];
- if ( ungetHack != EOF ) {
- rlen = 1+dev->readBlock( cbuf+1, rlen-1 );
- cbuf[0] = (char)ungetHack;
- ungetHack = EOF;
- } else {
- rlen = dev->readBlock( cbuf, rlen );
- }
- s += d->decoder->toUnicode( cbuf, rlen );
- delete[] cbuf;
- // use buffered reading only for the first time, because we
- // have to get the stream synchronous again (this is easier
- // with single character reading)
- readBlock = FALSE;
- }
- // get stream (and codec) in sync
- int c;
- if ( ungetHack == EOF ) {
- c = dev->getch();
- } else {
- c = ungetHack;
- ungetHack = EOF;
- }
- if ( c == EOF ) {
- shortRead = TRUE;
- break;
- }
- char b = c;
- uint lengthBefore = s.length();
- s += d->decoder->toUnicode( &b, 1 );
- if ( s.length() > lengthBefore )
- break; // it seems we are in sync now
- }
- uint i = 0;
- while( rnum < len && i < s.length() )
- buf[rnum++] = s.constref(i++);
- if ( s.length() > i )
- // could be = but append is clearer
- d->ungetcBuf.append( s.mid( i ) );
- if ( shortRead )
- return rnum;
- }
- } else
-#endif
- if ( latin1 ) {
- if ( len == 1+rnum ) {
- // use this method for one character because it is more efficient
- // (arnt doubts whether it makes a difference, but lets it stand)
- int c = (ungetHack == EOF) ? dev->getch() : ungetHack;
- if ( c != EOF )
- buf[rnum++] = (char)c;
- } else {
- if ( ungetHack != EOF ) {
- buf[rnum++] = (char)ungetHack;
- ungetHack = EOF;
- }
- char *cbuf = new char[len - rnum];
- while ( !dev->atEnd() && rnum < len ) {
- uint rlen = len - rnum;
- rlen = dev->readBlock( cbuf, rlen );
- uint i = 0;
- while( i < rlen )
- buf[rnum++] = cbuf[i++];
- }
- delete[] cbuf;
- }
- } else { // UCS-2 or UTF-16
- if ( len == 1+rnum ) {
- int c1 = (ungetHack == EOF) ? dev->getch() : ungetHack;
- if ( c1 == EOF )
- return rnum;
- int c2 = dev->getch();
- if ( c2 == EOF )
- return rnum;
- if ( isNetworkOrder() )
- buf[rnum++] = QChar( c2, c1 );
- else
- buf[rnum++] = QChar( c1, c2 );
- } else {
- char *cbuf = new char[ 2*( len - rnum ) ]; // for paranoids: overflow possible
- while ( !dev->atEnd() && rnum < len ) {
- uint rlen = 2 * ( len-rnum );
- if ( ungetHack != EOF ) {
- rlen = 1+dev->readBlock( cbuf+1, rlen-1 );
- cbuf[0] = (char)ungetHack;
- ungetHack = EOF;
- } else {
- rlen = dev->readBlock( cbuf, rlen );
- }
- // We can't use an odd number of bytes, so put it back. But
- // do it only if we are capable of reading more -- normally
- // there should not be an odd number, but the file might be
- // truncated or not in UTF-16...
- if ( (rlen & 1) == 1 )
- if ( !dev->atEnd() )
- dev->ungetch( cbuf[--rlen] );
- uint i = 0;
- if ( isNetworkOrder() ) {
- while( i < rlen ) {
- buf[rnum++] = QChar( cbuf[i+1], cbuf[i] );
- i+=2;
- }
- } else {
- while( i < rlen ) {
- buf[rnum++] = QChar( cbuf[i], cbuf[i+1] );
- i+=2;
- }
- }
- }
- delete[] cbuf;
- }
- }
- return rnum;
-}
-
-
-/*!
- Puts one character to the stream.
-*/
-void QTextStream::ts_putc( QChar c )
-{
-#ifndef QT_NO_TEXTCODEC
- if ( mapper ) {
- int len = 1;
- QString s = c;
- QCString block = mapper->fromUnicode( s, len );
- dev->writeBlock( block, len );
- } else
-#endif
- if ( latin1 ) {
- if( c.row() )
- dev->putch( '?' ); //######unknown character???
- else
- dev->putch( c.cell() );
- } else {
- if ( doUnicodeHeader ) {
- doUnicodeHeader = FALSE;
- ts_putc( QChar::byteOrderMark );
- }
- if ( internalOrder ) {
- dev->writeBlock( (char*)&c, sizeof(QChar) );
- } else if ( isNetworkOrder() ) {
- dev->putch(c.row());
- dev->putch(c.cell());
- } else {
- dev->putch(c.cell());
- dev->putch(c.row());
- }
- }
-}
-
-/*!
- Puts one character to the stream.
-*/
-void QTextStream::ts_putc(int ch)
-{
- ts_putc(QChar((ushort)ch));
-}
-
-bool QTextStream::ts_isdigit(QChar c)
-{
- return c.isDigit();
-}
-
-bool QTextStream::ts_isspace( QChar c )
-{
- return c.isSpace();
-}
-
-void QTextStream::ts_ungetc( QChar c )
-{
- if ( c.unicode() == 0xffff )
- return;
-
- d->ungetcBuf.prepend( c );
-}
-
-
-
-/*!
- Reads \e len bytes from the stream into \e e s and returns a reference to
- the stream.
-
- The buffer \e s must be preallocated.
-
- Note that no encoding is done by this function.
-
- \warning The behaviour of this function is undefined unless the
- stream's encoding is set to Unicode or Latin1.
-
- \sa QIODevice::readBlock()
-*/
-
-QTextStream &QTextStream::readRawBytes( char *s, uint len )
-{
- dev->readBlock( s, len );
- return *this;
-}
-
-/*!
- Writes the \e len bytes from \e s to the stream and returns a reference to
- the stream.
-
- Note that no encoding is done by this function.
-
- \sa QIODevice::writeBlock()
-*/
-
-QTextStream &QTextStream::writeRawBytes( const char* s, uint len )
-{
- dev->writeBlock( s, len );
- return *this;
-}
-
-
-QTextStream &QTextStream::writeBlock( const char* p, uint len )
-{
- if ( doUnicodeHeader ) {
- doUnicodeHeader = FALSE;
- if ( !mapper && !latin1 )
- ts_putc( QChar::byteOrderMark );
- }
- //All QCStrings and const char* are defined to be in Latin1
- if ( !mapper && latin1 ) {
- dev->writeBlock( p, len );
- } else if ( !mapper && internalOrder ) {
- QChar *u = new QChar[len];
- for (uint i=0; i<len; i++)
- u[i] = p[i];
- dev->writeBlock( (char*)u, len*(int)sizeof(QChar) );
- delete [] u;
- } else {
- for (uint i=0; i<len; i++)
- ts_putc( (uchar)p[i] );
- }
- return *this;
-}
-
-QTextStream &QTextStream::writeBlock( const QChar* p, uint len )
-{
- if ( !mapper && !latin1 && internalOrder ) {
- if ( doUnicodeHeader ) {
- doUnicodeHeader = FALSE;
- ts_putc( QChar::byteOrderMark );
- }
- dev->writeBlock( (char*)p, (int)sizeof(QChar)*len );
- } else {
- for (uint i=0; i<len; i++)
- ts_putc( p[i] );
- }
- return *this;
-}
-
-
-
-/*!
- Resets the text stream.
-
- <ul>
- <li> All flags are set to 0.
- <li> The field width is set to 0.
- <li> The fill character is set to ' ' (space).
- <li> The precision is set to 6.
- </ul>
-
- \sa setf(), width(), fill(), precision()
-*/
-
-void QTextStream::reset()
-{
- fflags = 0;
- fwidth = 0;
- fillchar = ' ';
- fprec = 6;
-}
-
-
-/*!
- \fn QIODevice *QTextStream::device() const
- Returns the IO device currently set.
- \sa setDevice(), unsetDevice()
-*/
-
-/*!
- Sets the IO device to \a iod.
- \sa device(), unsetDevice()
-*/
-
-void QTextStream::setDevice( QIODevice *iod )
-{
- if ( owndev ) {
- delete dev;
- owndev = FALSE;
- }
- dev = iod;
- d->sourceType = QTextStreamPrivate::IODevice;
-}
-
-/*!
- Unsets the IO device. Equivalent to setDevice( 0 ).
- \sa device(), setDevice()
-*/
-
-void QTextStream::unsetDevice()
-{
- setDevice( 0 );
- d->sourceType = QTextStreamPrivate::NotSet;
-}
-
-/*!
- \fn bool QTextStream::atEnd() const
- Returns TRUE if the IO device has reached the end position (end of
- stream or file) or if there is no IO device set.
-
- Returns FALSE if the current position of the read/write head of the IO
- device is somewhere before the end position.
-
- \sa QIODevice::atEnd()
-*/
-
-/*!\fn bool QTextStream::eof() const
-
- \obsolete
-
- This function has been renamed to atEnd().
-
- \sa QIODevice::atEnd()
-*/
-
-/*****************************************************************************
- QTextStream read functions
- *****************************************************************************/
-
-
-/*!
- Reads a \c char from the stream and returns a reference to the stream.
- Note that whitespace is skipped.
-*/
-
-QTextStream &QTextStream::operator>>( char &c )
-{
- CHECK_STREAM_PRECOND
- c = eat_ws();
- return *this;
-}
-
-/*!
- Reads a \c char from the stream and returns a reference to the stream.
- Note that whitespace is \e not skipped.
-*/
-
-QTextStream &QTextStream::operator>>( QChar &c )
-{
- CHECK_STREAM_PRECOND
- c = ts_getc();
- return *this;
-}
-
-
-ulong QTextStream::input_bin()
-{
- ulong val = 0;
- QChar ch = eat_ws();
- int dv = ch.digitValue();
- while ( dv == 0 || dv == 1 ) {
- val = ( val << 1 ) + dv;
- ch = ts_getc();
- dv = ch.digitValue();
- }
- if ( ch != QEOF )
- ts_ungetc( ch );
- return val;
-}
-
-ulong QTextStream::input_oct()
-{
- ulong val = 0;
- QChar ch = eat_ws();
- int dv = ch.digitValue();
- while ( dv >= 0 && dv <= 7 ) {
- val = ( val << 3 ) + dv;
- ch = ts_getc();
- dv = ch.digitValue();
- }
- if ( dv == 8 || dv == 9 ) {
- while ( ts_isdigit(ch) )
- ch = ts_getc();
- }
- if ( ch != QEOF )
- ts_ungetc( ch );
- return val;
-}
-
-ulong QTextStream::input_dec()
-{
- ulong val = 0;
- QChar ch = eat_ws();
- int dv = ch.digitValue();
- while ( ts_isdigit(ch) ) {
- val = val * 10 + dv;
- ch = ts_getc();
- dv = ch.digitValue();
- }
- if ( ch != QEOF )
- ts_ungetc( ch );
- return val;
-}
-
-ulong QTextStream::input_hex()
-{
- ulong val = 0;
- QChar ch = eat_ws();
- char c = ch;
- while ( isxdigit(c) ) {
- val <<= 4;
- if ( ts_isdigit(c) )
- val += c - '0';
- else
- val += 10 + tolower(c) - 'a';
- c = ch = ts_getc();
- }
- if ( ch != QEOF )
- ts_ungetc( ch );
- return val;
-}
-
-long QTextStream::input_int()
-{
- long val;
- QChar ch;
- char c;
- switch ( flags() & basefield ) {
- case bin:
- val = (long)input_bin();
- break;
- case oct:
- val = (long)input_oct();
- break;
- case dec:
- c = ch = eat_ws();
- if ( ch == QEOF ) {
- val = 0;
- } else {
- if ( !(c == '-' || c == '+') )
- ts_ungetc( ch );
- if ( c == '-' ) {
- ulong v = input_dec();
- if ( v ) { // ensure that LONG_MIN can be read
- v--;
- val = -((long)v) - 1;
- } else {
- val = 0;
- }
- } else {
- val = (long)input_dec();
- }
- }
- break;
- case hex:
- val = (long)input_hex();
- break;
- default:
- val = 0;
- c = ch = eat_ws();
- if ( c == '0' ) { // bin, oct or hex
- c = ch = ts_getc();
- if ( tolower(c) == 'x' )
- val = (long)input_hex();
- else if ( tolower(c) == 'b' )
- val = (long)input_bin();
- else { // octal
- ts_ungetc( ch );
- if ( c >= '0' && c <= '7' ) {
- val = (long)input_oct();
- } else {
- val = 0;
- }
- }
- } else if ( ts_isdigit(ch) ) {
- ts_ungetc( ch );
- val = (long)input_dec();
- } else if ( c == '-' || c == '+' ) {
- ulong v = input_dec();
- if ( c == '-' ) {
- if ( v ) { // ensure that LONG_MIN can be read
- v--;
- val = -((long)v) - 1;
- } else {
- val = 0;
- }
- } else {
- val = (long)v;
- }
- }
- }
- return val;
-}
-
-//
-// We use a table-driven FSM to parse floating point numbers
-// strtod() cannot be used directly since we're reading from a QIODevice
-//
-
-double QTextStream::input_double()
-{
- const int Init = 0; // states
- const int Sign = 1;
- const int Mantissa = 2;
- const int Dot = 3;
- const int Abscissa = 4;
- const int ExpMark = 5;
- const int ExpSign = 6;
- const int Exponent = 7;
- const int Done = 8;
-
- const int InputSign = 1; // input tokens
- const int InputDigit = 2;
- const int InputDot = 3;
- const int InputExp = 4;
-
- static uchar table[8][5] = {
- /* None InputSign InputDigit InputDot InputExp */
- { 0, Sign, Mantissa, Dot, 0, }, // Init
- { 0, 0, Mantissa, Dot, 0, }, // Sign
- { Done, Done, Mantissa, Dot, ExpMark,}, // Mantissa
- { 0, 0, Abscissa, 0, 0, }, // Dot
- { Done, Done, Abscissa, Done, ExpMark,}, // Abscissa
- { 0, ExpSign, Exponent, 0, 0, }, // ExpMark
- { 0, 0, Exponent, 0, 0, }, // ExpSign
- { Done, Done, Exponent, Done, Done } // Exponent
- };
-
- int state = Init; // parse state
- int input; // input token
-
- char buf[256];
- int i = 0;
- QChar c = eat_ws();
-
- while ( TRUE ) {
-
- switch ( c ) {
- case '+':
- case '-':
- input = InputSign;
- break;
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- input = InputDigit;
- break;
- case '.':
- input = InputDot;
- break;
- case 'e':
- case 'E':
- input = InputExp;
- break;
- default:
- input = 0;
- break;
- }
-
- state = table[state][input];
-
- if ( state == 0 || state == Done || i > 250 ) {
- if ( i > 250 ) { // ignore rest of digits
- do { c = ts_getc(); } while ( c != QEOF && ts_isdigit(c) );
- }
- if ( c != QEOF )
- ts_ungetc( c );
- buf[i] = '\0';
- char *end;
- return strtod( buf, &end );
- }
-
- buf[i++] = c;
- c = ts_getc();
- }
-
-#if !defined(_CC_EGG_)
- return 0.0;
-#endif
-}
-
-
-/*!
- Reads a signed \c short integer from the stream and returns a reference to
- the stream. See flags() for an explanation of expected input format.
-*/
-
-QTextStream &QTextStream::operator>>( signed short &i )
-{
- CHECK_STREAM_PRECOND
- i = (signed short)input_int();
- return *this;
-}
-
-
-/*!
- Reads an unsigned \c short integer from the stream and returns a reference to
- the stream. See flags() for an explanation of expected input format.
-*/
-
-QTextStream &QTextStream::operator>>( unsigned short &i )
-{
- CHECK_STREAM_PRECOND
- i = (unsigned short)input_int();
- return *this;
-}
-
-
-/*!
- Reads a signed \c int from the stream and returns a reference to the
- stream. See flags() for an explanation of expected input format.
-*/
-
-QTextStream &QTextStream::operator>>( signed int &i )
-{
- CHECK_STREAM_PRECOND
- i = (signed int)input_int();
- return *this;
-}
-
-
-/*!
- Reads an unsigned \c int from the stream and returns a reference to the
- stream. See flags() for an explanation of expected input format.
-*/
-
-QTextStream &QTextStream::operator>>( unsigned int &i )
-{
- CHECK_STREAM_PRECOND
- i = (unsigned int)input_int();
- return *this;
-}
-
-
-/*!
- Reads a signed \c long int from the stream and returns a reference to the
- stream. See flags() for an explanation of expected input format.
-*/
-
-QTextStream &QTextStream::operator>>( signed long &i )
-{
- CHECK_STREAM_PRECOND
- i = (signed long)input_int();
- return *this;
-}
-
-
-/*!
- Reads an unsigned \c long int from the stream and returns a reference to the
- stream. See flags() for an explanation of expected input format.
-*/
-
-QTextStream &QTextStream::operator>>( unsigned long &i )
-{
- CHECK_STREAM_PRECOND
- i = (unsigned long)input_int();
- return *this;
-}
-
-
-/*!
- Reads a \c float from the stream and returns a reference to the stream.
- See flags() for an explanation of expected input format.
-*/
-
-QTextStream &QTextStream::operator>>( float &f )
-{
- CHECK_STREAM_PRECOND
- f = (float)input_double();
- return *this;
-}
-
-
-/*!
- Reads a \c double from the stream and returns a reference to the stream.
- See flags() for an explanation of expected input format.
-*/
-
-QTextStream &QTextStream::operator>>( double &f )
-{
- CHECK_STREAM_PRECOND
- f = input_double();
- return *this;
-}
-
-
-/*!
- Reads a word from the stream and returns a reference to the stream.
-*/
-
-QTextStream &QTextStream::operator>>( char *s )
-{
- CHECK_STREAM_PRECOND
- int maxlen = width( 0 );
- QChar c = eat_ws();
- if ( !maxlen )
- maxlen = -1;
- while ( c != QEOF ) {
- if ( ts_isspace(c) || maxlen-- == 0 ) {
- ts_ungetc( c );
- break;
- }
- *s++ = c;
- c = ts_getc();
- }
-
- *s = '\0';
- return *this;
-}
-
-/*!
- Reads a word from the stream and returns a reference to the stream.
-*/
-
-QTextStream &QTextStream::operator>>( QString &str )
-{
- CHECK_STREAM_PRECOND
- str=QString::fromLatin1("");
- QChar c = eat_ws();
-
- while ( c != QEOF ) {
- if ( ts_isspace(c) ) {
- ts_ungetc( c );
- break;
- }
- str += c;
- c = ts_getc();
- }
- return *this;
-}
-
-/*!
- Reads a word from the stream and returns a reference to the stream.
-*/
-
-QTextStream &QTextStream::operator>>( QCString &str )
-{
- CHECK_STREAM_PRECOND
- QCString *dynbuf = 0;
- const int buflen = 256;
- char buffer[buflen];
- char *s = buffer;
- int i = 0;
- QChar c = eat_ws();
-
- while ( c != QEOF ) {
- if ( ts_isspace(c) ) {
- ts_ungetc( c );
- break;
- }
- if ( i >= buflen-1 ) {
- if ( !dynbuf ) { // create dynamic buffer
- dynbuf = new QCString(buflen*2);
- memcpy( dynbuf->rawData(), s, i ); // copy old data
- } else if ( i >= (int)dynbuf->size()-1 ) {
- dynbuf->resize( dynbuf->size()*2 );
- }
- s = dynbuf->rawData();
- }
- s[i++] = c;
- c = ts_getc();
- }
- str.resize( i+1 );
- memcpy( str.rawData(), s, i );
- delete dynbuf;
- return *this;
-}
-
-
-/*!
- Reads a line from the stream and returns a string containing the text.
-
- The returned string does not contain any trailing newline or carriage
- return. Note that this is different from QIODevice::readLine(), which
- does not strip the newline at the end of the line.
-
- On EOF you will get a QString that is null. On reading an empty line the
- returned QString is empty but not null.
-
- \sa QIODevice::readLine()
-*/
-
-QString QTextStream::readLine()
-{
-#if defined(CHECK_STATE)
- if ( !dev ) {
- qWarning( "QTextStream::readLine: No device" );
- return QString::null;
- }
-#endif
- QString result( "" );
- const int buf_size = 256;
- QChar c[buf_size];
- int pos = 0;
-
- c[pos] = ts_getc();
- if ( c[pos] == QEOF )
- return QString::null;
-
- while ( c[pos] != QEOF && c[pos] != '\n' ) {
- pos++;
- if ( pos >= buf_size ) {
- result += QString( c, pos );
- pos = 0;
- }
- c[pos] = ts_getc();
- }
- result += QString( c, pos );
-
- int len = (int)result.length();
- if ( len && result[len-1] == '\r' )
- result.truncate(len-1); // (if there are two \r, let one stay)
-
- return result;
-}
-
-
-/*!
- Reads the entire stream and returns a string containing the text.
-
- \sa QIODevice::readLine()
-*/
-
-QString QTextStream::read()
-{
-#if defined(CHECK_STATE)
- if ( !dev ) {
- qWarning( "QTextStream::read: No device" );
- return QString::null;
- }
-#endif
- QString result;
- const uint bufsize = 512;
- QChar buf[bufsize];
- uint i, num, start;
- bool skipped_cr = FALSE;
-
- while ( 1 ) {
- num = ts_getbuf(buf,bufsize);
- // do a s/\r\n/\n
- start = 0;
- for ( i=0; i<num; i++ ) {
- if ( buf[i] == '\r' ) {
- // Only skip single cr's preceding lf's
- if ( skipped_cr ) {
- result += buf[i];
- start++;
- } else {
- result += QString( &buf[start], i-start );
- start = i+1;
- skipped_cr = TRUE;
- }
- } else {
- if ( skipped_cr ) {
- if ( buf[i] != '\n' ) {
- // Should not have skipped it
- result += '\r';
- }
- skipped_cr = FALSE;
- }
- }
- }
- if ( start < num )
- result += QString( &buf[start], i-start );
- if ( num != bufsize ) // if ( EOF )
- break;
- }
- return result;
-}
-
-
-
-/*****************************************************************************
- QTextStream write functions
- *****************************************************************************/
-
-/*!
- Writes a \c char to the stream and returns a reference to the stream.
-
- The character \a c is assumed to be Latin1 encoded independent of the Encoding set
- for the QTextStream.
-*/
-QTextStream &QTextStream::operator<<( QChar c )
-{
- CHECK_STREAM_PRECOND
- ts_putc( c );
- return *this;
-}
-
-/*!
- Writes a \c char to the stream and returns a reference to the stream.
-*/
-QTextStream &QTextStream::operator<<( char c )
-{
- CHECK_STREAM_PRECOND
- unsigned char uc = (unsigned char) c;
- ts_putc( uc );
- return *this;
-}
-
-QTextStream &QTextStream::output_int( int format, ulong n, bool neg )
-{
- static char hexdigits_lower[] = "0123456789abcdef";
- static char hexdigits_upper[] = "0123456789ABCDEF";
- CHECK_STREAM_PRECOND
- char buf[76];
- char *p;
- int len;
- char *hexdigits;
-
- switch ( flags() & I_BASE_MASK ) {
-
- case I_BASE_2: // output binary number
- switch ( format & I_TYPE_MASK ) {
- case I_SHORT: len=16; break;
- case I_INT: len=sizeof(int)*8; break;
- case I_LONG: len=32; break;
- default: len = 0;
- }
- p = &buf[74]; // go reverse order
- *p = '\0';
- while ( len-- ) {
- *--p = (char)(n&1) + '0';
- n >>= 1;
- if ( !n )
- break;
- }
- if ( flags() & showbase ) { // show base
- *--p = (flags() & uppercase) ? 'B' : 'b';
- *--p = '0';
- }
- break;
-
- case I_BASE_8: // output octal number
- p = &buf[74];
- *p = '\0';
- do {
- *--p = (char)(n&7) + '0';
- n >>= 3;
- } while ( n );
- if ( flags() & showbase )
- *--p = '0';
- break;
-
- case I_BASE_16: // output hexadecimal number
- p = &buf[74];
- *p = '\0';
- hexdigits = (flags() & uppercase) ?
- hexdigits_upper : hexdigits_lower;
- do {
- *--p = hexdigits[(int)n&0xf];
- n >>= 4;
- } while ( n );
- if ( flags() & showbase ) {
- *--p = (flags() & uppercase) ? 'X' : 'x';
- *--p = '0';
- }
- break;
-
- default: // decimal base is default
- p = &buf[74];
- *p = '\0';
- if ( neg )
- n = (ulong)(-(long)n);
- do {
- *--p = ((int)(n%10)) + '0';
- n /= 10;
- } while ( n );
- if ( neg )
- *--p = '-';
- else if ( flags() & showpos )
- *--p = '+';
- if ( (flags() & internal) && fwidth && !ts_isdigit(*p) ) {
- ts_putc( *p ); // special case for internal
- ++p; // padding
- fwidth--;
- return *this << (const char*)p;
- }
- }
- if ( fwidth ) { // adjustment required
- if ( !(flags() & left) ) { // but NOT left adjustment
- len = qstrlen(p);
- int padlen = fwidth - len;
- if ( padlen <= 0 ) { // no padding required
- writeBlock( p, len );
- } else if ( padlen < (int)(p-buf) ) { // speeds up padding
- memset( p-padlen, (char)fillchar, padlen );
- writeBlock( p-padlen, padlen+len );
- }
- else // standard padding
- *this << (const char*)p;
- }
- else
- *this << (const char*)p;
- fwidth = 0; // reset field width
- }
- else
- writeBlock( p, qstrlen(p) );
- return *this;
-}
-
-
-/*!
- Writes a \c short integer to the stream and returns a reference to
- the stream.
-*/
-
-QTextStream &QTextStream::operator<<( signed short i )
-{
- return output_int( I_SHORT | I_SIGNED, i, i < 0 );
-}
-
-
-/*!
- Writes an \c unsigned \c short integer to the stream and returns a reference
- to the stream.
-*/
-
-QTextStream &QTextStream::operator<<( unsigned short i )
-{
- return output_int( I_SHORT | I_UNSIGNED, i, FALSE );
-}
-
-
-/*!
- Writes an \c int to the stream and returns a reference to
- the stream.
-*/
-
-QTextStream &QTextStream::operator<<( signed int i )
-{
- return output_int( I_INT | I_SIGNED, i, i < 0 );
-}
-
-
-/*!
- Writes an \c unsigned \c int to the stream and returns a reference to
- the stream.
-*/
-
-QTextStream &QTextStream::operator<<( unsigned int i )
-{
- return output_int( I_INT | I_UNSIGNED, i, FALSE );
-}
-
-
-/*!
- Writes a \c long \c int to the stream and returns a reference to
- the stream.
-*/
-
-QTextStream &QTextStream::operator<<( signed long i )
-{
- return output_int( I_LONG | I_SIGNED, i, i < 0 );
-}
-
-
-/*!
- Writes an \c unsigned \c long \c int to the stream and returns a reference to
- the stream.
-*/
-
-QTextStream &QTextStream::operator<<( unsigned long i )
-{
- return output_int( I_LONG | I_UNSIGNED, i, FALSE );
-}
-
-
-/*!
- Writes a \c float to the stream and returns a reference to the stream.
-*/
-
-QTextStream &QTextStream::operator<<( float f )
-{
- return *this << (double)f;
-}
-
-
-/*!
- Writes a \c double to the stream and returns a reference to the stream.
-*/
-
-QTextStream &QTextStream::operator<<( double f )
-{
- CHECK_STREAM_PRECOND
- char buf[64];
- char f_char;
- char format[16];
- if ( (flags()&floatfield) == fixed )
- f_char = 'f';
- else if ( (flags()&floatfield) == scientific )
- f_char = (flags() & uppercase) ? 'E' : 'e';
- else
- f_char = (flags() & uppercase) ? 'G' : 'g';
- char *fs = format; // generate format string
- *fs++ = '%'; // "%.<prec>l<f_char>"
- *fs++ = '.';
- int prec = precision();
- if ( prec > 99 )
- prec = 99;
- if ( prec >= 10 ) {
- *fs++ = prec / 10 + '0';
- *fs++ = prec % 10 + '0';
- } else {
- *fs++ = prec + '0';
- }
- *fs++ = 'l';
- *fs++ = f_char;
- *fs = '\0';
- sprintf( buf, format, f ); // convert to text
- if ( fwidth ) // padding
- *this << (const char*)buf;
- else // just write it
- writeBlock( buf, qstrlen(buf) );
- return *this;
-}
-
-
-/*!
- Writes a string to the stream and returns a reference to the stream.
-
- The string \a s is assumed to be Latin1 encoded independent of the Encoding set
- for the QTextStream.
-*/
-
-QTextStream &QTextStream::operator<<( const char* s )
-{
- CHECK_STREAM_PRECOND
- char padbuf[48];
- uint len = qstrlen( s ); // don't write null terminator
- if ( fwidth ) { // field width set
- int padlen = fwidth - len;
- fwidth = 0; // reset width
- if ( padlen > 0 ) {
- char *ppad;
- if ( padlen > 46 ) { // create extra big fill buffer
- ppad = new char[padlen];
- CHECK_PTR( ppad );
- } else {
- ppad = padbuf;
- }
- memset( ppad, (char)fillchar, padlen ); // fill with fillchar
- if ( !(flags() & left) ) {
- writeBlock( ppad, padlen );
- padlen = 0;
- }
- writeBlock( s, len );
- if ( padlen )
- writeBlock( ppad, padlen );
- if ( ppad != padbuf ) // delete extra big fill buf
- delete[] ppad;
- return *this;
- }
- }
- writeBlock( s, len );
- return *this;
-}
-
-/*!
- Writes \a s to the stream and returns a reference to the stream.
-
- The string \a s is assumed to be Latin1 encoded independent of the Encoding set
- for the QTextStream.
-*/
-
-QTextStream &QTextStream::operator<<( const QCString & s )
-{
- return operator<<(s.data());
-}
-
-/*!
- Writes \a s to the stream and returns a reference to the stream.
-*/
-
-QTextStream &QTextStream::operator<<( const QString& s )
-{
- CHECK_STREAM_PRECOND
- uint len = s.length();
- QString s1 = s;
- if ( fwidth ) { // field width set
- if ( !(flags() & left) ) {
- s1 = s.rightJustify(fwidth, (char)fillchar);
- } else {
- s1 = s.leftJustify(fwidth, (char)fillchar);
- }
- fwidth = 0; // reset width
- }
- writeBlock( s1.unicode(), len );
- return *this;
-}
-
-
-/*!
- Writes a pointer to the stream and returns a reference to the stream.
-
- The \e ptr is output as an unsigned long hexadecimal integer.
-*/
-
-QTextStream &QTextStream::operator<<( void *ptr )
-{
- int f = flags();
- setf( hex, basefield );
- setf( showbase );
- unsetf( uppercase );
- output_int( I_LONG | I_UNSIGNED, (uintptr_t)ptr, FALSE );
- flags( f );
- return *this;
-}
-
-
-/*!
- \fn int QTextStream::flags() const
- Returns the current stream flags. The default value is 0.
-
- The meaning of the flags are:
- <ul>
- <li> \e skipws - Not currently used - whitespace always skipped
- <li> \e left - Numeric fields are left-aligned
- <li> \e right - Not currently used (by default numerics are right aligned)
- <li> \e internal - Put any padding spaces between +/- and value
- <li> \e bin - Output \e and input only in binary
- <li> \e oct - Output \e and input only in octal
- <li> \e dec - Output \e and input only in decimal
- <li> \e hex - Output \e and input only in hexadecimal
- <li> \e showbase - Annotate numeric outputs with 0b, 0, or 0x if in
- \e bin, \e oct, or \e hex format
- <li> \e showpoint - Not currently used
- <li> \e uppercase - Use 0B and 0X rather than 0b and 0x
- <li> \e showpos - Show + for positive numeric values
- <li> \e scientific - Use scientific notation for floating point values
- <li> \e fixed - Use fixed-point notation for floating point values
- </ul>
-
- Note that unless \e bin, \e oct, \e dec, or \e hex is set, the input base is
- octal if the value starts with 0, hexadecimal if it starts with 0x, binary
- if the value starts with 0b, and decimal otherwise.
-
- \sa setf(), unsetf()
-*/
-
-/*!
- \fn int QTextStream::flags( int f )
- Sets the stream flags to \e f.
- Returns the previous stream flags.
-
- \sa setf(), unsetf(), flags()
-*/
-
-/*!
- \fn int QTextStream::setf( int bits )
- Sets the stream flag bits \e bits.
- Returns the previous stream flags.
-
- Equivalent to <code>flags( flags() | bits )</code>.
-
- \sa setf(), unsetf()
-*/
-
-/*!
- \fn int QTextStream::setf( int bits, int mask )
- Sets the stream flag bits \e bits with a bit mask \e mask.
- Returns the previous stream flags.
-
- Equivalent to <code>flags( (flags() & ~mask) | (bits & mask) )</code>.
-
- \sa setf(), unsetf()
-*/
-
-/*!
- \fn int QTextStream::unsetf( int bits )
- Clears the stream flag bits \e bits.
- Returns the previous stream flags.
-
- Equivalent to <code>flags( flags() & ~mask )</code>.
-
- \sa setf()
-*/
-
-/*!
- \fn int QTextStream::width() const
- Returns the field width. The default value is 0.
-*/
-
-/*!
- \fn int QTextStream::width( int w )
- Sets the field width to \e w. Returns the previous field width.
-*/
-
-/*!
- \fn int QTextStream::fill() const
- Returns the fill character. The default value is ' ' (space).
-*/
-
-/*!
- \fn int QTextStream::fill( int f )
- Sets the fill character to \e f. Returns the previous fill character.
-*/
-
-/*!
- \fn int QTextStream::precision() const
- Returns the precision. The default value is 6.
-*/
-
-/*!
- \fn int QTextStream::precision( int p )
- Sets the precision to \e p. Returns the previous precision setting.
-*/
-
-
- /*****************************************************************************
- QTextStream manipulators
- *****************************************************************************/
-
-QTextStream &bin( QTextStream &s )
-{
- s.setf(QTS::bin,QTS::basefield);
- return s;
-}
-
-QTextStream &oct( QTextStream &s )
-{
- s.setf(QTS::oct,QTS::basefield);
- return s;
-}
-
-QTextStream &dec( QTextStream &s )
-{
- s.setf(QTS::dec,QTS::basefield);
- return s;
-}
-
-QTextStream &hex( QTextStream &s )
-{
- s.setf(QTS::hex,QTS::basefield);
- return s;
-}
-
-QTextStream &endl( QTextStream &s )
-{
- return s << '\n';
-}
-
-QTextStream &flush( QTextStream &s )
-{
- if ( s.device() )
- s.device()->flush();
- return s;
-}
-
-QTextStream &ws( QTextStream &s )
-{
- s.skipWhiteSpace();
- return s;
-}
-
-QTextStream &reset( QTextStream &s )
-{
- s.reset();
- return s;
-}
-
-
-/*!
- \class QTextIStream qtextstream.h
- \brief A convenience class for input streams.
-
- For simple tasks, code should be simple. Hence this
- class is a shorthand to avoid passing the \e mode argument
- to the normal QTextStream constructors.
-
- This makes it easy for example, to write things like this:
-\code
- QString data = "123 456";
- int a, b;
- QTextIStream(&data) >> a >> b;
-\endcode
-
- \sa QTextOStream
-*/
-
-/*!
- \fn QTextIStream::QTextIStream( QString *s )
-
- Constructs a stream to read from string \a s.
-*/
-/*!
- \fn QTextIStream::QTextIStream( QByteArray ba )
-
- Constructs a stream to read from the array \a ba.
-*/
-/*!
- \fn QTextIStream::QTextIStream( FILE *f )
-
- Constructs a stream to read from the file \a f.
-*/
-
-
-/*!
- \class QTextOStream qtextstream.h
- \brief A convenience class for output streams.
-
- For simple tasks, code should be simple. Hence this
- class is a shorthand to avoid passing the \e mode argument
- to the normal QTextStream constructors.
-
- This makes it easy for example, to write things like this:
-\code
- QString result;
- QTextOStream(&result) << "pi = " << 3.14;
-\endcode
-*/
-
-/*!
- \fn QTextOStream::QTextOStream( QString *s )
-
- Constructs a stream to write to string \a s.
-*/
-/*!
- \fn QTextOStream::QTextOStream( QByteArray ba )
-
- Constructs a stream to write to the array \a ba.
-*/
-/*!
- \fn QTextOStream::QTextOStream( FILE *f )
-
- Constructs a stream to write to the file \a f.
-*/
-
-
-
-/*!
- Sets the encoding of this stream to \a e, where \a e is one of:
- <ul>
- <li> \c Locale Using local file format (Latin1 if locale is not
- set), but autodetecting Unicode(utf16) on input.
- <li> \c Unicode Using Unicode(utf16) for input and output. Output
- will be written in the order most efficient for the current platform
- (i.e. the order used internally in QString).
- <li> \c UnicodeUTF8 Using Unicode(utf8) for input and output. If you use it
- for input it will autodetect utf16 and use it instead of utf8.
- <li> \c Latin1 ISO-8859-1. Will not autodetect utf16.
- <li> \c UnicodeNetworkOrder Using network order Unicode(utf16) for
- input and output. Useful when reading Unicode data that does not
- start with the byte order marker.
- <li> \c UnicodeReverse Using reverse network order Unicode(utf16)
- for input and output. Useful when reading Unicode data that does not
- start with the byte order marker, or writing data that should be
- read by buggy Windows applications.
- <li> \c RawUnicode Like Unicode, but does not write the byte order
- marker, nor does it autodetect the byte order. Only useful when
- writing to non-persistent storage used by a single process.
- </ul>
-
- \c Locale and all Unicode encodings, except \c RawUnicode, will look at
- the first two bytes in a input stream to determine the byte order. The
- initial byte order marker will be stripped off before data is read.
-
- Note that this function should be called before any data is read
- to/written from the stream.
- \sa setCodec()
-*/
-
-void QTextStream::setEncoding( Encoding e )
-{
- if ( d->sourceType == QTextStreamPrivate::String )
- return; // QString does not need any encoding
- switch ( e ) {
- case Unicode:
- mapper = 0;
- latin1 = FALSE;
- doUnicodeHeader = TRUE;
- internalOrder = TRUE;
- break;
- case UnicodeUTF8:
-#ifndef QT_NO_CODECS
- mapper = QTextCodec::codecForMib( 106 );
- latin1 = FALSE;
- doUnicodeHeader = TRUE;
- internalOrder = TRUE;
-#else
- mapper = 0;
- latin1 = TRUE;
- doUnicodeHeader = TRUE;
-#endif
- break;
- case UnicodeNetworkOrder:
- mapper = 0;
- latin1 = FALSE;
- doUnicodeHeader = TRUE;
- internalOrder = QChar::networkOrdered();
- break;
- case UnicodeReverse:
- mapper = 0;
- latin1 = FALSE;
- doUnicodeHeader = TRUE;
- internalOrder = !QChar::networkOrdered(); //reverse network ordered
- break;
- case RawUnicode:
- mapper = 0;
- latin1 = FALSE;
- doUnicodeHeader = FALSE;
- internalOrder = TRUE;
- break;
- case Locale:
- latin1 = TRUE; // fallback to Latin 1
-#ifndef QT_NO_TEXTCODEC
- mapper = QTextCodec::codecForLocale();
-#if defined(_OS_WIN32_)
- if ( GetACP() == 1252 )
- mapper = 0; // Optimized latin1 processing
-#endif
- if ( mapper && mapper->mibEnum() == 4 )
-#endif
- mapper = 0; // Optimized latin1 processing
- doUnicodeHeader = TRUE; // If it reads as Unicode, accept it
- break;
- case Latin1:
- mapper = 0;
- doUnicodeHeader = FALSE;
- latin1 = TRUE;
- break;
- }
-}
-
-
-#ifndef QT_NO_TEXTCODEC
-/*! Sets the codec for this stream to \a codec. Will not try to
- autodetect Unicode.
-
- Note that this function should be called before any data is read
- to/written from the stream.
-
- \sa setEncoding()
-*/
-
-void QTextStream::setCodec( QTextCodec *codec )
-{
- if ( d->sourceType == QTextStreamPrivate::String )
- return; // QString does not need any codec
- mapper = codec;
- doUnicodeHeader = FALSE;
-}
-#endif
-
-#endif // QT_NO_TEXTSTREAM
diff --git a/qtools/qtextstream.h b/qtools/qtextstream.h
deleted file mode 100644
index c5f5ba1..0000000
--- a/qtools/qtextstream.h
+++ /dev/null
@@ -1,351 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QTextStream class
-**
-** Created : 940922
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QTEXTSTREAM_H
-#define QTEXTSTREAM_H
-
-#ifndef QT_H
-#include "qiodevice.h"
-#include "qstring.h"
-#include <stdio.h>
-#endif // QT_H
-
-#ifndef QT_NO_TEXTSTREAM
-class QTextCodec;
-class QTextDecoder;
-
-class QTextStreamPrivate;
-
-class Q_EXPORT QTextStream // text stream class
-{
-public:
- enum Encoding { Locale, Latin1, Unicode, UnicodeNetworkOrder,
- UnicodeReverse, RawUnicode, UnicodeUTF8 };
-
- void setEncoding( Encoding );
-#ifndef QT_NO_TEXTCODEC
- void setCodec( QTextCodec* );
-#endif
-
- // Encoding encoding() const { return cmode; }
-
- QTextStream();
- QTextStream( QIODevice * );
- QTextStream( QString*, int mode );
- QTextStream( QString&, int mode ); // obsolete
- QTextStream( QByteArray, int mode );
- QTextStream( FILE *, int mode );
- virtual ~QTextStream();
-
- QIODevice *device() const;
- void setDevice( QIODevice * );
- void unsetDevice();
-
- bool atEnd() const;
- bool eof() const;
-
- QTextStream &operator>>( QChar & );
- QTextStream &operator>>( char & );
- QTextStream &operator>>( signed short & );
- QTextStream &operator>>( unsigned short & );
- QTextStream &operator>>( signed int & );
- QTextStream &operator>>( unsigned int & );
- QTextStream &operator>>( signed long & );
- QTextStream &operator>>( unsigned long & );
- QTextStream &operator>>( float & );
- QTextStream &operator>>( double & );
- QTextStream &operator>>( char * );
- QTextStream &operator>>( QString & );
- QTextStream &operator>>( QCString & );
-
- QTextStream &operator<<( QChar );
- QTextStream &operator<<( char );
- QTextStream &operator<<( signed short );
- QTextStream &operator<<( unsigned short );
- QTextStream &operator<<( signed int );
- QTextStream &operator<<( unsigned int );
- QTextStream &operator<<( signed long );
- QTextStream &operator<<( unsigned long );
- QTextStream &operator<<( float );
- QTextStream &operator<<( double );
- QTextStream &operator<<( const char* );
- QTextStream &operator<<( const QString & );
- QTextStream &operator<<( const QCString & );
- QTextStream &operator<<( void * ); // any pointer
-
- QTextStream &readRawBytes( char *, uint len );
- QTextStream &writeRawBytes( const char* , uint len );
-
- QString readLine();
- QString read();
- void skipWhiteSpace();
-
- enum {
- skipws = 0x0001, // skip whitespace on input
- left = 0x0002, // left-adjust output
- right = 0x0004, // right-adjust output
- internal = 0x0008, // pad after sign
- bin = 0x0010, // binary format integer
- oct = 0x0020, // octal format integer
- dec = 0x0040, // decimal format integer
- hex = 0x0080, // hex format integer
- showbase = 0x0100, // show base indicator
- showpoint = 0x0200, // force decimal point (float)
- uppercase = 0x0400, // upper-case hex output
- showpos = 0x0800, // add '+' to positive integers
- scientific= 0x1000, // scientific float output
- fixed = 0x2000 // fixed float output
- };
-
- static const int basefield; // bin | oct | dec | hex
- static const int adjustfield; // left | right | internal
- static const int floatfield; // scientific | fixed
-
- int flags() const;
- int flags( int f );
- int setf( int bits );
- int setf( int bits, int mask );
- int unsetf( int bits );
-
- void reset();
-
- int width() const;
- int width( int );
- int fill() const;
- int fill( int );
- int precision() const;
- int precision( int );
-
-private:
- long input_int();
- void init();
- QTextStream &output_int( int, ulong, bool );
- QIODevice *dev;
- bool isNetworkOrder() { return internalOrder == QChar::networkOrdered(); }
-
- int fflags;
- int fwidth;
- int fillchar;
- int fprec;
- bool fstrm;
- bool owndev;
- QTextCodec *mapper;
- QTextStreamPrivate * d;
- QChar ungetcBuf;
- bool latin1;
- bool internalOrder;
- bool doUnicodeHeader;
- void *reserved_ptr;
-
- QChar eat_ws();
- void ts_ungetc( QChar );
- QChar ts_getc();
- uint ts_getbuf( QChar*, uint );
- void ts_putc(int);
- void ts_putc(QChar);
- bool ts_isspace(QChar);
- bool ts_isdigit(QChar);
- ulong input_bin();
- ulong input_oct();
- ulong input_dec();
- ulong input_hex();
- double input_double();
- QTextStream &writeBlock( const char* p, uint len );
- QTextStream &writeBlock( const QChar* p, uint len );
-
-private: // Disabled copy constructor and operator=
-#if defined(Q_DISABLE_COPY)
- QTextStream( const QTextStream & );
- QTextStream &operator=( const QTextStream & );
-#endif
-};
-
-typedef QTextStream QTS;
-
-class Q_EXPORT QTextIStream : public QTextStream {
-public:
- QTextIStream( QString* s ) :
- QTextStream(s,IO_ReadOnly) { }
- QTextIStream( QByteArray ba ) :
- QTextStream(ba,IO_ReadOnly) { }
- QTextIStream( FILE *f ) :
- QTextStream(f,IO_ReadOnly) { }
-};
-
-class Q_EXPORT QTextOStream : public QTextStream {
-public:
- QTextOStream( QString* s ) :
- QTextStream(s,IO_WriteOnly) { }
- QTextOStream( QByteArray ba ) :
- QTextStream(ba,IO_WriteOnly) { }
- QTextOStream( FILE *f ) :
- QTextStream(f,IO_WriteOnly) { }
-};
-
-/*****************************************************************************
- QTextStream inline functions
- *****************************************************************************/
-
-inline QIODevice *QTextStream::device() const
-{ return dev; }
-
-inline bool QTextStream::atEnd() const
-{ return dev ? dev->atEnd() : FALSE; }
-
-inline bool QTextStream::eof() const
-{ return atEnd(); }
-
-inline int QTextStream::flags() const
-{ return fflags; }
-
-inline int QTextStream::flags( int f )
-{ int oldf = fflags; fflags = f; return oldf; }
-
-inline int QTextStream::setf( int bits )
-{ int oldf = fflags; fflags |= bits; return oldf; }
-
-inline int QTextStream::setf( int bits, int mask )
-{ int oldf = fflags; fflags = (fflags & ~mask) | (bits & mask); return oldf; }
-
-inline int QTextStream::unsetf( int bits )
-{ int oldf = fflags; fflags &= ~bits; return oldf; }
-
-inline int QTextStream::width() const
-{ return fwidth; }
-
-inline int QTextStream::width( int w )
-{ int oldw = fwidth; fwidth = w; return oldw; }
-
-inline int QTextStream::fill() const
-{ return fillchar; }
-
-inline int QTextStream::fill( int f )
-{ int oldc = fillchar; fillchar = f; return oldc; }
-
-inline int QTextStream::precision() const
-{ return fprec; }
-
-inline int QTextStream::precision( int p )
-{ int oldp = fprec; fprec = p; return oldp; }
-
-/*!
- Returns one character from the stream, or EOF.
-*/
-inline QChar QTextStream::ts_getc()
-{ QChar r; return ( ts_getbuf( &r,1 ) == 1 ? r : QChar((ushort)0xffff) ); }
-
-/*****************************************************************************
- QTextStream manipulators
- *****************************************************************************/
-
-typedef QTextStream & (*QTSFUNC)(QTextStream &);// manipulator function
-typedef int (QTextStream::*QTSMFI)(int); // manipulator w/int argument
-
-class Q_EXPORT QTSManip { // text stream manipulator
-public:
- QTSManip( QTSMFI m, int a ) { mf=m; arg=a; }
- void exec( QTextStream &s ) { (s.*mf)(arg); }
-private:
- QTSMFI mf; // QTextStream member function
- int arg; // member function argument
-};
-
-Q_EXPORT inline QTextStream &operator>>( QTextStream &s, QTSFUNC f )
-{ return (*f)( s ); }
-
-Q_EXPORT inline QTextStream &operator<<( QTextStream &s, QTSFUNC f )
-{ return (*f)( s ); }
-
-Q_EXPORT inline QTextStream &operator<<( QTextStream &s, QTSManip m )
-{ m.exec(s); return s; }
-
-Q_EXPORT QTextStream &bin( QTextStream &s ); // set bin notation
-Q_EXPORT QTextStream &oct( QTextStream &s ); // set oct notation
-Q_EXPORT QTextStream &dec( QTextStream &s ); // set dec notation
-Q_EXPORT QTextStream &hex( QTextStream &s ); // set hex notation
-Q_EXPORT QTextStream &endl( QTextStream &s ); // insert EOL ('\n')
-Q_EXPORT QTextStream &flush( QTextStream &s ); // flush output
-Q_EXPORT QTextStream &ws( QTextStream &s ); // eat whitespace on input
-Q_EXPORT QTextStream &reset( QTextStream &s ); // set default flags
-
-Q_EXPORT inline QTSManip qSetW( int w )
-{
- QTSMFI func = &QTextStream::width;
- return QTSManip(func,w);
-}
-
-Q_EXPORT inline QTSManip qSetFill( int f )
-{
- QTSMFI func = &QTextStream::fill;
- return QTSManip(func,f);
-}
-
-Q_EXPORT inline QTSManip qSetPrecision( int p )
-{
- QTSMFI func = &QTextStream::precision;
- return QTSManip(func,p);
-}
-
-
-#ifndef QT_ALTERNATE_QTSMANIP
-
-// These will go away in Qt 3.0, as they conflict with std libs
-//
-// If you get conflicts now, #define QT_ALTERNATE_QTSMANIP before
-// including this file.
-
-Q_EXPORT inline QTSManip setw( int w )
-{
- QTSMFI func = &QTextStream::width;
- return QTSManip(func,w);
-}
-
-Q_EXPORT inline QTSManip setfill( int f )
-{
- QTSMFI func = &QTextStream::fill;
- return QTSManip(func,f);
-}
-
-Q_EXPORT inline QTSManip setprecision( int p )
-{
- QTSMFI func = &QTextStream::precision;
- return QTSManip(func,p);
-}
-#endif
-
-#endif // QT_NO_TEXTSTREAM
-#endif // QTEXTSTREAM_H
diff --git a/qtools/qtl.h b/qtools/qtl.h
index bd72e7d..64825e9 100644
--- a/qtools/qtl.h
+++ b/qtools/qtl.h
@@ -1,5 +1,5 @@
/****************************************************************************
-**
+**
**
** Definition of Qt template library classes
**
@@ -38,34 +38,9 @@
#define QTL_H
#ifndef QT_H
-#include "qtextstream.h"
#include "qstring.h"
#endif // QT_H
-#ifndef QT_NO_TEXTSTREAM
-template <class T>
-class QTextOStreamIterator
-{
-protected:
- QTextOStream& stream;
- QString separator;
-
-public:
- QTextOStreamIterator( QTextOStream& s) : stream( s ) {}
- QTextOStreamIterator( QTextOStream& s, const QString& sep )
- : stream( s ), separator( sep ) {}
- QTextOStreamIterator<T>& operator= ( const T& x ) {
- stream << x;
- if ( !separator.isEmpty() )
- stream << separator;
- return *this;
- }
- QTextOStreamIterator<T>& operator*() { return *this; }
- QTextOStreamIterator<T>& operator++() { return *this; }
- QTextOStreamIterator<T>& operator++(int) { return *this; }
-};
-#endif //QT_NO_TEXTSTREAM
-
template <class InputIterator, class OutputIterator>
inline OutputIterator qCopy( InputIterator _begin, InputIterator _end,
OutputIterator _dest )