Eneboo - Documentación para desarrolladores
|
00001 /**************************************************************************** 00002 ** $Id: qt/qasyncio.h 3.3.8 edited Jan 11 14:38 $ 00003 ** 00004 ** Definition of asynchronous I/O classes 00005 ** 00006 ** Created : 970617 00007 ** 00008 ** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved. 00009 ** 00010 ** This file is part of the kernel module of the Qt GUI Toolkit. 00011 ** 00012 ** This file may be distributed under the terms of the Q Public License 00013 ** as defined by Trolltech ASA of Norway and appearing in the file 00014 ** LICENSE.QPL included in the packaging of this file. 00015 ** 00016 ** This file may be distributed and/or modified under the terms of the 00017 ** GNU General Public License version 2 as published by the Free Software 00018 ** Foundation and appearing in the file LICENSE.GPL included in the 00019 ** packaging of this file. 00020 ** 00021 ** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition 00022 ** licenses may use this file in accordance with the Qt Commercial License 00023 ** Agreement provided with the Software. 00024 ** 00025 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 00026 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 00027 ** 00028 ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for 00029 ** information about Qt Commercial License Agreements. 00030 ** See http://www.trolltech.com/qpl/ for QPL licensing information. 00031 ** See http://www.trolltech.com/gpl/ for GPL licensing information. 00032 ** 00033 ** Contact info@trolltech.com if any conditions of this licensing are 00034 ** not clear to you. 00035 ** 00036 **********************************************************************/ 00037 00038 #ifndef QASYNCIO_H 00039 #define QASYNCIO_H 00040 00041 #ifndef QT_H 00042 #include "qobject.h" 00043 #include "qsignal.h" 00044 #include "qtimer.h" 00045 #endif // QT_H 00046 00047 #ifndef QT_NO_ASYNC_IO 00048 00049 class QIODevice; 00050 00051 class Q_EXPORT QAsyncIO { 00052 public: 00053 virtual ~QAsyncIO(); 00054 void connect(QObject*, const char *member); 00055 00056 protected: 00057 void ready(); 00058 00059 private: 00060 QSignal signal; 00061 }; 00062 00063 class Q_EXPORT QDataSink : public QAsyncIO { 00064 public: 00065 // Call this to know how much I can take. 00066 virtual int readyToReceive()=0; 00067 virtual void receive(const uchar*, int count)=0; 00068 virtual void eof()=0; 00069 void maybeReady(); 00070 }; 00071 00072 class Q_EXPORT QDataSource : public QAsyncIO { 00073 public: 00074 virtual int readyToSend()=0; // returns -1 when never any more ready 00075 virtual void sendTo(QDataSink*, int count)=0; 00076 void maybeReady(); 00077 00078 virtual bool rewindable() const; 00079 virtual void enableRewind(bool); 00080 virtual void rewind(); 00081 }; 00082 00083 class Q_EXPORT QIODeviceSource : public QDataSource { 00084 const int buf_size; 00085 uchar *buffer; 00086 QIODevice* iod; 00087 bool rew; 00088 00089 public: 00090 QIODeviceSource(QIODevice*, int bufsize=4096); 00091 ~QIODeviceSource(); 00092 00093 int readyToSend(); 00094 void sendTo(QDataSink* sink, int n); 00095 bool rewindable() const; 00096 void enableRewind(bool on); 00097 void rewind(); 00098 }; 00099 00100 class Q_EXPORT QDataPump : public QObject { 00101 Q_OBJECT 00102 int interval; 00103 QTimer timer; 00104 QDataSource* source; 00105 QDataSink* sink; 00106 00107 public: 00108 QDataPump(QDataSource*, QDataSink*); 00109 00110 private slots: 00111 void kickStart(); 00112 void tryToPump(); 00113 }; 00114 00115 #endif // QT_NO_ASYNC_IO 00116 00117 #endif