comparison HuffmanSet.hpp @ 55:19b2a2d98788

Use define to multiplex between different types of decoders. Expand the API.
author Tom Fredrik Blenning Klaussen <bfg@blenning.no>
date Thu, 13 Sep 2012 23:47:29 +0200
parents f8d0ea827db3
children e5fa379d4030
comparison
equal deleted inserted replaced
54:f339499ecd79 55:19b2a2d98788
8 #include "BitArray.hpp" 8 #include "BitArray.hpp"
9 9
10 class BitDecoder; 10 class BitDecoder;
11 class FastBitDecoder; 11 class FastBitDecoder;
12 12
13 #define FASTENCODE 1
14
13 class HuffmanSet { 15 class HuffmanSet {
14 public: 16 public:
15 typedef uint key_t; 17 typedef uint key_t;
16 18
17 private: 19 private:
20 uint cutoff;
21 uint numInserts;
22 bool autoRebuild;
23
18 QMap<key_t, QString> newStrings; 24 QMap<key_t, QString> newStrings;
19 QMap<key_t, BitArray> map; 25 QMap<key_t, BitArray> map;
20 QMap<QString, BitArray> encoder; 26 QMap<QString, BitArray> encoder;
21 uint cutoff; 27 #if FASTENCODE
22 uint numInserts; 28 FastBitDecoder* lut;
23 //FastBitDecoder* lut; 29 #else
24 BitDecoder* lut; 30 BitDecoder* lut;
31 #endif //FASTENCODE
25 32
26 33
27 public: 34 public:
28 HuffmanSet(); 35 HuffmanSet();
36 ~HuffmanSet();
29 void setCutoff(uint cutoff); 37 void setCutoff(uint cutoff);
38 void setAutoRebuild(bool);
30 static QStringList chunks(const QString& str); 39 static QStringList chunks(const QString& str);
31 BitDecoder* createLut(const QMap<QString, uint>& freqTable); 40 BitDecoder* createLut(const QMap<QString, uint>& freqTable);
32 QString decode(const BitArray& bits) const; 41 QString decode(const BitArray& bits) const;
33 static BitArray encode(const QString& string, const QMap<QString, BitArray>& encoder); 42 static BitArray encode(const QString& string,
43 const QMap<QString, BitArray>& encoder);
44 void generateFreqTable(QMap<QString, uint>& freqTable) const;
45 QMap<QString, uint> generateFreqTable() const;
34 void rebuild(); 46 void rebuild();
35 bool contains(key_t key) const; 47 bool contains(key_t key) const;
36 uint totalElements() const; 48 uint totalElements() const;
37 key_t hash(const QString& str); 49 key_t hash(const QString& str);
38 key_t insert(const QString& str); 50 key_t insert(const QString& str);