ScummVM API documentation
bitarray.h
1/* ScummVM - Graphic Adventure Engine
2 *
3 * ScummVM is the legal property of its developers, whose names
4 * are too numerous to list here. Please refer to the COPYRIGHT
5 * file distributed with this source distribution.
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 *
20 */
21
22#ifndef COMMON_BITARRAY_H
23#define COMMON_BITARRAY_H
24
25#include "common/scummsys.h"
26
27namespace Common {
28
29class BitArray {
30public:
31 BitArray() {
32 _bitcount = 0;
33 _bits = nullptr;
34 }
35
36 explicit BitArray(uint bitcount) {
37 _bits = nullptr;
38 set_size(bitcount);
39 }
40
41 ~BitArray() {
42 free(_bits);
43 }
44
45 void set_size(uint bitcount) {
46 free(_bits);
47 _bitcount = bitcount;
48 _bits = (byte*)malloc((bitcount + 7) / 8);
49 clear();
50 }
51 void set_bits(const byte *bits) {
52 memcpy(_bits, bits, (_bitcount + 7) / 8);
53 }
54
55 void clear() {
56 memset(_bits, 0, (_bitcount + 7) / 8);
57 }
58
59 void set(uint bit) {
60 _bits[bit / 8] |= (1 << (bit % 8));
61 }
62
63 void unset(uint bit) {
64 _bits[bit / 8] &= ~(1 << (bit % 8));
65 }
66
67 bool get(uint bit) const {
68 return _bits[bit / 8] & (1 << (bit % 8));
69 }
70
71 uint size() const {
72 return _bitcount;
73 }
74private:
75 uint _bitcount;
76 byte *_bits;
77};
78
79} // End of namespace Common
80
81#endif
Definition: bitarray.h:29
Definition: algorithm.h:29