3 #ifndef DUNE_BLOCK_BITFIELD_HH
4 #define DUNE_BLOCK_BITFIELD_HH
21 template <
int block_size,
class Alloc>
class BitSetVector;
22 template <
int block_size,
class Alloc>
class BitSetVectorReference;
34 template <
int block_size,
class Alloc>
54 typedef std::bitset<block_size>
bitset;
57 typedef typename std::vector<bool, Alloc>::const_reference
reference;
172 for(
int i=0; i<block_size; ++i)
191 for(
int i=0; i<block_size; ++i)
201 void operator & () =
delete;
218 template <
int block_size,
class Alloc>
239 typedef typename std::vector<bool, Alloc>::reference
reference;
250 for(
int i=0; i<block_size; ++i)
258 for(
int i=0; i<block_size; ++i)
266 for(
int i=0; i<block_size; ++i)
274 for(
int i=0; i<block_size; ++i)
328 static bool xor_helper(
bool a,
bool b)
329 #if defined(__GNUC__) && ! defined(__clang__) && __GNUC__ == 6 && __GNUC_MINOR__ == 3 && __cplusplus \
331 __attribute__((noinline))
408 using BitSetVectorConstReference::operator[];
429 template<
int block_size,
class Alloc>
430 bool BitSetVectorReference<block_size,Alloc>::xor_helper(
bool a,
bool b)
438 template<
int block_size,
class Alloc>
444 template<
int block_size,
class Alloc>
450 template<
int block_size,
class Alloc>
456 template<
int block_size,
class Alloc>
465 template <
int block_size,
class Allocator=std::allocator<
bool> >
469 typedef std::vector<bool, Allocator> BlocklessBaseClass;
491 typedef typename std::vector<bool, Allocator>::size_type
size_type;
530 BlocklessBaseClass(blocklessBitField)
532 if (blocklessBitField.size()%block_size != 0)
540 BlocklessBaseClass(n*block_size)
545 BlocklessBaseClass(n*block_size,v)
551 BlocklessBaseClass::clear();
557 BlocklessBaseClass::resize(n*block_size, v);
563 return BlocklessBaseClass::size()/block_size;
568 this->
assign(BlocklessBaseClass::size(),
true);
573 this->
assign(BlocklessBaseClass::size(),
false);
603 return std::count(BlocklessBaseClass::begin(), BlocklessBaseClass::end(),
true);
619 for (
size_t i=0; i<v.
size(); i++)
630 for(
int j=0; j<block_size; ++j)
631 bits.set(j, getBit(i,j));
638 return BlocklessBaseClass::operator[](i*block_size+j);
644 return BlocklessBaseClass::operator[](i*block_size+j);
Macro for wrapping boundary checks.
A few common exception classes.
Implements a generic iterator class for writing stl conformant iterators.
#define DUNE_ASSERT_BOUNDS(cond)
If DUNE_CHECK_BOUNDS is defined: check if condition cond holds; otherwise, do nothing.
Definition: boundschecking.hh:28
bool eq(const T &first, const T &second, typename EpsilonType< T >::Type epsilon)
test for equality using epsilon
Definition: float_cmp.cc:142
#define DUNE_THROW(E, m)
Definition: exceptions.hh:216
Dune namespace.
Definition: alignedallocator.hh:11
void assign(T &dst, const T &src, bool mask)
masked Simd assignment (scalar version)
Definition: simd.hh:445
A dynamic array of blocks of booleans.
Definition: bitsetvector.hh:467
friend std::ostream & operator<<(std::ostream &s, const BitSetVector &v)
Send bitfield to an output stream.
Definition: bitsetvector.hh:617
std::vector< bool, Allocator >::size_type size_type
size type
Definition: bitsetvector.hh:491
const_reference operator[](int i) const
Return const reference to i-th block.
Definition: bitsetvector.hh:583
iterator begin()
Returns a iterator pointing to the beginning of the vector.
Definition: bitsetvector.hh:504
BitSetVectorConstReference< block_size, Allocator > * const_pointer
Const pointer to a small block of bits.
Definition: bitsetvector.hh:488
const_iterator end() const
Returns a const_iterator pointing to the end of the vector.
Definition: bitsetvector.hh:519
BitSetVectorReference< block_size, Allocator > reference
Reference to a small block of bits.
Definition: bitsetvector.hh:479
size_type countmasked(int j) const
Returns the number of set bits, while each block is masked with 1<<i.
Definition: bitsetvector.hh:607
BitSetVectorConstReference< block_size, Allocator > const_reference
Const reference to a small block of bits.
Definition: bitsetvector.hh:482
iterator end()
Returns an iterator pointing to the end of the vector.
Definition: bitsetvector.hh:514
size_type count() const
Returns the number of bits that are set.
Definition: bitsetvector.hh:601
BitSetVector()
Default constructor.
Definition: bitsetvector.hh:524
void setAll()
Sets all entries to true
Definition: bitsetvector.hh:567
Dune::GenericIterator< const BitSetVector< block_size, Allocator >, const value_type, const_reference, std::ptrdiff_t, ForwardIteratorFacade > const_iterator
Definition: bitsetvector.hh:500
std::bitset< block_size > value_type
Type of the values stored by the container.
Definition: bitsetvector.hh:476
reference back()
Return reference to last block.
Definition: bitsetvector.hh:589
BitSetVector(const BlocklessBaseClass &blocklessBitField)
Construction from an unblocked bitfield.
Definition: bitsetvector.hh:529
const_reference back() const
Return const reference to last block.
Definition: bitsetvector.hh:595
void clear()
Erases all of the elements.
Definition: bitsetvector.hh:549
BitSetVectorReference< block_size, Allocator > * pointer
Pointer to a small block of bits.
Definition: bitsetvector.hh:485
reference operator[](int i)
Return reference to i-th block.
Definition: bitsetvector.hh:577
size_type size() const
Return the number of blocks.
Definition: bitsetvector.hh:561
BitSetVector(int n, bool v)
Constructor which initializes the field with true or false.
Definition: bitsetvector.hh:544
const_iterator begin() const
Returns a const_iterator pointing to the beginning of the vector.
Definition: bitsetvector.hh:509
Dune::GenericIterator< BitSetVector< block_size, Allocator >, value_type, reference, std::ptrdiff_t, ForwardIteratorFacade > iterator
Definition: bitsetvector.hh:499
void resize(int n, bool v=bool())
Resize field.
Definition: bitsetvector.hh:555
Allocator allocator_type
The type of the allocator.
Definition: bitsetvector.hh:494
BitSetVector(int n)
Definition: bitsetvector.hh:539
void unsetAll()
Sets all entries to false
Definition: bitsetvector.hh:572
A proxy class that acts as a mutable reference to a single bitset in a BitSetVector.
Definition: bitsetvector.hh:220
BitSetVectorReference & operator=(const BitSetVectorReference &b)
Assignment from BitSetVectorReference.
Definition: bitsetvector.hh:272
bool test(size_type n) const
Returns true if bit n is set.
Definition: bitsetvector.hh:122
BitSetVectorReference & set()
Sets every bit.
Definition: bitsetvector.hh:364
reference operator[](size_type i)
Return reference to the i-th bit.
Definition: bitsetvector.hh:411
BitSetVectorReference & flip()
Flips the value of every bit.
Definition: bitsetvector.hh:372
std::vector< bool, Alloc >::const_reference const_reference
A proxy class that acts as a const reference to a single bit.
Definition: bitsetvector.hh:241
Dune::BitSetVector< block_size, Alloc > BitSetVector
Definition: bitsetvector.hh:223
BitSetVectorReference & operator&=(const bitset &x)
Bitwise and (for bitset).
Definition: bitsetvector.hh:280
BitSetVectorReference & set(size_type n, int val=1)
Sets bit n if val is nonzero, and clears bit n if val is zero.
Definition: bitsetvector.hh:387
BitSetVectorReference & operator^=(const bitset &x)
Bitwise exclusive or (for bitset).
Definition: bitsetvector.hh:312
const_reference getBit(size_type i) const
Definition: bitsetvector.hh:182
BitSetVectorReference & operator=(const BitSetVectorConstReference &b)
Assignment from BitSetVectorConstReference.
Definition: bitsetvector.hh:264
reference getBit(size_type i)
Definition: bitsetvector.hh:421
BitSetVectorReference(BitSetVector &blockBitField_, int block_number_)
Definition: bitsetvector.hh:228
BitSetVectorReference & reset()
Clears every bit.
Definition: bitsetvector.hh:380
size_t size_type
size_type typedef (an unsigned integral type)
Definition: bitsetvector.hh:245
Dune::BitSetVectorConstReference< block_size, Alloc > BitSetVectorConstReference
Definition: bitsetvector.hh:226
BitSetVector & blockBitField
Definition: bitsetvector.hh:417
BitSetVectorReference & operator=(const bitset &b)
Assignment from bitset.
Definition: bitsetvector.hh:256
BitSetVectorReference & reset(size_type n)
Clears bit n.
Definition: bitsetvector.hh:394
std::bitset< block_size > bitset
Definition: bitsetvector.hh:234
BitSetVectorReference & operator|=(const BitSetVectorConstReference &x)
Bitwise inclusive or (for BitSetVectorConstReference and BitSetVectorReference)
Definition: bitsetvector.hh:304
std::vector< bool, Alloc >::reference reference
Definition: bitsetvector.hh:239
BitSetVectorReference & operator|=(const bitset &x)
Bitwise inclusive or (for bitset)
Definition: bitsetvector.hh:296
BitSetVectorReference & operator=(bool b)
Assignment from bool, sets each bit in the bitset to b.
Definition: bitsetvector.hh:248
BitSetVectorReference & operator^=(const BitSetVectorConstReference &x)
Bitwise exclusive or (for BitSetVectorConstReference and BitSetVectorReference)
Definition: bitsetvector.hh:338
BitSetVectorReference & operator&=(const BitSetVectorConstReference &x)
Bitwise and (for BitSetVectorConstReference and BitSetVectorReference)
Definition: bitsetvector.hh:288
BitSetVectorReference & operator<<=(size_type n)
Left shift.
Definition: bitsetvector.hh:348
BitSetVectorReference & flip(size_type n)
Flips bit n.
Definition: bitsetvector.hh:401
BitSetVectorReference & operator>>=(size_type n)
Right shift.
Definition: bitsetvector.hh:356
A proxy class that acts as a const reference to a single bitset in a BitSetVector.
Definition: bitsetvector.hh:36
std::vector< bool, Alloc >::const_reference const_reference
Definition: bitsetvector.hh:58
bool operator==(const bitset &bs) const
Equality of reference and std::bitset.
Definition: bitsetvector.hh:140
bool test(size_type n) const
Returns true if bit n is set.
Definition: bitsetvector.hh:122
const_reference operator[](size_type i) const
Return reference to the i-th bit.
Definition: bitsetvector.hh:128
bitset operator<<(size_type n) const
Returns a copy of *this shifted left by n bits.
Definition: bitsetvector.hh:62
BitSetVectorConstReference(const BitSetVector &blockBitField_, int block_number_)
Definition: bitsetvector.hh:42
const BitSetVector & blockBitField
Definition: bitsetvector.hh:179
bitset operator>>(size_type n) const
Returns a copy of *this shifted right by n bits.
Definition: bitsetvector.hh:70
const_reference getBit(size_type i) const
Definition: bitsetvector.hh:182
bool operator!=(const bitset &bs) const
Inequality of reference and std::bitset.
Definition: bitsetvector.hh:152
bool equals(const BS &bs) const
Definition: bitsetvector.hh:188
BitSetVectorConstReference & operator=(const BitSetVectorConstReference &b)
hide assignment operator
Dune::BitSetVector< block_size, Alloc > BitSetVector
Definition: bitsetvector.hh:39
std::bitset< block_size > bitset
Definition: bitsetvector.hh:54
bool all() const
Returns true if all bits are set.
Definition: bitsetvector.hh:113
size_t size_type
Definition: bitsetvector.hh:59
bitset operator~() const
Returns a copy of *this with all of its bits flipped.
Definition: bitsetvector.hh:78
size_type size() const
Returns block_size.
Definition: bitsetvector.hh:86
size_type count() const
Returns the number of bits that are set.
Definition: bitsetvector.hh:92
bool none() const
Returns true if no bits are set.
Definition: bitsetvector.hh:107
bool any() const
Returns true if any bits are set.
Definition: bitsetvector.hh:101
int block_number
Definition: bitsetvector.hh:180
std::vector< bool, Alloc >::const_reference reference
Definition: bitsetvector.hh:57
BitSetVectorConstReference< block_size, Alloc > type
Definition: bitsetvector.hh:441
BitSetVectorConstReference< block_size, Alloc > type
Definition: bitsetvector.hh:447
BitSetVectorReference< block_size, Alloc > type
Definition: bitsetvector.hh:453
BitSetVectorReference< block_size, Alloc > type
Definition: bitsetvector.hh:459
Default exception class for range errors.
Definition: exceptions.hh:252
Get the 'const' version of a reference to a mutable object.
Definition: genericiterator.hh:85
get the 'mutable' version of a reference to a const object
Definition: genericiterator.hh:114
Generic class for stl-conforming iterators for container classes with operator[].
Definition: genericiterator.hh:151
Base class for stl conformant forward iterators.
Definition: iteratorfacades.hh:139