Mercurial > dedupe
annotate FastBitDecoder.hpp @ 57:c8111de2e0bb
Add functionality to decode directly from bitstring.
Use BitArrays getPaddedChar directly.
| author | Tom Fredrik Blenning Klaussen <bfg@blenning.no> |
|---|---|
| date | Thu, 13 Sep 2012 23:53:35 +0200 |
| parents | f8d0ea827db3 |
| children | b9515dc35fe4 |
| 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 |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
46
diff
changeset
|
4 #include "BitArray.hpp" |
|
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
46
diff
changeset
|
5 |
|
46
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
6 #include <QtCore/QString> |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
7 #include <QtCore/QMap> |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
8 |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
9 class FastBitDecoder { |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
10 static const size_t N = 256; |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
11 FastBitDecoder* decoder[N]; |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
12 unsigned char numBits[N]; |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
13 QString* data[N]; |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
14 |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
46
diff
changeset
|
15 static unsigned char getPaddedChar(const BitArray& bitArray, uint offset = 0); |
|
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
46
diff
changeset
|
16 static BitArray removeFirst(const BitArray& bits); |
|
46
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
17 |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
18 void fill(); |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
19 void blank(); |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
20 FastBitDecoder(); |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
46
diff
changeset
|
21 void insert(const BitArray& key, const QString& value); |
|
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
46
diff
changeset
|
22 uint decode(QString& resString, const BitArray& bits, uint offset) const; |
|
46
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
23 |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
24 public: |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
46
diff
changeset
|
25 FastBitDecoder(const QMap<QString, BitArray>& encoder); |
|
57
c8111de2e0bb
Add functionality to decode directly from bitstring.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
26 ~FastBitDecoder(); |
|
c8111de2e0bb
Add functionality to decode directly from bitstring.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
27 |
|
c8111de2e0bb
Add functionality to decode directly from bitstring.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
28 QString decode(const QString& bits) const; |
|
c8111de2e0bb
Add functionality to decode directly from bitstring.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
49
diff
changeset
|
29 |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
46
diff
changeset
|
30 QString decode(const BitArray& bits) const |
|
46
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
31 { |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
32 QString combined; |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
33 uint n = bits.size(); |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
34 //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
|
35 combined.reserve(n/4); |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
36 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
|
37 combined.squeeze(); |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
38 return combined; |
|
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 |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
41 |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
42 }; |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
43 |
|
877327e9061a
N-Tree for decoding.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
44 #endif //BITDECODER_HPP |
