File: BitArray.h

package info (click to toggle)
jazz2-native 3.5.0-2
  • links: PTS, VCS
  • area: contrib
  • in suites: forky, sid
  • size: 16,912 kB
  • sloc: cpp: 172,557; xml: 113; python: 36; makefile: 5; sh: 2
file content (85 lines) | stat: -rw-r--r-- 1,933 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#pragma once

#include "../../Main.h"

#include <Containers/Tags.h>

using namespace Death::Containers;

namespace nCine
{
	class BitArray;

	/** @brief Index in a bit array */
	class BitArrayIndex
	{
	public:
		BitArrayIndex(BitArray* array, std::size_t bit);

		void operator=(bool value);

	private:
		BitArray* _bitArray;
		std::size_t _bit;
	};

	/** @brief Bit array */
	class BitArray
	{
	public:
		BitArray();
		BitArray(ValueInitT, std::size_t sizeInBits);
		BitArray(NoInitT, std::size_t sizeInBits);
		~BitArray();

		BitArray(const BitArray&) = delete;
		BitArray& operator=(const BitArray&) = delete;
		BitArray(BitArray&& other) noexcept;
		BitArray& operator=(BitArray&& other) noexcept;

		char* data() { return _data; }

		bool empty() const { return !_size; }
		std::size_t size() const { return _size; };
		std::size_t sizeInBytes() const;

		void resize(ValueInitT, std::size_t sizeInBits);
		void resize(NoInitT, std::size_t sizeInBits);

		void setAll();
		void resetAll();
		void set(std::size_t bit);
		void set(std::size_t bit, bool value);
		void reset(std::size_t bit);

		BitArrayIndex operator()(const std::size_t bit);

		bool operator[](std::size_t bit) const;
		bool operator==(const BitArray& other) const;

		BitArray operator&(const BitArray& other) const;
		BitArray operator^(const BitArray& other) const;
		BitArray operator|(const BitArray& other) const;
		BitArray operator~() const;

		BitArray operator<<(std::size_t count) const;
		BitArray operator>>(std::size_t count) const;

		BitArray& operator++();
		BitArray& operator++(int);
		BitArray& operator--();
		BitArray& operator--(int);

		BitArray& operator&=(const BitArray& src);
		BitArray& operator^=(const BitArray& src);
		BitArray& operator|=(const BitArray& src);
		BitArray& notAll();

		BitArray& operator<<=(std::size_t shifts);
		BitArray& operator>>=(std::size_t shifts);

	private:
		char* _data;
		std::size_t _size;
	};
}