1 /**************************************************************************** 2 ** 3 ** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 4 ** All rights reserved. 5 ** Contact: Nokia Corporation (qt-info@nokia.com) 6 ** 7 ** This file is part of a Qt Solutions component. 8 ** 9 ** Commercial Usage 10 ** Licensees holding valid Qt Commercial licenses may use this file in 11 ** accordance with the Qt Solutions Commercial License Agreement provided 12 ** with the Software or, alternatively, in accordance with the terms 13 ** contained in a written agreement between you and Nokia. 14 ** 15 ** GNU Lesser General Public License Usage 16 ** Alternatively, this file may be used under the terms of the GNU Lesser 17 ** General Public License version 2.1 as published by the Free Software 18 ** Foundation and appearing in the file LICENSE.LGPL included in the 19 ** packaging of this file. Please review the following information to 20 ** ensure the GNU Lesser General Public License version 2.1 requirements 21 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. 22 ** 23 ** In addition, as a special exception, Nokia gives you certain 24 ** additional rights. These rights are described in the Nokia Qt LGPL 25 ** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this 26 ** package. 27 ** 28 ** GNU General Public License Usage 29 ** Alternatively, this file may be used under the terms of the GNU 30 ** General Public License version 3.0 as published by the Free Software 31 ** Foundation and appearing in the file LICENSE.GPL included in the 32 ** packaging of this file. Please review the following information to 33 ** ensure the GNU General Public License version 3.0 requirements will be 34 ** met: http://www.gnu.org/copyleft/gpl.html. 35 ** 36 ** Please note Third Party Software included with Qt Solutions may impose 37 ** additional restrictions and it is the user's responsibility to ensure 38 ** that they have met the licensing requirements of the GPL, LGPL, or Qt 39 ** Solutions Commercial license and the relevant license of the Third 40 ** Party Software they are using. 41 ** 42 ** If you are unsure which license is appropriate for your use, please 43 ** contact Nokia at qt-info@nokia.com. 44 ** 45 ****************************************************************************/ 46 47 #ifndef QTIOCOMPRESSOR_H 48 #define QTIOCOMPRESSOR_H 49 50 #include <QtCore/QIODevice> 51 52 #if defined(Q_OS_WIN) 53 # if !defined(QT_QTIOCOMPRESSOR_EXPORT) && !defined(QT_QTIOCOMPRESSOR_IMPORT) 54 # define QT_QTIOCOMPRESSOR_EXPORT 55 # elif defined(QT_QTIOCOMPRESSOR_IMPORT) 56 # if defined(QT_QTIOCOMPRESSOR_EXPORT) 57 # undef QT_QTIOCOMPRESSOR_EXPORT 58 # endif 59 # define QT_QTIOCOMPRESSOR_EXPORT __declspec(dllimport) 60 # elif defined(QT_QTIOCOMPRESSOR_EXPORT) 61 # undef QT_QTIOCOMPRESSOR_EXPORT 62 # define QT_QTIOCOMPRESSOR_EXPORT __declspec(dllexport) 63 # endif 64 #else 65 # define QT_QTIOCOMPRESSOR_EXPORT 66 #endif 67 68 class QtIOCompressorPrivate; 69 class QT_QTIOCOMPRESSOR_EXPORT QtIOCompressor : public QIODevice 70 { 71 Q_OBJECT 72 public: 73 enum StreamFormat { ZlibFormat, GzipFormat, RawZipFormat }; 74 QtIOCompressor(QIODevice *device, int compressionLevel = 6, int bufferSize = 65500); 75 ~QtIOCompressor(); 76 void setStreamFormat(StreamFormat format); 77 StreamFormat streamFormat() const; 78 static bool isGzipSupported(); 79 bool isSequential() const; 80 bool open(OpenMode mode); 81 void close(); 82 void flush(); 83 qint64 bytesAvailable() const; 84 protected: 85 qint64 readData(char * data, qint64 maxSize); 86 qint64 writeData(const char * data, qint64 maxSize); 87 private: 88 static bool checkGzipSupport(const char * const versionString); 89 QtIOCompressorPrivate *d_ptr; 90 Q_DECLARE_PRIVATE(QtIOCompressor) 91 Q_DISABLE_COPY(QtIOCompressor) 92 }; 93 94 #endif 95