summaryrefslogtreecommitdiffstats
path: root/tqtinterface/qt4/src/tools/tqiodevice.h
blob: 6fccc9d0db48062b1ba1c97732c2b67d726178b4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
/****************************************************************************
**
** Definition of TQIODevice class
**
** Created : 940913
**
** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
**
** This file is part of the tools module of the TQt GUI Toolkit.
**
** This file may be used under the terms of the GNU General
** Public License versions 2.0 or 3.0 as published by the Free
** Software Foundation and appearing in the files LICENSE.GPL2
** and LICENSE.GPL3 included in the packaging of this file.
** Alternatively you may (at your option) use any later version
** of the GNU General Public License if such license has been
** publicly approved by Trolltech ASA (or its successors, if any)
** and the KDE Free TQt Foundation.
**
** Please review the following information to ensure GNU General
** Public Licensing requirements will be met:
** http://trolltech.com/products/qt/licenses/licensing/opensource/.
** If you are unsure which license is appropriate for your use, please
** review the following information:
** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
** or contact the sales department at sales@trolltech.com.
**
** This file may be used under the terms of the Q Public License as
** defined by Trolltech ASA and appearing in the file LICENSE.TQPL
** included in the packaging of this file.  Licensees holding valid TQt
** Commercial licenses may use this file in accordance with the TQt
** Commercial License Agreement provided with the Software.
**
** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
** herein.
**
**********************************************************************/

#ifndef TQIODEVICE_H
#define TQIODEVICE_H

#include "tqtglobaldefines.h"

#ifndef TQT_H
#include "tqglobal.h"
#include "tqcstring.h"
#endif // TQT_H

#ifdef USE_QT4

#include <Qt/qiodevice.h>
#include <Qt/qfile.h>
#include <iostream>

#endif // USE_QT4

#ifdef USE_QT4

#define IO_Direct		0x0100		// direct access tqdevice
#define IO_Sequential		0x0200		// sequential access tqdevice
#define IO_Combined		0x0300		// combined direct/sequential
#define IO_TypeMask		0x0f00

// IO handling modes

#define IO_Raw			0x0040		// raw access (not buffered)
#define IO_Async		0x0080		// asynchronous mode

// IO tqdevice open modes

#define IO_ReadOnly		(QIODevice::OpenModeFlag)0x0001		// readable tqdevice
#define IO_WriteOnly		(QIODevice::OpenModeFlag)0x0002		// writable tqdevice
#define IO_ReadWrite		(QIODevice::OpenModeFlag)0x0003		// read+write tqdevice
#define IO_Append		(QIODevice::OpenModeFlag)0x0004		// append
#define IO_Truncate		(QIODevice::OpenModeFlag)0x0008		// truncate tqdevice
#define IO_Translate		(QIODevice::OpenModeFlag)0x0010		// translate CR+LF
#define IO_ModeMask		(QIODevice::OpenModeFlag)0x00ff

// IO tqdevice state

#define IO_Open			0x1000		// tqdevice is open
#define IO_StateMask		0xf000

// IO tqdevice status

#define IO_Ok			0
#define IO_ReadError		1		// read error
#define IO_WriteError		2		// write error
#define IO_FatalError		3		// fatal unrecoverable error
#define IO_ResourceError	4		// resource limitation
#define IO_OpenError		5		// cannot open tqdevice
#define IO_ConnectError		5		// cannot connect to tqdevice
#define IO_AbortError		6		// abort error
#define IO_TimeOutError		7		// time out
#define IO_UnspecifiedError	8		// unspecified error

class TQ_EXPORT TQIODevice : public QIODevice
{
public:
#if defined(TQT_ABI_QT4)
    typedef TQ_LLONG Offset;
#else
    typedef TQ_ULONG Offset;
#endif

	TQIODevice() : QIODevice() {}

	inline int state() const { return isOpen() ? 0x1000 : 0; }
	inline int mode() const { return (int) openMode(); }
	inline int flags() const { return (int) openMode(); }
	inline bool tqopen( int mode ) { return open((OpenModeFlag)mode); }

	inline Offset at() const { return pos(); }
	inline bool at(Offset offset) { return seek(offset); }
	inline Offset tqat() const { return pos(); }
	inline bool tqat(Offset offset) { return seek(offset); }

// 	virtual inline qint64 readBlock(char *data, quint64 maxlen) { return read(data, maxlen); }
// 	virtual inline qint64 writeBlock(const char *data, quint64 len) { return write(data, len); }
// 	virtual inline qint64 writeBlock(const QByteArray &data) { return write(data); }
	inline qint64 readBlock(char *data, quint64 maxlen) { return read(data, maxlen); }
	inline qint64 writeBlock(const char *data, quint64 len) { return write(data, len); }
	inline qint64 writeBlock(const QByteArray &data) { return write(data); }

// 	virtual inline qint64 readData ( char * data, qint64 maxSize ) { return readBlock(data, maxSize); }
// 	virtual inline qint64 writeData ( const char * data, qint64 maxSize ) { return writeBlock(data, maxSize); }

	inline int getch() { char c; return getChar(&c) ? int(uchar(c)) : -1; }
	inline int putch(int c) { return putChar(char(c)) ? int(uchar(c)) : -1; }
	inline int ungetch(int c) { ungetChar(uchar(c)); return c; }
	virtual void flush() = 0;

	inline bool isDirectAccess() const { return !isSequential(); }
	inline bool isSequentialAccess() const { return isSequential(); }
	inline bool isCombinedAccess() const { return false; }
	inline bool isBuffered() const { return true; }
	inline bool isRaw() const { return false; }
	inline bool isSynchronous() const { return true; }
	inline bool isAsynchronous() const { return false; }
	inline bool isTranslated() const { return (openMode() & Text) != 0; }
	inline bool isInactive() const { return !isOpen(); }

// 	inline bool open( int mode ) = 0;

protected:
	void setFlags( int f ) { setOpenMode((QIODevice::OpenModeFlag)f); }
	void setType( int ) { printf("[WARNING] TQIODevice::setType() unimplemented\n\r"); }
	void setMode( int f ) { setOpenMode((QIODevice::OpenModeFlag)f); }
	void setState( int state ) {
		switch (state) {
			case (IO_Open):
				QIODevice::open(openMode());
				break;
		}
	}

public:
	typedef int Status;
	Status status() const {
#if !defined(QT_NO_QOBJECT)
		const QFile *f = qobject_cast<const QFile *>(this);
		if (f) return (int) f->error();
#endif
		return isOpen() ? 0 /* IO_Ok */ : 8 /* IO_UnspecifiedError */;
	}
	void resetStatus() {
#if !defined(QT_NO_QOBJECT)
		QFile *f = qobject_cast<QFile *>(this);
		if (f) f->unsetError();
#endif
	}

	void setqStatus( int ) { std::cout << "[WARNING] TQIODevice::setqStatus() UNIMPLEMENTED\n\r"; }
	void resetqStatus() { resetStatus(); }

protected:
	friend class TQFile;
	friend class TQIODeviceSource;
	friend class TQImageIO;
	friend class TQBuffer;

public:
	// Interoperability
	static TQIODevice& convertFromQIODevice( QIODevice& qiod );
};

// Interoperability
inline static TQIODevice& convertFromQIODevice( QIODevice& qiod ) {
	return (*static_cast<TQIODevice*>(&qiod));
}

#else // USE_QT4

// IO tqdevice access types

#define IO_Direct		0x0100		// direct access tqdevice
#define IO_Sequential		0x0200		// sequential access tqdevice
#define IO_Combined		0x0300		// combined direct/sequential
#define IO_TypeMask		0x0f00

// IO handling modes

#define IO_Raw			0x0040		// raw access (not buffered)
#define IO_Async		0x0080		// asynchronous mode

// IO tqdevice open modes

#define IO_ReadOnly		0x0001		// readable tqdevice
#define IO_WriteOnly		0x0002		// writable tqdevice
#define IO_ReadWrite		0x0003		// read+write tqdevice
#define IO_Append		0x0004		// append
#define IO_Truncate		0x0008		// truncate tqdevice
#define IO_Translate		0x0010		// translate CR+LF
#define IO_ModeMask		0x00ff

// IO tqdevice state

#define IO_Open			0x1000		// tqdevice is open
#define IO_StateMask		0xf000

// IO tqdevice status

#define IO_Ok			0
#define IO_ReadError		1		// read error
#define IO_WriteError		2		// write error
#define IO_FatalError		3		// fatal unrecoverable error
#define IO_ResourceError	4		// resource limitation
#define IO_OpenError		5		// cannot open tqdevice
#define IO_ConnectError		5		// cannot connect to tqdevice
#define IO_AbortError		6		// abort error
#define IO_TimeOutError		7		// time out
#define IO_UnspecifiedError	8		// unspecified error


class TQ_EXPORT TQIODevice
{
public:
#if defined(TQT_ABI_QT4)
    typedef TQ_LLONG Offset;
#else
    typedef TQ_ULONG Offset;
#endif

    TQIODevice();
    virtual ~TQIODevice();

    int		 flags()  const { return ioMode; }
    int		 mode()	  const { return ioMode & IO_ModeMask; }
    int		 state()  const { return ioMode & IO_StateMask; }

    bool	 isDirectAccess()     const { return ((ioMode & IO_Direct)     == IO_Direct); }
    bool	 isSequentialAccess() const { return ((ioMode & IO_Sequential) == IO_Sequential); }
    bool	 isCombinedAccess()   const { return ((ioMode & IO_Combined)   == IO_Combined); }
    bool	 isBuffered()	      const { return ((ioMode & IO_Raw)        != IO_Raw); }
    bool	 isRaw()	      const { return ((ioMode & IO_Raw)        == IO_Raw); }
    bool	 isSynchronous()      const { return ((ioMode & IO_Async)      != IO_Async); }
    bool	 isAsynchronous()     const { return ((ioMode & IO_Async)      == IO_Async); }
    bool	 isTranslated()	      const { return ((ioMode & IO_Translate)  == IO_Translate); }
    bool	 isReadable()	      const { return ((ioMode & IO_ReadOnly)   == IO_ReadOnly); }
    bool	 isWritable()	      const { return ((ioMode & IO_WriteOnly)  == IO_WriteOnly); }
    bool	 isReadWrite()	      const { return ((ioMode & IO_ReadWrite)  == IO_ReadWrite); }
    bool	 isInactive()	      const { return state() == 0; }
    bool	 isOpen()	      const { return state() == IO_Open; }

    int		 status() const { return ioSt; }
    void	 resetqStatus()	{ ioSt = IO_Ok; }

    virtual bool open( int mode ) = 0;
    virtual void close() = 0;
    virtual void flush() = 0;

    virtual Offset size()  const = 0;
    virtual Offset at()  const;
    virtual bool at( Offset );
    virtual bool atEnd()  const;
    bool	 reset() { return at(0); }

    virtual TQ_LONG readBlock( char *data, TQ_ULONG maxlen ) = 0;
    virtual TQ_LONG writeBlock( const char *data, TQ_ULONG len ) = 0;
    virtual TQ_LONG readLine( char *data, TQ_ULONG maxlen );
    TQ_LONG writeBlock( const TQByteArray& data );
    virtual TQByteArray readAll();

    virtual int	 getch() = 0;
    virtual int	 putch( int ) = 0;
    virtual int	 ungetch( int ) = 0;

protected:
    void	 setFlags( int f ) { ioMode = f; }
    void	 setType( int );
    void	 setMode( int );
    void	 setState( int );
    void	 setqStatus( int );
    Offset	 ioIndex;

private:
    int		 ioMode;
    int		 ioSt;

private:	// Disabled copy constructor and operator=
#if defined(TQ_DISABLE_COPY)
    TQIODevice( const TQIODevice & );
    TQIODevice &operator=( const TQIODevice & );
#endif
};

#endif // USE_QT4

#endif // TQIODEVICE_H