/*
* File: bitary.cc
* Summary: Bit array data type.
* Created by: Robert Vollmert
*/#include"AppHdr.h"#include"bitary.h"#include"debug.h"#defineLONGSIZE(sizeof(unsignedlong)*8)bit_array::bit_array(unsignedlongs):size(s){
nwords =(int)((size + LONGSIZE -1)/ LONGSIZE);
data =newunsignedlong[nwords];reset();}bit_array::~bit_array(){delete[] data;}voidbit_array::reset(){for(int w =0; w < nwords;++w)
data[w]=0;}boolbit_array::get(unsignedlongindex)const{ASSERT(index < size);int w = index / LONGSIZE;int b = index % LONGSIZE;return(data[w]&(1UL<< b));}voidbit_array::set(unsignedlongindex,boolvalue){ASSERT(index < size);int w = index / LONGSIZE;int b = index % LONGSIZE;if(value)
data[w]|=(1UL<< b);else
data[w]&=~(1UL<< b);}
bit_array&bit_array::operator |=(const bit_array&other){ASSERT(size == other.size);for(int w =0; w < nwords;++w)
data[w]|= other.data[w];return(*this);}
bit_array&bit_array::operator &=(const bit_array&other){ASSERT(size == other.size);for(int w =0; w < nwords;++w)
data[w]&= other.data[w];return(*this);}
bit_array bit_array::operator &(const bit_array&other)const{ASSERT(size == other.size);
bit_array res =bit_array(size);for(int w =0; w < nwords;++w)
res.data[w]= data[w]& other.data[w];return(res);}