00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef QTEXTSTREAM_H
00043 #define QTEXTSTREAM_H
00044
00045 #include <QtCore/qiodevice.h>
00046 #include <QtCore/qstring.h>
00047 #include <QtCore/qchar.h>
00048 #include <QtCore/qlocale.h>
00049 #include <QtCore/qscopedpointer.h>
00050
00051 #ifndef QT_NO_TEXTCODEC
00052 # ifdef QT3_SUPPORT
00053 # include <QtCore/qtextcodec.h>
00054 # endif
00055 #endif
00056
00057 #include <stdio.h>
00058
00059 #ifdef Status
00060 #error qtextstream.h must be included before any header file that defines Status
00061 #endif
00062
00063 QT_BEGIN_HEADER
00064
00065 QT_BEGIN_NAMESPACE
00066
00067 QT_MODULE(Core)
00068
00069 class QTextCodec;
00070 class QTextDecoder;
00071
00072 class QTextStreamPrivate;
00073 class Q_CORE_EXPORT QTextStream
00074 {
00075 Q_DECLARE_PRIVATE(QTextStream)
00076
00077 public:
00078 enum RealNumberNotation {
00079 SmartNotation,
00080 FixedNotation,
00081 ScientificNotation
00082 };
00083 enum FieldAlignment {
00084 AlignLeft,
00085 AlignRight,
00086 AlignCenter,
00087 AlignAccountingStyle
00088 };
00089 enum Status {
00090 Ok,
00091 ReadPastEnd,
00092 ReadCorruptData
00093 };
00094 enum NumberFlag {
00095 ShowBase = 0x1,
00096 ForcePoint = 0x2,
00097 ForceSign = 0x4,
00098 UppercaseBase = 0x8,
00099 UppercaseDigits = 0x10
00100 };
00101 Q_DECLARE_FLAGS(NumberFlags, NumberFlag)
00102
00103 QTextStream();
00104 explicit QTextStream(QIODevice *device);
00105 explicit QTextStream(FILE *fileHandle, QIODevice::OpenMode openMode = QIODevice::ReadWrite);
00106 explicit QTextStream(QString *string, QIODevice::OpenMode openMode = QIODevice::ReadWrite);
00107 explicit QTextStream(QByteArray *array, QIODevice::OpenMode openMode = QIODevice::ReadWrite);
00108 explicit QTextStream(const QByteArray &array, QIODevice::OpenMode openMode = QIODevice::ReadOnly);
00109 virtual ~QTextStream();
00110
00111 #ifndef QT_NO_TEXTCODEC
00112 void setCodec(QTextCodec *codec);
00113 void setCodec(const char *codecName);
00114 QTextCodec *codec() const;
00115 void setAutoDetectUnicode(bool enabled);
00116 bool autoDetectUnicode() const;
00117 void setGenerateByteOrderMark(bool generate);
00118 bool generateByteOrderMark() const;
00119 #endif
00120
00121 void setLocale(const QLocale &locale);
00122 QLocale locale() const;
00123
00124 void setDevice(QIODevice *device);
00125 QIODevice *device() const;
00126
00127 void setString(QString *string, QIODevice::OpenMode openMode = QIODevice::ReadWrite);
00128 QString *string() const;
00129
00130 Status status() const;
00131 void setStatus(Status status);
00132 void resetStatus();
00133
00134 bool atEnd() const;
00135 void reset();
00136 void flush();
00137 bool seek(qint64 pos);
00138 qint64 pos() const;
00139
00140 void skipWhiteSpace();
00141
00142 QString readLine(qint64 maxlen = 0);
00143 QString readAll();
00144 QString read(qint64 maxlen);
00145
00146 void setFieldAlignment(FieldAlignment alignment);
00147 FieldAlignment fieldAlignment() const;
00148
00149 void setPadChar(QChar ch);
00150 QChar padChar() const;
00151
00152 void setFieldWidth(int width);
00153 int fieldWidth() const;
00154
00155 void setNumberFlags(NumberFlags flags);
00156 NumberFlags numberFlags() const;
00157
00158 void setIntegerBase(int base);
00159 int integerBase() const;
00160
00161 void setRealNumberNotation(RealNumberNotation notation);
00162 RealNumberNotation realNumberNotation() const;
00163
00164 void setRealNumberPrecision(int precision);
00165 int realNumberPrecision() const;
00166
00167 QTextStream &operator>>(QChar &ch);
00168 QTextStream &operator>>(char &ch);
00169 QTextStream &operator>>(signed short &i);
00170 QTextStream &operator>>(unsigned short &i);
00171 QTextStream &operator>>(signed int &i);
00172 QTextStream &operator>>(unsigned int &i);
00173 QTextStream &operator>>(signed long &i);
00174 QTextStream &operator>>(unsigned long &i);
00175 QTextStream &operator>>(qlonglong &i);
00176 QTextStream &operator>>(qulonglong &i);
00177 QTextStream &operator>>(float &f);
00178 QTextStream &operator>>(double &f);
00179 QTextStream &operator>>(QString &s);
00180 QTextStream &operator>>(QByteArray &array);
00181 QTextStream &operator>>(char *c);
00182
00183 QTextStream &operator<<(QBool b);
00184 QTextStream &operator<<(QChar ch);
00185 QTextStream &operator<<(char ch);
00186 QTextStream &operator<<(signed short i);
00187 QTextStream &operator<<(unsigned short i);
00188 QTextStream &operator<<(signed int i);
00189 QTextStream &operator<<(unsigned int i);
00190 QTextStream &operator<<(signed long i);
00191 QTextStream &operator<<(unsigned long i);
00192 QTextStream &operator<<(qlonglong i);
00193 QTextStream &operator<<(qulonglong i);
00194 QTextStream &operator<<(float f);
00195 QTextStream &operator<<(double f);
00196 QTextStream &operator<<(const QString &s);
00197 QTextStream &operator<<(const QByteArray &array);
00198 QTextStream &operator<<(const char *c);
00199 QTextStream &operator<<(const void *ptr);
00200
00201 #ifdef QT3_SUPPORT
00202
00203
00204 inline QT3_SUPPORT int flags() const { return flagsInternal(); }
00205 inline QT3_SUPPORT int flags(int f) { return flagsInternal(f); }
00206
00207 inline QT3_SUPPORT int setf(int bits)
00208 { int old = flagsInternal(); flagsInternal(flagsInternal() | bits); return old; }
00209 inline QT3_SUPPORT int setf(int bits, int mask)
00210 { int old = flagsInternal(); flagsInternal(flagsInternal() | (bits & mask)); return old; }
00211 inline QT3_SUPPORT int unsetf(int bits)
00212 { int old = flagsInternal(); flagsInternal(flagsInternal() & ~bits); return old; }
00213
00214 inline QT3_SUPPORT int width(int w)
00215 { int old = fieldWidth(); setFieldWidth(w); return old; }
00216 inline QT3_SUPPORT int fill(int f)
00217 { QChar ch = padChar(); setPadChar(QChar(f)); return ch.unicode(); }
00218 inline QT3_SUPPORT int precision(int p)
00219 { int old = realNumberPrecision(); setRealNumberPrecision(p); return old; }
00220
00221 enum {
00222 skipws = 0x0001,
00223 left = 0x0002,
00224 right = 0x0004,
00225 internal = 0x0008,
00226 bin = 0x0010,
00227 oct = 0x0020,
00228 dec = 0x0040,
00229 hex = 0x0080,
00230 showbase = 0x0100,
00231 showpoint = 0x0200,
00232 uppercase = 0x0400,
00233 showpos = 0x0800,
00234 scientific = 0x1000,
00235 fixed = 0x2000
00236 };
00237 enum {
00238 basefield = bin | oct | dec | hex,
00239 adjustfield = left | right | internal,
00240 floatfield = scientific | fixed
00241 };
00242
00243 #ifndef QT_NO_TEXTCODEC
00244 enum Encoding { Locale, Latin1, Unicode, UnicodeNetworkOrder,
00245 UnicodeReverse, RawUnicode, UnicodeUTF8 };
00246 QT3_SUPPORT void setEncoding(Encoding encoding);
00247 #endif
00248 inline QT3_SUPPORT QString read() { return readAll(); }
00249 inline QT3_SUPPORT void unsetDevice() { setDevice(0); }
00250 #endif
00251
00252 private:
00253 #ifdef QT3_SUPPORT
00254 int flagsInternal() const;
00255 int flagsInternal(int flags);
00256 #endif
00257
00258 Q_DISABLE_COPY(QTextStream)
00259
00260 QScopedPointer<QTextStreamPrivate> d_ptr;
00261 };
00262
00263 Q_DECLARE_OPERATORS_FOR_FLAGS(QTextStream::NumberFlags)
00264
00265
00266
00267
00268
00269 typedef QTextStream & (*QTextStreamFunction)(QTextStream &);
00270 typedef void (QTextStream::*QTSMFI)(int);
00271 typedef void (QTextStream::*QTSMFC)(QChar);
00272
00273 class Q_CORE_EXPORT QTextStreamManipulator
00274 {
00275 public:
00276 QTextStreamManipulator(QTSMFI m, int a) { mf = m; mc = 0; arg = a; }
00277 QTextStreamManipulator(QTSMFC m, QChar c) { mf = 0; mc = m; ch = c; arg = -1; }
00278 void exec(QTextStream &s) { if (mf) { (s.*mf)(arg); } else { (s.*mc)(ch); } }
00279
00280 private:
00281 QTSMFI mf;
00282 QTSMFC mc;
00283 int arg;
00284 QChar ch;
00285 };
00286
00287 inline QTextStream &operator>>(QTextStream &s, QTextStreamFunction f)
00288 { return (*f)(s); }
00289
00290 inline QTextStream &operator<<(QTextStream &s, QTextStreamFunction f)
00291 { return (*f)(s); }
00292
00293 inline QTextStream &operator<<(QTextStream &s, QTextStreamManipulator m)
00294 { m.exec(s); return s; }
00295
00296 Q_CORE_EXPORT QTextStream &bin(QTextStream &s);
00297 Q_CORE_EXPORT QTextStream &oct(QTextStream &s);
00298 Q_CORE_EXPORT QTextStream &dec(QTextStream &s);
00299 Q_CORE_EXPORT QTextStream &hex(QTextStream &s);
00300
00301 Q_CORE_EXPORT QTextStream &showbase(QTextStream &s);
00302 Q_CORE_EXPORT QTextStream &forcesign(QTextStream &s);
00303 Q_CORE_EXPORT QTextStream &forcepoint(QTextStream &s);
00304 Q_CORE_EXPORT QTextStream &noshowbase(QTextStream &s);
00305 Q_CORE_EXPORT QTextStream &noforcesign(QTextStream &s);
00306 Q_CORE_EXPORT QTextStream &noforcepoint(QTextStream &s);
00307
00308 Q_CORE_EXPORT QTextStream &uppercasebase(QTextStream &s);
00309 Q_CORE_EXPORT QTextStream &uppercasedigits(QTextStream &s);
00310 Q_CORE_EXPORT QTextStream &lowercasebase(QTextStream &s);
00311 Q_CORE_EXPORT QTextStream &lowercasedigits(QTextStream &s);
00312
00313 Q_CORE_EXPORT QTextStream &fixed(QTextStream &s);
00314 Q_CORE_EXPORT QTextStream &scientific(QTextStream &s);
00315
00316 Q_CORE_EXPORT QTextStream &left(QTextStream &s);
00317 Q_CORE_EXPORT QTextStream &right(QTextStream &s);
00318 Q_CORE_EXPORT QTextStream ¢er(QTextStream &s);
00319
00320 Q_CORE_EXPORT QTextStream &endl(QTextStream &s);
00321 Q_CORE_EXPORT QTextStream &flush(QTextStream &s);
00322 Q_CORE_EXPORT QTextStream &reset(QTextStream &s);
00323
00324 Q_CORE_EXPORT QTextStream &bom(QTextStream &s);
00325
00326 Q_CORE_EXPORT QTextStream &ws(QTextStream &s);
00327
00328 inline QTextStreamManipulator qSetFieldWidth(int width)
00329 {
00330 QTSMFI func = &QTextStream::setFieldWidth;
00331 return QTextStreamManipulator(func,width);
00332 }
00333
00334 inline QTextStreamManipulator qSetPadChar(QChar ch)
00335 {
00336 QTSMFC func = &QTextStream::setPadChar;
00337 return QTextStreamManipulator(func, ch);
00338 }
00339
00340 inline QTextStreamManipulator qSetRealNumberPrecision(int precision)
00341 {
00342 QTSMFI func = &QTextStream::setRealNumberPrecision;
00343 return QTextStreamManipulator(func, precision);
00344 }
00345
00346 #ifdef QT3_SUPPORT
00347 typedef QTextStream QTS;
00348
00349 class Q_CORE_EXPORT QTextIStream : public QTextStream
00350 {
00351 public:
00352 inline explicit QTextIStream(const QString *s) : QTextStream(const_cast<QString *>(s), QIODevice::ReadOnly) {}
00353 inline explicit QTextIStream(QByteArray *a) : QTextStream(a, QIODevice::ReadOnly) {}
00354 inline QTextIStream(FILE *f) : QTextStream(f, QIODevice::ReadOnly) {}
00355
00356 private:
00357 Q_DISABLE_COPY(QTextIStream)
00358 };
00359
00360 class Q_CORE_EXPORT QTextOStream : public QTextStream
00361 {
00362 public:
00363 inline explicit QTextOStream(QString *s) : QTextStream(s, QIODevice::WriteOnly) {}
00364 inline explicit QTextOStream(QByteArray *a) : QTextStream(a, QIODevice::WriteOnly) {}
00365 inline QTextOStream(FILE *f) : QTextStream(f, QIODevice::WriteOnly) {}
00366
00367 private:
00368 Q_DISABLE_COPY(QTextOStream)
00369 };
00370 #endif
00371
00372 QT_END_NAMESPACE
00373
00374 QT_END_HEADER
00375
00376 #endif // QTEXTSTREAM_H