annotate BitArray.hpp @ 47:b23f04d4a276

Test a custom BitArray.
author Tom Fredrik Blenning Klaussen <bfg@blenning.no>
date Mon, 10 Sep 2012 23:59:05 +0200
parents
children 725b0d776f3c
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
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
9 #define HIGH(B) ((B) >> 3)
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
10 #define LOW(B) ((B) & 0x07)
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
11
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
12 #define MASK(X) (0x1 << X)
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
13 #define SELECTMASK(X) (uchar(MASK(X)))
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
14 #define DESELECTMASK(X) (uchar(~MASK(X)))
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
15
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
16 #define NUMCHARS(X) HIGH(X + 7)
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 #include <cassert>
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 class QBitArray;
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
21 class BitArray
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
22 {
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
23 typedef unsigned char uchar;
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
24 typedef unsigned int uint;
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
25 uint size_;
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
26 unsigned char* bits;
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
27 public:
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
28 bool testBit(uint i) const
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
29 {
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
30 assert(i < size_);
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
31 return bits[HIGH(i)] & MASK(LOW(i));
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
32 }
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
33
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
34 void setBit(uint i, bool val)
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
35 {
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
36 assert(i < size_);
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
37 if (val) {
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
38 bits[HIGH(i)] |= SELECTMASK(LOW(i));
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
39 }
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
40 else {
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
41 bits[HIGH(i)] &= DESELECTMASK(LOW(i));
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
42 }
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
43 }
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
44
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
45 BitArray(uint size)
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
46 {
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
47 size_ = size;
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
48 bits = new uchar[NUMCHARS(size)];
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
49 }
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
50
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
51 BitArray(uint size, bool val) : size_(size), bits(new uchar[NUMCHARS(size)])
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 uint n = NUMCHARS(size);
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
54 for (uint i = 0; i < n; ++i) {
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
55 bits[i] = (val) ? 0xff : 0;
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 }
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 BitArray() : size_(0), bits(0)
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
60 {
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
61 }
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 uint size() const
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
64 {
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
65 return size_;
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 #endif
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 #endif //BITARRAY_HPP
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
71
b23f04d4a276 Test a custom BitArray.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
72