comparison BitDecoder.hpp @ 49:f8d0ea827db3

Use BitArray.
author Tom Fredrik Blenning Klaussen <bfg@blenning.no>
date Mon, 10 Sep 2012 23:59:46 +0200
parents 41cc0d8ac77f
children b9515dc35fe4
comparison
equal deleted inserted replaced
48:ef429402e03b 49:f8d0ea827db3
1 #ifndef BITDECODER_HPP 1 #ifndef BITDECODER_HPP
2 #define BITDECODER_HPP 2 #define BITDECODER_HPP
3 3
4 #include <QtCore/QBitArray> 4 //#include <QtCore/QBitArray>
5 #include <QtCore/QMap> 5 #include <QtCore/QMap>
6 #include <QtCore/QString> 6 #include <QtCore/QString>
7
8 #include "BitArray.hpp"
7 9
8 class BitDecoder { 10 class BitDecoder {
9 BitDecoder* low; 11 BitDecoder* low;
10 BitDecoder* high; 12 BitDecoder* high;
11 QString _data; 13 QString _data;
12 14
13 private: 15 private:
14 BitDecoder(BitDecoder* low_in, BitDecoder* high_in); 16 BitDecoder(BitDecoder* low_in, BitDecoder* high_in);
15 17
16 uint decode(QString& resString, const QBitArray& bits, uint offset) const 18 uint decode(QString& resString, const BitArray& bits, uint offset) const
17 { 19 {
18 //Data is always stored in a leaf node. 20 //Data is always stored in a leaf node.
19 if (high) { 21 if (high) {
20 return (bits.testBit(offset) ? high : low)->decode(resString, bits, offset + 1) + 1; 22 return (bits.testBit(offset) ? high : low)->decode(resString, bits, offset + 1) + 1;
21 } 23 }
28 public: 30 public:
29 BitDecoder(const QString& d); 31 BitDecoder(const QString& d);
30 ~BitDecoder(); 32 ~BitDecoder();
31 const QString& data() const; 33 const QString& data() const;
32 34
33 QString decode(const QBitArray& bits) const 35 QString decode(const BitArray& bits) const
34 { 36 {
35 QString combined; 37 QString combined;
36 uint n = bits.size(); 38 uint n = bits.size();
37 //Just a qualified overestimate guess on what we will need. 39 //Just a qualified overestimate guess on what we will need.
38 combined.reserve(n/4); 40 combined.reserve(n/4);
41 return combined; 43 return combined;
42 } 44 }
43 QString decode(const QString& bits) const; 45 QString decode(const QString& bits) const;
44 46
45 static BitDecoder* merge(BitDecoder* low, BitDecoder* high); 47 static BitDecoder* merge(BitDecoder* low, BitDecoder* high);
46 static QBitArray bitsFromString(const QString& str); 48 static BitArray bitsFromString(const QString& str);
47 49
48 static QBitArray unite(const QBitArray& first, const QBitArray& second) 50 static BitArray unite(const BitArray& first, const BitArray& second)
49 { 51 {
50 int n = first.size(); 52 int n = first.size();
51 int n2 = second.size(); 53 int n2 = second.size();
52 QBitArray result(n + n2); 54 BitArray result(n + n2);
53 for (int i = 0; i < n; ++i) { 55 for (int i = 0; i < n; ++i) {
54 result.setBit(i, first.testBit(i)); 56 result.setBit(i, first.testBit(i));
55 } 57 }
56 for (int i = 0; i < n2; ++i) { 58 for (int i = 0; i < n2; ++i) {
57 result.setBit(n + i, second.testBit(i)); 59 result.setBit(n + i, second.testBit(i));
58 } 60 }
59 return result; 61 return result;
60 } 62 }
61 63
62 64
63 QMap<QString, QBitArray> createEncoder() const; 65 QMap<QString, BitArray> createEncoder() const;
64 }; 66 };
65 67
66 #endif //BITDECODER_HPP 68 #endif //BITDECODER_HPP