Mercurial > dedupe
annotate FastBitDecoder.hpp @ 48:ef429402e03b
Compile BitArray.
| author | Tom Fredrik Blenning Klaussen <bfg@blenning.no> |
|---|---|
| date | Mon, 10 Sep 2012 23:59:25 +0200 |
| parents | 877327e9061a |
| children | f8d0ea827db3 |
| rev | line source |
|---|---|
|
46
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
1 #ifndef FASTBITDECODER_HPP |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
2 #define FASTBITDECODER_HPP |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
3 |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
4 #include <QtCore/QString> |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
5 #include <QtCore/QMap> |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
6 #include <QtCore/QBitArray> |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
7 |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
8 class FastBitDecoder { |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
9 static const size_t N = 256; |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
10 FastBitDecoder* decoder[N]; |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
11 unsigned char numBits[N]; |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
12 QString* data[N]; |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
13 |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
14 static unsigned char getPaddedChar(const QBitArray& bitArray, uint offset = 0); |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
15 static QBitArray removeFirst(const QBitArray& bits); |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
16 |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
17 void fill(); |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
18 void blank(); |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
19 FastBitDecoder(); |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
20 void insert(const QBitArray& key, const QString& value); |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
21 uint decode(QString& resString, const QBitArray& bits, uint offset) const; |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
22 |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
23 public: |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
24 FastBitDecoder(const QMap<QString, QBitArray>& encoder); |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
25 QString decode(const QBitArray& bits) const |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
26 { |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
27 QString combined; |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
28 uint n = bits.size(); |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
29 //Just a qualified overestimate guess on what we will need. |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
30 combined.reserve(n/4); |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
31 for (uint decodedBits = 0; decodedBits < n; decodedBits += decode(combined, bits, decodedBits)); |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
32 combined.squeeze(); |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
33 return combined; |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
34 } |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
35 QString decode(const QString& bits) const; |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
36 |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
37 |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
38 }; |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
39 |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
40 #endif //BITDECODER_HPP |
