toolsandutils/e32tools/compress/byte_pair.h
changeset 0 83f4b4db085c
child 1 d4b442d23379
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolsandutils/e32tools/compress/byte_pair.h	Tue Feb 02 01:39:43 2010 +0200
@@ -0,0 +1,82 @@
+// Copyright (c) 2005-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:
+//
+
+#ifndef BYTE_PAIR_H
+#define BYTE_PAIR_H
+
+#ifdef __VC32__
+#ifdef __MSVCDOTNET__
+#include <strstream>
+#include <iomanip>
+#else //!__MSVCDOTNET__
+#include <strstrea.h>
+#include <iomanip.h>
+#endif //__MSVCDOTNET__
+#else // !__VC32__
+#ifdef __TOOLS2__ 
+#include <sstream>
+#include <iomanip>
+using namespace std;
+#else
+#include <strstream.h>
+#include <iomanip.h>
+#endif
+#endif // __VC32__
+
+
+
+#include <e32cmn.h>
+const TInt MaxBlockSize = 0x1000;
+class CBytePair {
+    private:
+        TBool iFastCompress;
+        TUint16 PairCount[0x10000];
+        TUint16 PairBuffer[MaxBlockSize*2];
+        TInt PairsFound;
+
+        TUint16 GlobalPairs[0x10000];
+        TUint16 GlobalTokenCounts[0x100];
+
+        TUint16 ByteCount[0x100+4];
+
+        void CountBytes(TUint8* data, TInt size) {
+            memset(ByteCount,0,sizeof(ByteCount));
+            TUint8* dataEnd = data+size;
+            while(data<dataEnd)
+                ++ByteCount[*data++];
+        }
+        inline void ByteUsed(TInt b) {
+            ByteCount[b] = 0xffff;
+        }
+        int TieBreak(int b1,int b2) {
+            return -ByteCount[b1]-ByteCount[b2];
+        }
+
+        void InitPairCount(TUint8* data, TInt size, TInt minFrequency, TInt marker);
+        TInt MostCommonPair(TInt& pair);
+        TInt LeastCommonByte(TInt& byte);
+    public:
+        CBytePair(TBool fastCompress) {
+            iFastCompress = fastCompress;
+            memset(GlobalPairs,0,sizeof(GlobalPairs));
+            memset(GlobalTokenCounts,0,sizeof(GlobalTokenCounts));
+        }
+        TInt Compress(TUint8* dst, TUint8* src, TInt size);
+        TInt Decompress(TUint8* dst, TInt dstSize, TUint8* src, TInt srcSize, TUint8*& srcNext);
+};
+TInt BytePairCompress(TUint8* dst, TUint8* src, TInt size, CBytePair *aBPE);
+
+#endif
+