Using buil-in gcc function for counting bits

This commit is contained in:
2019-12-13 19:06:51 +03:00
parent d9c4e717ef
commit e529a2f2ac

View File

@@ -86,11 +86,13 @@ class BoolSquareMatrix {
STORAGE vector_value = 0; STORAGE vector_value = 0;
for (STORAGE ind = 0; ind < SIZE; ++ind) { for (STORAGE ind = 0; ind < SIZE; ++ind) {
BoolVector<STORAGE, SIZE> cur_vec = vec * get_row(ind); BoolVector<STORAGE, SIZE> cur_vec = vec * get_row(ind);
STORAGE cur_sum = 0; /* STORAGE cur_sum = 0;
for (STORAGE vec_ind = 0; vec_ind < SIZE; ++vec_ind) for (STORAGE vec_ind = 0; vec_ind < SIZE; ++vec_ind)
cur_sum += cur_vec.at(vec_ind); cur_sum += cur_vec.at(vec_ind);
same but slow version, we just need number of bits
*/
vector_value *= 2; vector_value *= 2;
vector_value += cur_sum % 2; vector_value += __builtin_popcount(cur_vec.get_value()) % 2; // cur_sum
} }
return BoolVector<STORAGE, SIZE>(vector_value); return BoolVector<STORAGE, SIZE>(vector_value);
} }