Mercurial > dedupe
annotate HuffmanSet.hpp @ 56:76846cb92b5c
Clean up at exit.
Add getSet function.
| author | Tom Fredrik Blenning Klaussen <bfg@blenning.no> |
|---|---|
| date | Thu, 13 Sep 2012 23:49:18 +0200 |
| parents | 19b2a2d98788 |
| children | e5fa379d4030 |
| rev | line source |
|---|---|
|
21
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
1 #ifndef HUFFMANSET_HPP |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
2 #define HUFFMANSET_HPP |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
3 |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
4 #include <QtCore/QMap> |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
5 #include <QtCore/QString> |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
6 #include <QtCore/QStringList> |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
7 |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
40
diff
changeset
|
8 #include "BitArray.hpp" |
|
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
40
diff
changeset
|
9 |
|
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
40
diff
changeset
|
10 class BitDecoder; |
|
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
40
diff
changeset
|
11 class FastBitDecoder; |
|
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
40
diff
changeset
|
12 |
|
55
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
13 #define FASTENCODE 1 |
|
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
14 |
|
21
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
15 class HuffmanSet { |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
16 public: |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
17 typedef uint key_t; |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
18 |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
19 private: |
|
55
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
20 uint cutoff; |
|
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
21 uint numInserts; |
|
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
22 bool autoRebuild; |
|
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
23 |
|
21
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
24 QMap<key_t, QString> newStrings; |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
40
diff
changeset
|
25 QMap<key_t, BitArray> map; |
|
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
40
diff
changeset
|
26 QMap<QString, BitArray> encoder; |
|
55
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
27 #if FASTENCODE |
|
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
28 FastBitDecoder* lut; |
|
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
29 #else |
|
21
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
30 BitDecoder* lut; |
|
55
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
31 #endif //FASTENCODE |
|
21
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
32 |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
33 |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
34 public: |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
35 HuffmanSet(); |
|
55
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
36 ~HuffmanSet(); |
|
21
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
37 void setCutoff(uint cutoff); |
|
55
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
38 void setAutoRebuild(bool); |
|
21
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
39 static QStringList chunks(const QString& str); |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
40 BitDecoder* createLut(const QMap<QString, uint>& freqTable); |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
40
diff
changeset
|
41 QString decode(const BitArray& bits) const; |
|
55
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
42 static BitArray encode(const QString& string, |
|
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
43 const QMap<QString, BitArray>& encoder); |
|
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
44 void generateFreqTable(QMap<QString, uint>& freqTable) const; |
|
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
45 QMap<QString, uint> generateFreqTable() const; |
|
21
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
46 void rebuild(); |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
47 bool contains(key_t key) const; |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
48 uint totalElements() const; |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
49 key_t hash(const QString& str); |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
50 key_t insert(const QString& str); |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
51 QString value(key_t key) const; |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
52 }; |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
53 |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
54 #endif //HUFFMANSET_HPP |
