Mercurial > dedupe
annotate HuffmanSet.hpp @ 67:2f45385195ae
Choose between static and dynamic compilation.
| author | Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no> |
|---|---|
| date | Sun, 23 Dec 2012 22:08:32 +0100 |
| parents | e5fa379d4030 |
| children |
| 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 |
|
61
e5fa379d4030
Clean up headers.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
55
diff
changeset
|
6 class BitArray; |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
40
diff
changeset
|
7 class BitDecoder; |
|
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
40
diff
changeset
|
8 class FastBitDecoder; |
|
61
e5fa379d4030
Clean up headers.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
55
diff
changeset
|
9 class QStringList; |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
40
diff
changeset
|
10 |
|
55
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
11 #define FASTENCODE 1 |
|
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
12 |
|
21
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
13 class HuffmanSet { |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
14 public: |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
15 typedef uint key_t; |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
16 |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
17 private: |
|
55
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
18 uint cutoff; |
|
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
19 uint numInserts; |
|
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
20 bool autoRebuild; |
|
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
21 |
|
21
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
22 QMap<key_t, QString> newStrings; |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
40
diff
changeset
|
23 QMap<key_t, BitArray> map; |
|
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
40
diff
changeset
|
24 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
|
25 #if FASTENCODE |
|
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
26 FastBitDecoder* lut; |
|
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
27 #else |
|
21
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
28 BitDecoder* lut; |
|
55
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
29 #endif //FASTENCODE |
|
21
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
30 |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
31 |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
32 public: |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
33 HuffmanSet(); |
|
55
19b2a2d98788
Use define to multiplex between different types of decoders.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
34 ~HuffmanSet(); |
|
21
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
35 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
|
36 void setAutoRebuild(bool); |
|
21
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
37 static QStringList chunks(const QString& str); |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
38 BitDecoder* createLut(const QMap<QString, uint>& freqTable); |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
40
diff
changeset
|
39 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
|
40 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
|
41 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
|
42 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
|
43 QMap<QString, uint> generateFreqTable() const; |
|
21
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
44 void rebuild(); |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
45 bool contains(key_t key) const; |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
46 uint totalElements() const; |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
47 key_t hash(const QString& str); |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
48 key_t insert(const QString& str); |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
49 QString value(key_t key) const; |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
50 }; |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
51 |
|
3bcdb8bb6914
Huffman representations.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
52 #endif //HUFFMANSET_HPP |
