82 for (
int i = 0;
i < this->
nWords();
i++) {
121 inline int nWords()
const {
return N / 32 + 1; }
125 assert(i >= 0 && i < this->
nWords());
129 assert(i >= 0 && i < this->
nWords());
135 assert(pos >= 0 && pos < this->
nBits());
136 return _data[pos / 32];
139 assert(pos >= 0 && pos < this->
nBits());
140 return _data[pos / 32];
154 if (this->
nBits() == 0)
156 return 31 - ((this->
nBits() - 1) % 32);
168 for (
int i = 0;
i < this->
nBits();
i++) {
179 if (this->
dataWord(nw - 1) << ub != 0)
182 for (
int iw = 0; iw < nw - 1; iw++) {
194 if (this->
dataWord(nw - 1) << ub != 0xffffffff)
197 for (
int iw = 0; iw < nw - 1; iw++) {
198 if (this->
dataWord(iw) != 0xffffffff)
211 for (
int i = 0;
i < this->
nWords();
i++) {
218 for (
int i = 0;
i < this->
nWords();
i++) {
234 assert(p >= 0 && p + n <= this->
nBits());
236 for (
int i = 0; i <
n; i++) {
245 assert(p >= 0 && p + n <= this->
nBits());
247 for (
int i = 0; i <
n; i++) {
256 assert(p >= 0 && p + n <= this->
nBits());
258 for (
int i = 0; i <
n; i++) {
259 assert(str[i] ==
'1' || str[i] ==
'0');
261 this->
set(p + n - i - 1);
263 this->
unset(p + n - i - 1);
269 unsigned read(
const int p,
const int n)
const {
270 assert(p >= 0 && p + n <= this->
nBits());
274 for (
int i = 0; i <
n; i++) {
275 if (this->
test(p + i))
284 if (i >= 0 && i < 4 * this->
nWords()) {
285 unsigned k = (
_data[i / 4] >> 8 * (i % 4)) & 0xff;
293 for (
int i = 0; i < this->
nWords(); i++) {
325 for (
int i = 0; i < this->
nBits(); i++) {
326 assert(str[i] ==
'1' || str[i] ==
'0');
328 this->
set(this->
nBits() - i - 1);
329 }
else if (str[i] ==
'0') {
341 for (
int i = this->
nBits() - 1; i >= 0; i--) {
359 for (
int iw = 0; iw < nw - 1; iw++) {
368 bool operator<(const BitArray<N>&
a)
const {
371 unsigned aaa = this->
dataWord(nw - 1) << ub;
372 unsigned bbb =
a.dataWord(nw - 1) << ub;
375 }
else if (aaa > bbb) {
379 for (
int iw = nw - 2; iw >= 0; iw--) {
380 if (this->
dataWord(iw) <
a.dataWord(iw)) {
382 }
else if (this->
dataWord(iw) >
a.dataWord(iw)) {
400 bool operator<=(const BitArray<N>&
a)
const {
return !(*
this >
a); }
404 for (
int i = 0; i < this->
nWords(); i++) {
415 for (
int i = 0; i < this->
nWords(); i++) {
426 for (
int i = 0; i < this->
nWords(); i++) {
437 for (
int i = 0; i < this->
nWords(); i++) {
448 assert(n >= 0 && n < this->
nBits());
452 for (i = this->
nBits() - 1; i >=
n; i--)
453 this->
set(i, this->
element(i - n));
454 for (i = n - 1; i >= 0; i--)
464 assert(n >= 0 && n < this->
nBits());
468 for (i = 0; i < this->
nBits() -
n; i++)
469 this->
set(i, this->
element(i + n));
470 for (i = this->
nBits() -
n; i < this->
nBits(); i++)
482 for (
int i = 0; i < this->
nBits(); i++) {
501 if (i < this->
nBits())
BitArray(const BitArray< N > &br)
void assign(const int p, const int n, const BitArray< N > &val)
BitArray< N > operator^(const BitArray< N > &a)
unsigned lastWordMask() const
BitArray< N > operator~() const
BitArray< N > operator>>(const int n)
void assign(const int p, const int n, const char *str)
refToBit & operator=(const int val)
int test(const int i) const
BitArray< N > operator&(const BitArray< N > &a)
BitArray< N > & operator>>=(const int n)
BitArray< 8 > byte(const int i) const
bool operator>=(const BitArray< N > &a) const
BitArray< N > & operator<<=(const int n)
BitArray(const char *str, const int p, const int n)
BitArray< N > & operator+=(const BitArray< N > &a)
BitArray< N > & twoComplement()
BitArray< N > & operator++(int)
BitArray(const unsigned i)
refToBit(BitArray &b, int pos)
BitArray< N > & operator=(const unsigned i)
BitArray< N > & operator^=(const BitArray< N > &a)
BitArray< N > operator|(const BitArray< N > &a)
refToBit & operator=(const refToBit &rtb)
BitArray< N > operator<<(const int n)
unsigned & dataWord(const int i)
unsigned read(const int p, const int n) const
BitArray(const char *str)
BitArray< N > & operator&=(const BitArray< N > &a)
unsigned dataWord(const int i) const
unsigned & getWord(const int pos)
BitArray< N > & operator=(const char *str)
int element(const int pos) const
BitArray< N > twoComplement() const
BitArray< N > & operator|=(const BitArray< N > &a)
BitArray< N > operator+(const BitArray< N > &a)
bool operator!=(const BitArray< N > &a) const
void assign(const int p, const int n, const int val)
static unsigned getPosMask(const int pos)
bool operator==(const BitArray< N > &a) const
unsigned getWord(const int pos) const
std::ostream & print(std::ostream &o=std::cout) const
BitArray< N > operator-(const BitArray< N > &a)
BitArray< N > & operator-=(const BitArray< N > &a)
bool operator>(const BitArray< N > &a) const
BitArray< N > & operator=(const BitArray< N > &a)
static int getPosInWord(const int pos)
refToBit operator[](const int pos)
int operator[](const int pos) const