diff --git a/dune/common/bitsetvector.hh b/dune/common/bitsetvector.hh index 2dd1e370f4bb8ee0038ffca9646a20a07c6eda8a..e7b1cef50abd64413ee4ee4f30f4cc0c9947d489 100644 --- a/dune/common/bitsetvector.hh +++ b/dune/common/bitsetvector.hh @@ -236,7 +236,6 @@ namespace Dune { { for(int i=0; i<block_size; ++i) getBit(i) = b; - return (*this); } @@ -244,8 +243,7 @@ namespace Dune { BitSetVectorReference& operator=(const bitset & b) { for(int i=0; i<block_size; ++i) - getBit(i) = b[i]; - + getBit(i) = b.test(i); return (*this); } @@ -253,8 +251,7 @@ namespace Dune { BitSetVectorReference& operator=(const BitSetVectorConstReference & b) { for(int i=0; i<block_size; ++i) - getBit(i) = b[i]; - + getBit(i) = b.test(i); return (*this); } @@ -262,32 +259,55 @@ namespace Dune { BitSetVectorReference& operator=(const BitSetVectorReference & b) { for(int i=0; i<block_size; ++i) - getBit(i) = b.getBit(i); - + getBit(i) = b.test(i); return (*this); } - //! Bitwise and. + //! Bitwise and (for bitset). + BitSetVectorReference& operator&=(const bitset& x) + { + for (size_type i=0; i<block_size; i++) + getBit(i) = (test(i) & x.test(i)); + return *this; + } + + //! Bitwise and (for BitSetVectorConstReference and BitSetVectorReference) BitSetVectorReference& operator&=(const BitSetVectorConstReference& x) { for (size_type i=0; i<block_size; i++) - set(i, getBit(i) & x.getBit(i)); + getBit(i) = (test(i) & x.test(i)); return *this; } - //! Bitwise inclusive or. + //! Bitwise inclusive or (for bitset) + BitSetVectorReference& operator|=(const bitset& x) + { + for (size_type i=0; i<block_size; i++) + getBit(i) = (test(i) | x.test(i)); + return *this; + } + + //! Bitwise inclusive or (for BitSetVectorConstReference and BitSetVectorReference) BitSetVectorReference& operator|=(const BitSetVectorConstReference& x) { for (size_type i=0; i<block_size; i++) - set(i, getBit(i) | x.getBit(i)); + getBit(i) = (test(i) | x.test(i)); + return *this; + } + + //! Bitwise exclusive or (for bitset). + BitSetVectorReference& operator^=(const bitset& x) + { + for (size_type i=0; i<block_size; i++) + getBit(i) = (test(i) ^ x.test(i)); return *this; } - //! Bitwise exclusive or. + //! Bitwise exclusive or (for BitSetVectorConstReference and BitSetVectorReference) BitSetVectorReference& operator^=(const BitSetVectorConstReference& x) { for (size_type i=0; i<block_size; i++) - set(i, getBit(i) ^ x.getBit(i)); + getBit(i) = (test(i) ^ x.test(i)); return *this; } @@ -295,7 +315,7 @@ namespace Dune { BitSetVectorReference& operator<<=(size_type n) { for (size_type i=0; i<block_size-n; i++) - set(i, getBit(i+n)); + getBit(i) = test(i+n); return *this; } @@ -303,7 +323,7 @@ namespace Dune { BitSetVectorReference& operator>>=(size_type n) { for (size_type i=0; i<block_size-n; i++) - set(i+n, getBit(i)); + getBit(i+n) = test(i); return *this; } @@ -348,6 +368,7 @@ namespace Dune { return *this; } + using BitSetVectorConstReference::test; using BitSetVectorConstReference::operator[]; reference operator[](size_type i)