summaryrefslogtreecommitdiffstats
path: root/src/corelib/serialization/qtextstream_p.h
blob: d7e70200f95b1d8820c8d00df9eab2f91e4e4d1f (plain)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
// Copyright (C) 2016 The Qt Company Ltd.// Copyright (C) 2016 Intel Corporation.// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only#ifndef QTEXTSTREAM_P_H#define QTEXTSTREAM_P_H//// W A R N I N G// -------------//// This file is not part of the Qt API. It exists purely as an// implementation detail. This header file may change from version to// version without notice, or even be removed.//// We mean it.//#include <QtCore/private/qglobal_p.h>#include <QtCore/qstringconverter.h>#include <QtCore/qiodevice.h>#include <QtCore/qlocale.h>#include"qtextstream.h" QT_BEGIN_NAMESPACE #ifndef QT_NO_QOBJECTclass QDeviceClosedNotifier :public QObject { Q_OBJECT public:inlineQDeviceClosedNotifier(){ }~QDeviceClosedNotifier() override;inlinevoidsetupDevice(QTextStream *stream, QIODevice *device){disconnect();if(device) {// Force direct connection here so that QTextStream can be used// from multiple threads when the application code is handling// synchronization (see also QTBUG-12055).connect(device,SIGNAL(aboutToClose()),this,SLOT(flushStream()),Qt::DirectConnection);} m_stream = stream;}public Q_SLOTS:voidflushStream() { m_stream->flush(); }private: QTextStream *m_stream;};#endifclass QTextStreamPrivate {Q_DECLARE_PUBLIC(QTextStream)public:// streaming parametersclass Params {public:voidreset();// As for QString, QLocale functions taking these: the values of// precision, base and width can't sensibly need even eight bits, so// there's no sense expanding beyond int.int realNumberPrecision;int integerBase;int fieldWidth; QChar padChar;QTextStream::FieldAlignment fieldAlignment;QTextStream::RealNumberNotation realNumberNotation;QTextStream::NumberFlags numberFlags;};QTextStreamPrivate(QTextStream *q_ptr);~QTextStreamPrivate();voidreset();// device QIODevice *device;#ifndef QT_NO_QOBJECT QDeviceClosedNotifier deviceClosedNotifier;#endif// string QString *string; qsizetype stringOffset;QIODevice::OpenMode stringOpenMode;QStringConverter::Encoding encoding =QStringConverter::Utf8; QStringEncoder fromUtf16; QStringDecoder toUtf16; QStringDecoder savedToUtf16; QString writeBuffer; QString readBuffer; qsizetype readBufferOffset; qsizetype readConverterSavedStateOffset;//the offset between readBufferStartDevicePos and that start of the buffer qint64 readBufferStartDevicePos; Params params;// statusQTextStream::Status status; QLocale locale; QTextStream *q_ptr; qsizetype lastTokenSize;bool deleteDevice;bool autoDetectUnicode;bool hasWrittenData =false;bool generateBOM =false;// i/oenum TokenDelimiter { Space, NotSpace, EndOfLine }; QString read(qsizetype maxlen);boolscan(const QChar **ptr, qsizetype *tokenLength, qsizetype maxlen, TokenDelimiter delimiter);inlineconst QChar *readPtr()const;inlinevoidconsumeLastToken();inlinevoidconsume(qsizetype nchars);voidsaveConverterState(qint64 newPos);voidrestoreToSavedConverterState();// Return value type for getNumber()enum NumberParsingStatus { npsOk, npsMissingDigit, npsInvalidPrefix };inlineboolgetChar(QChar *ch);inlinevoidungetChar(QChar ch); NumberParsingStatus getNumber(qulonglong *l);boolgetReal(double*f);inlinevoidwrite(QStringView data) {write(data.begin(), data.size()); }inlinevoidwrite(QChar ch);voidwrite(const QChar *data, qsizetype len);voidwrite(QLatin1StringView data);voidwritePadding(qsizetype len);inlinevoidputString(QStringView string,bool number =false){putString(string.constData(), string.size(), number);}voidputString(const QChar *data, qsizetype len,bool number =false);voidputString(QLatin1StringView data,bool number =false);voidputString(QUtf8StringView data,bool number =false);inlinevoidputChar(QChar ch);voidputNumber(qulonglong number,bool negative);struct PaddingResult { qsizetype left, right;}; PaddingResult padding(qsizetype len)const;// buffersboolfillReadBuffer(qint64 maxBytes = -1);voidresetReadBuffer();voidflushWriteBuffer();}; QT_END_NAMESPACE #endif// QTEXTSTREAM_P_H
close