Bitvector operator ^ (Bitvector const& lhs, Bitvector const& rhs) { // check for self-xor. if so, return zero vector of same size. if (&lhs == &rhs) { return Bitvector(lhs.size(), false); } // otherwise, make a copy and xor it. Bitvector result = Bitvector(lhs); result ^= rhs; return result; }
Bitvector bitwise_or (Bitvector const& lhs, Bitvector const& rhs) { if( lhs.size() < rhs.size() ) { auto result = Bitvector( rhs, lhs.size() ); result |= lhs; return result; } else { auto result = Bitvector( lhs, rhs.size() ); result |= rhs; return result; } }
void Domain::calculateLID(vector<Bitvector> &LIDs, int index) { int bit_position; int number_of_bits = (index / (fid_len * 8)) + 1; Bitvector LID; do { LID = Bitvector(fid_len * 8); for (int i = 0; i < number_of_bits; i++) { /*assign a bit in a random position*/ bit_position = rand() % (fid_len * 8); LID[bit_position] = true; } } while (exists(LIDs, LID)); LIDs[index] = LID; }