Scanframe Modular Application 0.1.0
Loading...
Searching...
No Matches
TBitSet.h
Go to the documentation of this file.
1#pragma once
2#include <climits>
3#include <misc/gen/TSet.h>
4
5namespace sf
6{
7
13template<size_t _size>
15{
16 public:
20 TBitSet();
21
25 bool has(int bit);
26
30 void set(int bit);
31
35 void reset(int bit);
36
40 void clear();
41
45 bool isClear();
46
47 private:
51 int _mask[_size / sizeof(int) + 1]{};
52};
53
54template<size_t Size>
56{
57 (void) Size;
58 clear();
59}
60
61template<size_t Size>
62inline bool TBitSet<Size>::has(int bit)
63{
64 if (bit < Size && bit >= 0)
65 {
66 return (_mask[bit / (sizeof(int) * CHAR_BIT)] & (1 << (bit % (sizeof(int) * CHAR_BIT))));
67 }
68 return false;
69}
70
71template<size_t Size>
72inline void TBitSet<Size>::set(int bit)
73{
74 if (bit < Size && bit >= 0)
75 {
76 _mask[bit / (sizeof(int) * CHAR_BIT)] |= (1 << (bit % (sizeof(int) * CHAR_BIT)));
77 }
78}
79
80template<size_t Size>
81inline void TBitSet<Size>::reset(int bit)
82{
83 if (bit < Size && bit >= 0)
84 {
85 _mask[bit / (sizeof(int) * CHAR_BIT)] &= ~(1 << (bit % (sizeof(int) * CHAR_BIT)));
86 }
87}
88
89template<size_t Size>
91{
92 (void) Size;
93 memset(&_mask, 0, sizeof(_mask));
94}
95
96template<size_t Size>
98{
99 (void) Size;
100 for (size_t i = 0; i < sizeof(_mask) / sizeof(int); i++)
101 {
102 if (_mask[i])
103 {
104 return false;
105 }
106 }
107 return true;
108}
109
110}// namespace sf
Template for creating large memory inexpensive bitmasks or bit sets.
Definition TBitSet.h:15
TBitSet()
Default constructor.
Definition TBitSet.h:55
void set(int bit)
Sets a single bit.
Definition TBitSet.h:72
void reset(int bit)
Resets a single bit.
Definition TBitSet.h:81
bool has(int bit)
Tests if a bit has been Set.
Definition TBitSet.h:62
bool isClear()
Returns true if one of the bits has been Set.
Definition TBitSet.h:97
void clear()
Clears all bits.
Definition TBitSet.h:90
Definition Application.h:10