diff -r 3141a18cb091 -r 863e2b34c16d e32tools/e32lib/e32image/deflate/huffman.h --- a/e32tools/e32lib/e32image/deflate/huffman.h Thu Nov 04 09:25:46 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,140 +0,0 @@ -// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). -// All rights reserved. -// This component and the accompanying materials are made available -// under the terms of "Eclipse Public License v1.0" -// which accompanies this distribution, and is available -// at the URL "http://www.eclipse.org/legal/epl-v10.html". -// -// Initial Contributors: -// Nokia Corporation - initial contribution. -// -// Contributors: -// -// Description: -// e32tools\petran\Szip\huffman.h -// -// - -#ifndef __HUFFMAN_H__ -#define __HUFFMAN_H__ - -#include - -/** Bit output stream. - Good for writing bit streams for packed, compressed or huffman data algorithms. - - This class must be derived from and OverflowL() reimplemented if the bitstream data - cannot be generated into a single memory buffer. - - @since 8.0 - @library euser.lib -*/ -class TBitOutput - { -public: - TBitOutput(); - TBitOutput(TUint8* aBuf,TInt aSize); - inline virtual ~TBitOutput() { } - inline void Set(TUint8* aBuf,TInt aSize); - inline const TUint8* Ptr() const; - inline TInt BufferedBits() const; -// - void WriteL(TUint aValue, TInt aLength); - void HuffmanL(TUint aHuffCode); - void PadL(TUint aPadding); -private: - void DoWriteL(TUint aBits, TInt aSize); - virtual void OverflowL(); -private: - TUint iCode; // code in production - TInt iBits; - TUint8* iPtr; - TUint8* iEnd; - }; - -/** Set the memory buffer to use for output - - Data will be written to this buffer until it is full, at which point OverflowL() will - be called. This should handle the data and then can Set() again to reset the buffer - for further output. - - @param "TUint8* aBuf" The buffer for output - @param "TInt aSize" The size of the buffer in bytes -*/ -inline void TBitOutput::Set(TUint8* aBuf,TInt aSize) - {iPtr=aBuf;iEnd=aBuf+aSize;} -/** Get the current write position in the output buffer - - In conjunction with the address of the buffer, which should be known to the - caller, this describes the data in the bitstream. -*/ -inline const TUint8* TBitOutput::Ptr() const - {return iPtr;} -/** Get the number of bits that are buffered - - This reports the number of bits that have not yet been written into the - output buffer. It will always lie in the range 0..7. Use PadL() to - pad the data out to the next byte and write it to the buffer. -*/ -inline TInt TBitOutput::BufferedBits() const - {return iBits+8;} - - -/** Bit input stream. - Good for reading bit streams for packed, compressed or huffman data algorithms. - @since 8.0 - @library euser.lib -*/ -class TBitInput - { -public: - TBitInput(); - TBitInput(const TUint8* aPtr, TInt aLength, TInt aOffset=0); - void Set(const TUint8* aPtr, TInt aLength, TInt aOffset=0); - inline virtual ~TBitInput() { } - TUint ReadL(); - TUint ReadL(TInt aSize); - TUint HuffmanL(const TUint32* aTree); -private: - virtual void UnderflowL(); -private: - TInt iCount; - TUint iBits; - TInt iRemain; - const TUint32* iPtr; - }; - -/** Huffman code toolkit. - - This class builds a huffman encoding from a frequency table and builds - a decoding tree from a code-lengths table - - The encoding generated is based on the rule that given two symbols s1 and s2, with - code length l1 and l2, and huffman codes h1 and h2: - - if l1