#include "BitArray.h" BitArray::BitArray(unsigned long newsize) { arraysize = newsize; bitlongs = ((arraysize - 1) >> 5) + 1; bits = new unsigned long[bitlongs]; } BitArray::BitArray(const BitArray& b) { arraysize = b.arraysize; bitlongs = b.bitlongs; bits = new unsigned long[bitlongs]; for (unsigned long i = 0; i < bitlongs; i++) bits[i] = b.bits[i]; } BitArray::BitArray(unsigned long newsize, bool bitvalues) { arraysize = newsize; bitlongs = ((arraysize - 1) >> 5) + 1; bits = new unsigned long[bitlongs]; if (bitvalues) set(); else clear(); } BitArray::BitArray(unsigned long newsize, unsigned long *newbits) { arraysize = newsize; bitlongs = ((arraysize - 1) >> 5) + 1; bits = new unsigned long[bitlongs]; for (unsigned long i = 0; i < bitlongs; i++) bits[i] = newbits[i]; } BitArray::~BitArray() { delete []bits; } BitArray& BitArray::operator =(const BitArray& b) { bool equalsize = arraysize == b.arraysize; arraysize = b.arraysize; bitlongs = b.bitlongs; if (!equalsize) { delete []bits; bits = new unsigned long[bitlongs]; } for (unsigned long i = 0; i < bitlongs; i++) bits[i] = b.bits[i]; return (*this); } BitArray BitArray::operator ~(void) { BitArray result(arraysize); for (unsigned long i = 0; i < bitlongs; i++) result.bits[i] = ~bits[i]; return (result); } BitArray& BitArray::operator ^=(const BitArray& b) { for (unsigned long i = 0; i < ((bitlongs < b.bitlongs) ? bitlongs : b.bitlongs); i++) bits[i] ^= b.bits[i]; return (*this); } BitArray& BitArray::operator &=(const BitArray& b) { for (unsigned long i = 0; i < ((bitlongs < b.bitlongs) ? bitlongs : b.bitlongs); i++) bits[i] &= b.bits[i]; return (*this); } BitArray& BitArray::operator |=(const BitArray& b) { for (unsigned long i = 0; i < (bitlongs < b.bitlongs ? bitlongs : b.bitlongs); i++) bits[i] |= b.bits[i]; return (*this); } BitArray BitArray::operator ^(const BitArray& b) { BitArray result((arraysize < b.arraysize) ? arraysize : b.arraysize); for (unsigned long i = 0; i < result.bitlongs; i++) result.bits[i] = bits[i] ^ b.bits[i]; return (result); } BitArray BitArray::operator &(const BitArray& b) { BitArray result((arraysize < b.arraysize) ? arraysize : b.arraysize); for (unsigned long i = 0; i < result.bitlongs; i++) result.bits[i] = bits[i] & b.bits[i]; return (result); } BitArray BitArray::operator |(const BitArray& b) { BitArray result((arraysize < b.arraysize) ? arraysize : b.arraysize); for (unsigned long i = 0; i < result.bitlongs; i++) result.bits[i] = bits[i] | b.bits[i]; return (result); }