annotate BitArray.hpp @ 52:725b0d776f3c

Fix a lot of problems with BitArray and reorganize which functions are located in header and file.
author Tom Fredrik Blenning Klaussen <bfg@blenning.no>
date Thu, 13 Sep 2012 23:23:14 +0200
parents b23f04d4a276
children f339499ecd79
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
1 #ifndef BITARRAY_HPP
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
2 #define BITARRAY_HPP
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
3
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
4
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
5 #if 0
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
6 #include <QtCore/QBitArray>
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
7 typedef QBitArray BitArray;
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
8 #else
52
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
9 #include <ostream>
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
10
47
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
11 #define HIGH(B) ((B) >> 3)
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
12 #define LOW(B) ((B) & 0x07)
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
13
52
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
14 #define MASK(X) (0x1 << (7 - X))
47
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
15 #define SELECTMASK(X) (uchar(MASK(X)))
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
16 #define DESELECTMASK(X) (uchar(~MASK(X)))
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
17
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
18 #define NUMCHARS(X) HIGH(X + 7)
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
19
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
20 #include <cassert>
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
21
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
22 class QBitArray;
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
23 class BitArray
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
24 {
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
25 typedef unsigned char uchar;
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
26 typedef unsigned int uint;
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
27 uint size_;
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
28 unsigned char* bits;
52
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
29
47
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
30 public:
52
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
31 BitArray(uint size, bool val) : size_(size), bits(new uchar[NUMCHARS(size)])
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
32 {
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
33 uint n = NUMCHARS(size);
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
34 for (uint i = 0; i < n; ++i) {
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
35 bits[i] = (val) ? 0xff : 0;
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
36 }
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
37 }
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
38
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
39 BitArray(uint size) : size_(size), bits(new uchar[NUMCHARS(size)])
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
40 {
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
41 bits[NUMCHARS(size) - 1] = 0;
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
42 }
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
43
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
44 BitArray() : size_(0), bits(0)
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
45 {
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
46 }
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
47
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
48 BitArray(const BitArray& );
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
49
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
50 ~BitArray();
47
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
51 bool testBit(uint i) const
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
52 {
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
53 assert(i < size_);
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
54 return bits[HIGH(i)] & MASK(LOW(i));
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
55 }
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
56
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
57 void setBit(uint i, bool val)
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
58 {
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
59 assert(i < size_);
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
60 if (val) {
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
61 bits[HIGH(i)] |= SELECTMASK(LOW(i));
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
62 }
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
63 else {
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
64 bits[HIGH(i)] &= DESELECTMASK(LOW(i));
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
65 }
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
66 }
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
67
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
68 uint size() const
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
69 {
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
70 return size_;
52
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
71 }
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
72
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
73 uchar getPaddedChar(size_t offset = 0) const
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
74 {
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
75 assert(size_ > 0);
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
76 assert(HIGH(offset) < NUMCHARS(size_));
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
77 if (LOW(offset) == 0)
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
78 return bits[HIGH(offset)];
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
79
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
80 uchar next = ((HIGH(offset) + 1) < NUMCHARS(size_)) ?
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
81 bits[HIGH(offset) + 1] : 0;
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
82 return ((bits[HIGH(offset)] << 8) | next) >> (8 - LOW(offset));
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
83 }
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
84
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
85
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
86 bool operator==(const BitArray& rhs) const;
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
87 BitArray& operator=(const BitArray& rhs);
47
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
88 };
52
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
89
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
90 std::ostream& operator<<(std::ostream& out, const BitArray& rhs);
725b0d776f3c Fix a lot of problems with BitArray and reorganize which functions are
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 47
diff changeset
91
47
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
92 #endif
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
93
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
94 #endif //BITARRAY_HPP