Mercurial > dedupe
annotate BitDecoder.cpp @ 60:60c1e0a2cacf
Fix compile problem.
| author | Tom Fredrik Blenning Klaussen <bfg@blenning.no> |
|---|---|
| date | Fri, 14 Sep 2012 20:23:45 +0200 |
| parents | f8d0ea827db3 |
| children | b9515dc35fe4 |
| rev | line source |
|---|---|
|
27
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
1 #include "BitDecoder.hpp" |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
2 |
|
45
41cc0d8ac77f
Decode directly from bitString.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
27
diff
changeset
|
3 #include "Exception/InvalidDataException.hpp" |
|
41cc0d8ac77f
Decode directly from bitString.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
27
diff
changeset
|
4 |
|
27
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
5 BitDecoder::BitDecoder(BitDecoder* low_in, BitDecoder* high_in) : low(low_in), high(high_in) |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
6 { |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
7 } |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
8 |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
9 BitDecoder::BitDecoder(const QString& d) : low(0), high(0), _data(d) |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
10 { |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
11 } |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
12 |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
13 BitDecoder::~BitDecoder() |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
14 { |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
15 delete low; |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
16 delete high; |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
17 } |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
18 |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
19 const QString& BitDecoder::data() const |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
20 { |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
21 return _data; |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
22 } |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
23 |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
24 BitDecoder* BitDecoder::merge(BitDecoder* low, BitDecoder* high) |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
25 { |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
26 return new BitDecoder(low, high); |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
27 } |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
28 |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
29 /* |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
30 QBitArray BitDecoder::unite(const QBitArray& first, const QBitArray& second) |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
31 { |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
32 QBitArray result(first.size() + second.size()); |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
33 int n = first.size(); |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
34 for (int i = 0; i < n; ++i) { |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
35 result[i] = first[i]; |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
36 } |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
37 for (int i = 0; i < second.size(); ++i) { |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
38 result[n + i] = second[i]; |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
39 } |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
40 return result; |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
41 } |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
42 */ |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
43 |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
45
diff
changeset
|
44 QMap<QString, BitArray> BitDecoder::createEncoder() const |
|
27
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
45 { |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
45
diff
changeset
|
46 QMap<QString, BitArray> retVal; |
|
27
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
47 if (!_data.isNull()) { |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
45
diff
changeset
|
48 retVal.insert(_data, BitArray()); |
|
27
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
49 } |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
50 if (low) { |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
45
diff
changeset
|
51 QMap<QString, BitArray> vals = low->createEncoder(); |
|
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
45
diff
changeset
|
52 for(QMap<QString, BitArray>::const_iterator it = vals.begin(); |
|
27
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
53 it != vals.end(); ++it) { |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
45
diff
changeset
|
54 retVal.insert(it.key(), unite(BitArray(1, false), it.value())); |
|
27
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
55 } |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
56 } |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
57 if (high) { |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
45
diff
changeset
|
58 QMap<QString, BitArray> vals = high->createEncoder(); |
|
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
45
diff
changeset
|
59 for(QMap<QString, BitArray>::const_iterator it = vals.begin(); |
|
27
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
60 it != vals.end(); ++it) { |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
45
diff
changeset
|
61 retVal.insert(it.key(), unite(BitArray(1, true), it.value())); |
|
27
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
62 } |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
63 } |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
64 return retVal; |
|
95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
65 } |
|
45
41cc0d8ac77f
Decode directly from bitString.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
27
diff
changeset
|
66 |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
45
diff
changeset
|
67 BitArray BitDecoder::bitsFromString(const QString& str) |
|
45
41cc0d8ac77f
Decode directly from bitString.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
27
diff
changeset
|
68 { |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
45
diff
changeset
|
69 BitArray bits(str.size()); |
|
45
41cc0d8ac77f
Decode directly from bitString.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
27
diff
changeset
|
70 for (int i = 0; i < str.size(); ++i) { |
|
41cc0d8ac77f
Decode directly from bitString.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
27
diff
changeset
|
71 if (str[i] == '1') |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
45
diff
changeset
|
72 bits.setBit(i, true); |
|
45
41cc0d8ac77f
Decode directly from bitString.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
27
diff
changeset
|
73 else if (str[i] == '0') |
|
49
f8d0ea827db3
Use BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
45
diff
changeset
|
74 bits.setBit(i, false); |
|
45
41cc0d8ac77f
Decode directly from bitString.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
27
diff
changeset
|
75 else |
|
41cc0d8ac77f
Decode directly from bitString.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
27
diff
changeset
|
76 throw InvalidDataException(); |
|
41cc0d8ac77f
Decode directly from bitString.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
27
diff
changeset
|
77 } |
|
41cc0d8ac77f
Decode directly from bitString.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
27
diff
changeset
|
78 return bits; |
|
41cc0d8ac77f
Decode directly from bitString.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
27
diff
changeset
|
79 } |
|
41cc0d8ac77f
Decode directly from bitString.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
27
diff
changeset
|
80 |
|
41cc0d8ac77f
Decode directly from bitString.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
27
diff
changeset
|
81 QString BitDecoder::decode(const QString& bits) const |
|
41cc0d8ac77f
Decode directly from bitString.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
27
diff
changeset
|
82 { |
|
41cc0d8ac77f
Decode directly from bitString.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
27
diff
changeset
|
83 return decode(bitsFromString(bits)); |
|
41cc0d8ac77f
Decode directly from bitString.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
27
diff
changeset
|
84 } |
