1// Copyright (C) 2020 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QIODEVICE_H
5#define QIODEVICE_H
6
7#include <QtCore/qglobal.h>
8#include <QtCore/qiodevicebase.h>
9#ifndef QT_NO_QOBJECT
10#include <QtCore/qobject.h>
11#else
12#include <QtCore/qobjectdefs.h>
13#include <QtCore/qscopedpointer.h>
14#endif
15#include <QtCore/qstring.h>
16
17#ifdef open
18#error qiodevice.h must be included before any header file that defines open
19#endif
20
21QT_BEGIN_NAMESPACE
22
23
24class QByteArray;
25class QIODevicePrivate;
26
27class Q_CORE_EXPORT QIODevice
28#ifndef QT_NO_QOBJECT
29 : public QObject,
30#else
31 :
32#endif
33 public QIODeviceBase
34{
35#ifndef QT_NO_QOBJECT
36 Q_OBJECT
37#endif
38public:
39 QIODevice();
40#ifndef QT_NO_QOBJECT
41 explicit QIODevice(QObject *parent);
42#endif
43 virtual ~QIODevice();
44
45 QIODeviceBase::OpenMode openMode() const;
46
47 void setTextModeEnabled(bool enabled);
48 bool isTextModeEnabled() const;
49
50 bool isOpen() const;
51 bool isReadable() const;
52 bool isWritable() const;
53 virtual bool isSequential() const;
54
55 int readChannelCount() const;
56 int writeChannelCount() const;
57 int currentReadChannel() const;
58 void setCurrentReadChannel(int channel);
59 int currentWriteChannel() const;
60 void setCurrentWriteChannel(int channel);
61
62 virtual bool open(QIODeviceBase::OpenMode mode);
63 virtual void close();
64
65 // ### Qt 7 - QTBUG-76492: pos() and seek() should not be virtual, and
66 // ### seek() should call a virtual seekData() function.
67 virtual qint64 pos() const;
68 virtual qint64 size() const;
69 virtual bool seek(qint64 pos);
70 virtual bool atEnd() const;
71 virtual bool reset();
72
73 virtual qint64 bytesAvailable() const;
74 virtual qint64 bytesToWrite() const;
75
76 qint64 read(char *data, qint64 maxlen);
77 QByteArray read(qint64 maxlen);
78 QByteArray readAll();
79 qint64 readLine(char *data, qint64 maxlen);
80 QByteArray readLine(qint64 maxlen = 0);
81 virtual bool canReadLine() const;
82
83 void startTransaction();
84 void commitTransaction();
85 void rollbackTransaction();
86 bool isTransactionStarted() const;
87
88 qint64 write(const char *data, qint64 len);
89 qint64 write(const char *data);
90 qint64 write(const QByteArray &data);
91
92 qint64 peek(char *data, qint64 maxlen);
93 QByteArray peek(qint64 maxlen);
94 qint64 skip(qint64 maxSize);
95
96 virtual bool waitForReadyRead(int msecs);
97 virtual bool waitForBytesWritten(int msecs);
98
99 void ungetChar(char c);
100 bool putChar(char c);
101 bool getChar(char *c);
102
103 QString errorString() const;
104
105#ifndef QT_NO_QOBJECT
106Q_SIGNALS:
107 void readyRead();
108 void channelReadyRead(int channel);
109 void bytesWritten(qint64 bytes);
110 void channelBytesWritten(int channel, qint64 bytes);
111 void aboutToClose();
112 void readChannelFinished();
113#endif
114
115protected:
116#ifdef QT_NO_QOBJECT
117 QIODevice(QIODevicePrivate &dd);
118#else
119 QIODevice(QIODevicePrivate &dd, QObject *parent = nullptr);
120#endif
121 virtual qint64 readData(char *data, qint64 maxlen) = 0;
122 virtual qint64 readLineData(char *data, qint64 maxlen);
123 virtual qint64 skipData(qint64 maxSize);
124 virtual qint64 writeData(const char *data, qint64 len) = 0;
125
126 void setOpenMode(QIODeviceBase::OpenMode openMode);
127
128 void setErrorString(const QString &errorString);
129
130#ifdef QT_NO_QOBJECT
131 QScopedPointer<QIODevicePrivate> d_ptr;
132#endif
133
134private:
135 Q_DECLARE_PRIVATE(QIODevice)
136 Q_DISABLE_COPY(QIODevice)
137};
138
139Q_DECLARE_OPERATORS_FOR_FLAGS(QIODevice::OpenMode)
140
141#if !defined(QT_NO_DEBUG_STREAM)
142class QDebug;
143Q_CORE_EXPORT QDebug operator<<(QDebug debug, QIODevice::OpenMode modes);
144#endif
145
146QT_END_NAMESPACE
147
148#endif // QIODEVICE_H
149

source code of qtbase/src/corelib/io/qiodevice.h