summaryrefslogtreecommitdiffstats
path: root/src/corelib/serialization/qtextstream.h
blob: 2b4caf549c7a1487a9628a012438806c43235ed9 (plain)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
// Copyright (C) 2016 The Qt Company Ltd.// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only#ifndef QTEXTSTREAM_H#define QTEXTSTREAM_H#include <QtCore/qiodevicebase.h>#include <QtCore/qchar.h>#include <QtCore/qstringconverter_base.h>#include <memory>#include <stdio.h>#if 0// the macros around the class name throw off syncqt:#pragma qt_class(QTextStream)#endif#ifdef Status#error qtextstream.h must be included before any header file that defines Status#endif QT_BEGIN_NAMESPACE class QIODevice;class QLocale;class QString;#if !QT_DEPRECATED_SINCE(6, 9)# define QT_NO_INHERITABLE_TEXT_STREAM#endif#ifdef QT_NO_INHERITABLE_TEXT_STREAM# define QT_TEXT_STREAM_FINAL final#else# define QT_TEXT_STREAM_FINAL#endifclass QTextStreamPrivate;class Q_CORE_EXPORT QTextStream QT_TEXT_STREAM_FINAL :public QIODeviceBase {Q_DECLARE_PRIVATE(QTextStream)public:enum RealNumberNotation { SmartNotation, FixedNotation, ScientificNotation };enum FieldAlignment { AlignLeft, AlignRight, AlignCenter, AlignAccountingStyle };enum Status { Ok, ReadPastEnd, ReadCorruptData, WriteFailed };enum NumberFlag { ShowBase =0x1, ForcePoint =0x2, ForceSign =0x4, UppercaseBase =0x8, UppercaseDigits =0x10};Q_DECLARE_FLAGS(NumberFlags, NumberFlag)QTextStream();explicitQTextStream(QIODevice *device);explicitQTextStream(FILE*fileHandle, OpenMode openMode = ReadWrite);explicitQTextStream(QString *string, OpenMode openMode = ReadWrite);explicitQTextStream(QByteArray *array, OpenMode openMode = ReadWrite);explicitQTextStream(const QByteArray &array, OpenMode openMode = ReadOnly);QT6_ONLY(virtual)~QTextStream();voidsetEncoding(QStringConverter::Encoding encoding);QStringConverter::Encoding encoding()const;voidsetAutoDetectUnicode(bool enabled);boolautoDetectUnicode()const;voidsetGenerateByteOrderMark(bool generate);boolgenerateByteOrderMark()const;voidsetLocale(const QLocale &locale); QLocale locale()const;voidsetDevice(QIODevice *device); QIODevice *device()const;voidsetString(QString *string, OpenMode openMode = ReadWrite); QString *string()const; Status status()const;voidsetStatus(Status status);voidresetStatus();boolatEnd()const;voidreset();voidflush();boolseek(qint64 pos); qint64 pos()const;voidskipWhiteSpace(); QString readLine(qint64 maxlen =0);boolreadLineInto(QString *line, qint64 maxlen =0); QString readAll(); QString read(qint64 maxlen);voidsetFieldAlignment(FieldAlignment alignment); FieldAlignment fieldAlignment()const;voidsetPadChar(QChar ch); QChar padChar()const;voidsetFieldWidth(int width);intfieldWidth()const;voidsetNumberFlags(NumberFlags flags); NumberFlags numberFlags()const;voidsetIntegerBase(int base);intintegerBase()const;voidsetRealNumberNotation(RealNumberNotation notation); RealNumberNotation realNumberNotation()const;voidsetRealNumberPrecision(int precision);intrealNumberPrecision()const; QTextStream &operator>>(QChar &ch); QTextStream &operator>>(char&ch); QTextStream &operator>>(char16_t &ch){ QChar c; *this>> c; ch = c.unicode();return*this; } QTextStream &operator>>(signed short&i); QTextStream &operator>>(unsigned short&i); QTextStream &operator>>(signed int&i); QTextStream &operator>>(unsigned int&i); QTextStream &operator>>(signed long&i); QTextStream &operator>>(unsigned long&i); QTextStream &operator>>(qlonglong &i); QTextStream &operator>>(qulonglong &i); QTextStream &operator>>(float&f); QTextStream &operator>>(double&f); QTextStream &operator>>(QString &s); QTextStream &operator>>(QByteArray &array); QTextStream &operator>>(char*c); QTextStream &operator<<(QChar ch); QTextStream &operator<<(char ch); QTextStream &operator<<(char16_t ch) {return*this<<QChar(ch); } QTextStream &operator<<(signed short i); QTextStream &operator<<(unsigned short i); QTextStream &operator<<(signed int i); QTextStream &operator<<(unsigned int i); QTextStream &operator<<(signed long i); QTextStream &operator<<(unsigned long i); QTextStream &operator<<(qlonglong i); QTextStream &operator<<(qulonglong i); QTextStream &operator<<(float f); QTextStream &operator<<(double f); QTextStream &operator<<(const QString &s); QTextStream &operator<<(QStringView s); QTextStream &operator<<(QLatin1StringView s); QTextStream &operator<<(const QByteArray &array); QTextStream &operator<<(const char*c); QTextStream &operator<<(const void*ptr);explicit operatorbool()const noexcept {returnstatus() == Ok; }private:Q_DISABLE_COPY(QTextStream)friend class QDebugStateSaverPrivate;friend class QDebug;std::unique_ptr<QTextStreamPrivate> d_ptr;};Q_DECLARE_OPERATORS_FOR_FLAGS(QTextStream::NumberFlags)/***************************************************************************** QTextStream manipulators *****************************************************************************/typedef QTextStream & (*QTextStreamFunction)(QTextStream &);// manipulator functiontypedefvoid(QTextStream::*QTSMFI)(int);// manipulator w/int argumenttypedefvoid(QTextStream::*QTSMFC)(QChar);// manipulator w/QChar argumentclass Q_CORE_EXPORT QTextStreamManipulator {public:constexprQTextStreamManipulator(QTSMFI m,int a) noexcept :mf(m),mc(nullptr),arg(a),ch() {}constexprQTextStreamManipulator(QTSMFC m, QChar c) noexcept :mf(nullptr),mc(m),arg(-1),ch(c) {}voidexec(QTextStream &s) {if(mf) { (s.*mf)(arg); }else{ (s.*mc)(ch); } }private: QTSMFI mf;// QTextStream member function QTSMFC mc;// QTextStream member functionint arg;// member function argument QChar ch;};inline QTextStream &operator>>(QTextStream &s, QTextStreamFunction f){return(*f)(s); }inline QTextStream &operator<<(QTextStream &s, QTextStreamFunction f){return(*f)(s); }inline QTextStream &operator<<(QTextStream &s, QTextStreamManipulator m){ m.exec(s);return s; }namespace Qt { Q_CORE_EXPORT QTextStream &bin(QTextStream &s); Q_CORE_EXPORT QTextStream &oct(QTextStream &s); Q_CORE_EXPORT QTextStream &dec(QTextStream &s); Q_CORE_EXPORT QTextStream &hex(QTextStream &s); Q_CORE_EXPORT QTextStream &showbase(QTextStream &s); Q_CORE_EXPORT QTextStream &forcesign(QTextStream &s); Q_CORE_EXPORT QTextStream &forcepoint(QTextStream &s); Q_CORE_EXPORT QTextStream &noshowbase(QTextStream &s); Q_CORE_EXPORT QTextStream &noforcesign(QTextStream &s); Q_CORE_EXPORT QTextStream &noforcepoint(QTextStream &s); Q_CORE_EXPORT QTextStream &uppercasebase(QTextStream &s); Q_CORE_EXPORT QTextStream &uppercasedigits(QTextStream &s); Q_CORE_EXPORT QTextStream &lowercasebase(QTextStream &s); Q_CORE_EXPORT QTextStream &lowercasedigits(QTextStream &s); Q_CORE_EXPORT QTextStream &fixed(QTextStream &s); Q_CORE_EXPORT QTextStream &scientific(QTextStream &s); Q_CORE_EXPORT QTextStream &left(QTextStream &s); Q_CORE_EXPORT QTextStream &right(QTextStream &s); Q_CORE_EXPORT QTextStream &center(QTextStream &s); Q_CORE_EXPORT QTextStream &endl(QTextStream &s); Q_CORE_EXPORT QTextStream &flush(QTextStream &s); Q_CORE_EXPORT QTextStream &reset(QTextStream &s); Q_CORE_EXPORT QTextStream &bom(QTextStream &s); Q_CORE_EXPORT QTextStream &ws(QTextStream &s);}// namespace Qtinline QTextStreamManipulator qSetFieldWidth(int width){ QTSMFI func = &QTextStream::setFieldWidth;returnQTextStreamManipulator(func,width);}inline QTextStreamManipulator qSetPadChar(QChar ch){ QTSMFC func = &QTextStream::setPadChar;returnQTextStreamManipulator(func, ch);}inline QTextStreamManipulator qSetRealNumberPrecision(int precision){ QTSMFI func = &QTextStream::setRealNumberPrecision;returnQTextStreamManipulator(func, precision);} QT_END_NAMESPACE #endif// QTEXTSTREAM_H
close