/**************************************************************************/ /* File: bitarray.cc */ /* Autho: Joachim Schoeberl */ /* Date: 01. Jun. 95 */ /**************************************************************************/ /* data type BitArray */ #include #include namespace netgen { //using namespace netgen; BitArray :: BitArray () { size = 0; data = NULL; } BitArray :: BitArray (int asize) { size = 0; data = NULL; SetSize (asize); } BitArray :: ~BitArray () { delete [] data; } void BitArray :: SetSize (int asize) { if (size == asize) return; delete [] data; size = asize; data = new unsigned char [Addr (size)+1]; } void BitArray :: Set () { if (!size) return; for (int i = 0; i <= Addr (size); i++) data[i] = UCHAR_MAX; } void BitArray :: Clear () { if (!size) return; for (int i = 0; i <= Addr (size); i++) data[i] = 0; } void BitArray :: Invert () { if (!size) return; for (int i = 0; i <= Addr (size); i++) data[i] ^= 255; } void BitArray :: And (const BitArray & ba2) { if (!size) return; for (int i = 0; i <= Addr (size); i++) data[i] &= ba2.data[i]; } void BitArray :: Or (const BitArray & ba2) { if (!size) return; for (int i = 0; i <= Addr (size); i++) data[i] |= ba2.data[i]; } template void BitArrayChar :: Set () { data = 1; } template void BitArrayChar :: Clear () { data = 0; } template void BitArrayChar :: Invert () { for (int i = BASE; i < data.Size()+BASE; i++) data[i] = 1 - data[i]; } template void BitArrayChar :: And (const BitArrayChar & ba2) { for (int i = BASE; i < data.Size()+BASE; i++) data[i] &= ba2.data[i]; } template void BitArrayChar :: Or (const BitArrayChar & ba2) { for (int i = BASE; i < data.Size()+BASE; i++) data[i] |= ba2.data[i]; } template class BitArrayChar<0>; template class BitArrayChar<1>; }