williamr@2: // Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@2: // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // EZLib: COMPRESSOR.H williamr@2: // Declaration for Compression class williamr@2: // williamr@2: // williamr@2: williamr@2: #ifndef __EZCOMPRESSOR_H__ williamr@2: #define __EZCOMPRESSOR_H__ williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: /** williamr@2: The CEZCompressor class provides in-memory compression functions, including integrity checks of the uncompressed data. williamr@2: This version of the library supports only one compression method (deflation). Compression can be done in a single step williamr@2: (using CompressL()) if the buffers are large enough (for example if an input file is mmap'ed), or can be done by repeated calls williamr@2: of the DeflateL() function. The source data is compressed to the target buffer (both source and target contained within williamr@2: the buffer manager argument), and various other arguments distinguish the different compression settings. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class CEZCompressor : public CEZZStream williamr@2: { williamr@2: public: williamr@2: /** Compression strategy - used to tune the compression algorithm */ williamr@2: enum TStrategy williamr@2: { williamr@2: /** Use for normal data */ williamr@2: EDefaultStrategy = Z_DEFAULT_STRATEGY, williamr@2: williamr@2: /** Force Huffman encoding only (no string match) */ williamr@2: EFiltered = Z_FILTERED, williamr@2: williamr@2: /** Use for data produced by a filter (or predictor) */ williamr@2: EHuffmanOnly = Z_HUFFMAN_ONLY williamr@2: }; williamr@2: williamr@2: /** Compression levels */ williamr@2: enum williamr@2: { williamr@2: EDefaultCompression = Z_DEFAULT_COMPRESSION, williamr@2: ENoCompression = Z_NO_COMPRESSION, williamr@2: EBestSpeed = Z_BEST_SPEED, williamr@2: EBestCompression = Z_BEST_COMPRESSION williamr@2: }; williamr@2: williamr@2: /** Window Bits - the base two logarithm of the window size (the size of the history buffer) */ williamr@2: enum williamr@2: { williamr@2: EMaxWBits = MAX_WBITS williamr@2: }; williamr@2: williamr@2: /** Memory level - specifies how much memory should be allocated for the internal compression state */ williamr@2: enum williamr@2: { williamr@2: EDefMemLevel = MAX_MEM_LEVEL williamr@2: }; williamr@2: williamr@2: /** Compression panic values */ williamr@2: enum williamr@2: { williamr@2: EDeflateInitlialiserError = EUnexpected + 1, williamr@2: EDeflateTerminated williamr@2: }; williamr@2: williamr@2: public: williamr@2: ~CEZCompressor(); williamr@2: williamr@2: IMPORT_C static CEZCompressor* NewLC(MEZBufferManager& aInit, TInt aLevel = EDefaultCompression, williamr@2: TInt aWindowBits = EMaxWBits, TInt aMemLevel = EDefMemLevel, TStrategy aStrategy = EDefaultStrategy); williamr@2: IMPORT_C static CEZCompressor* NewL(MEZBufferManager& aInit, TInt aLevel = EDefaultCompression, williamr@2: TInt aWindowBits = EMaxWBits, TInt aMemLevel = EDefMemLevel, TStrategy aStrategy = EDefaultStrategy); williamr@2: IMPORT_C static CEZCompressor* NewLC(MEZBufferManager& aInit, const TDesC8 &aDictionary, williamr@2: TInt aLevel = EDefaultCompression, TInt aWindowBits = EMaxWBits, TInt aMemLevel = EDefMemLevel, williamr@2: TStrategy aStrategy = EDefaultStrategy); williamr@2: IMPORT_C static CEZCompressor* NewL(MEZBufferManager& aInit, const TDesC8 &aDictionary, williamr@2: TInt aLevel = EDefaultCompression, TInt aWindowBits = EMaxWBits, TInt aMemLevel = EDefMemLevel, williamr@2: TStrategy aStrategy = EDefaultStrategy); williamr@2: williamr@2: IMPORT_C void ResetL(MEZBufferManager& aInit); williamr@2: williamr@2: IMPORT_C TBool DeflateL(); williamr@2: williamr@2: IMPORT_C static void CompressL(TDes8 &aDestination, const TDesC8 &aSource, TInt aLevel = EDefaultCompression); williamr@2: williamr@2: private: williamr@2: enum TDeflationState williamr@2: { williamr@2: ENoFlush, williamr@2: EFinish, williamr@2: EFinalize, williamr@2: ETerminated williamr@2: }; williamr@2: williamr@2: private: williamr@2: CEZCompressor(MEZBufferManager* aInit); williamr@2: void ConstructL(TInt aLevel, const TUint8* aDictionary, TInt aLength, TInt aWindowBits, TInt aMemLevel, TStrategy aStrategy); williamr@2: void ConstructL(TInt aLevel, TInt aWindowBits, TInt aMemLevel, TStrategy aStrategy); williamr@2: williamr@2: private: williamr@2: MEZBufferManager* iBufferInit; williamr@2: TDeflationState iDeflationState; williamr@2: }; williamr@2: williamr@2: #endif