3 #ifndef DUNE_BLOCK_BITFIELD_HH 4 #define DUNE_BLOCK_BITFIELD_HH 33 template <
int block_size,
class Alloc>
51 typedef std::bitset<block_size>
bitset;
54 typedef typename std::vector<bool, Alloc>::const_reference
reference;
92 for(size_type i=0; i<block_size; ++i)
159 for(
int i=0; i<block_size; ++i)
169 const_reference
getBit(size_type i)
const 171 return blockBitField.getBit(block_number,i);
178 for(
int i=0; i<block_size; ++i)
179 eq &= (
getBit(i) == bs[i]);
205 template <
int block_size,
class Alloc>
216 BitSetVectorConstReference(blockBitField_, block_number_),
226 typedef typename std::vector<bool, Alloc>::reference
reference;
237 for(
int i=0; i<block_size; ++i)
245 for(
int i=0; i<block_size; ++i)
253 for(
int i=0; i<block_size; ++i)
261 for(
int i=0; i<block_size; ++i)
269 for (size_type i=0; i<block_size; i++)
277 for (size_type i=0; i<block_size; i++)
285 for (size_type i=0; i<block_size; i++)
293 for (size_type i=0; i<block_size; i++)
301 for (size_type i=0; i<block_size; i++)
309 for (size_type i=0; i<block_size; i++)
317 for (size_type i=0; i<block_size-n; i++)
325 for (size_type i=0; i<block_size-n; i++)
333 for (size_type i=0; i<block_size; i++)
341 for (size_type i=0; i<block_size; i++)
372 using BitSetVectorConstReference::operator[];
393 template<
int block_size,
class Alloc>
399 template<
int block_size,
class Alloc>
405 template<
int block_size,
class Alloc>
411 template<
int block_size,
class Alloc>
420 template <
int block_size,
class Allocator=std::allocator<
bool> >
421 class BitSetVector :
private std::vector<bool, Allocator>
424 typedef std::vector<bool, Allocator> BlocklessBaseClass;
446 typedef typename std::vector<bool, Allocator>::size_type
size_type;
460 return iterator(*
this, 0);
465 return const_iterator(*
this, 0);
470 return iterator(*
this,
size());
474 const_iterator
end()
const {
475 return const_iterator(*
this,
size());
485 BlocklessBaseClass(blocklessBitField)
487 if (blocklessBitField.size()%block_size != 0)
495 BlocklessBaseClass(n*block_size)
500 BlocklessBaseClass(n*block_size,v)
506 BlocklessBaseClass::clear();
512 BlocklessBaseClass::resize(n*block_size, v);
518 return BlocklessBaseClass::size()/block_size;
523 this->assign(BlocklessBaseClass::size(),
true);
528 this->assign(BlocklessBaseClass::size(),
false);
558 return std::count(BlocklessBaseClass::begin(), BlocklessBaseClass::end(),
true);
565 size_type blocks =
size();
566 for(size_type i=0; i<blocks; ++i)
574 for (
size_t i=0; i<v.
size(); i++)
582 value_type getRepr(
int i)
const 585 for(
int j=0; j<block_size; ++j)
590 typename std::vector<bool>::reference
getBit(size_type i, size_type j) {
591 return BlocklessBaseClass::operator[](i*block_size+j);
594 typename std::vector<bool>::const_reference
getBit(size_type i, size_type j)
const {
595 return BlocklessBaseClass::operator[](i*block_size+j);
BitSetVectorReference & operator=(const bitset &b)
Assignment from bitset.
Definition: bitsetvector.hh:243
bitset operator~() const
Returns a copy of *this with all of its bits flipped.
Definition: bitsetvector.hh:75
const BitSetVector & blockBitField
Definition: bitsetvector.hh:166
bool any() const
Returns true if any bits are set.
Definition: bitsetvector.hh:98
Get the 'const' version of a reference to a mutable object.
Definition: genericiterator.hh:84
size_type count() const
Returns the number of bits that are set.
Definition: bitsetvector.hh:556
A proxy class that acts as a const reference to a single bitset in a BitSetVector.
Definition: bitsetvector.hh:34
bool operator!=(const bitset &bs) const
Inequality of reference and std::bitset.
Definition: bitsetvector.hh:139
size_type countmasked(int j) const
Returns the number of set bits, while each block is masked with 1<<i.
Definition: bitsetvector.hh:562
Base class for stl conformant forward iterators.
Definition: iteratorfacades.hh:135
size_type size() const
Returns block_size.
Definition: bitsetvector.hh:83
Dune::BitSetVectorConstReference< block_size, Alloc > BitSetVectorConstReference
Definition: bitsetvector.hh:213
Dune::BitSetVector< block_size, Alloc > BitSetVector
Definition: bitsetvector.hh:38
BitSetVectorReference & operator|=(const BitSetVectorConstReference &x)
Bitwise inclusive or (for BitSetVectorConstReference and BitSetVectorReference)
Definition: bitsetvector.hh:291
void resize(int n, bool v=bool())
Resize field.
Definition: bitsetvector.hh:510
bool equals(const BS &bs) const
Definition: bitsetvector.hh:175
const_iterator begin() const
Returns a const_iterator pointing to the beginning of the vector.
Definition: bitsetvector.hh:464
int block_number
Definition: bitsetvector.hh:167
BitSetVectorReference & operator|=(const bitset &x)
Bitwise inclusive or (for bitset)
Definition: bitsetvector.hh:283
BitSetVectorReference & operator^=(const bitset &x)
Bitwise exclusive or (for bitset).
Definition: bitsetvector.hh:299
BitSetVectorReference & operator=(const BitSetVectorConstReference &b)
Assignment from BitSetVectorConstReference.
Definition: bitsetvector.hh:251
bool eq(const T &first, const T &second, typename EpsilonType< T >::Type epsilon)
test for equality using epsilon
Definition: float_cmp.cc:118
BitSetVector(int n, bool v)
Constructor which initializes the field with true or false.
Definition: bitsetvector.hh:499
iterator begin()
Returns a iterator pointing to the beginning of the vector.
Definition: bitsetvector.hh:459
BitSetVectorConstReference & operator=(const BitSetVectorConstReference &b)
hide assignment operator
BitSetVectorReference & operator=(bool b)
Assignment from bool, sets each bit in the bitset to b.
Definition: bitsetvector.hh:235
BitSetVectorConstReference(const BitSetVector &blockBitField_, int block_number_)
Definition: bitsetvector.hh:41
reference operator[](int i)
Return reference to i-th block.
Definition: bitsetvector.hh:532
reference getBit(size_type i)
Definition: bitsetvector.hh:384
std::bitset< block_size > bitset
Definition: bitsetvector.hh:221
const_reference back() const
Return const reference to last block.
Definition: bitsetvector.hh:550
BitSetVectorConstReference< block_size, Allocator > * const_pointer
Const pointer to a small block of bits.
Definition: bitsetvector.hh:443
std::bitset< block_size > value_type
Type of the values stored by the container.
Definition: bitsetvector.hh:431
BitSetVectorReference< block_size, Alloc > type
Definition: bitsetvector.hh:408
const_reference operator[](int i) const
Return const reference to i-th block.
Definition: bitsetvector.hh:538
std::vector< bool, Alloc >::const_reference reference
Definition: bitsetvector.hh:54
std::vector< bool, Allocator >::size_type size_type
size type
Definition: bitsetvector.hh:446
BitSetVector()
Default constructor.
Definition: bitsetvector.hh:479
Implements a generic iterator class for writing stl conformant iterators.
A dynamic array of blocks of booleans.
Definition: bitsetvector.hh:20
std::vector< bool, Alloc >::reference reference
Definition: bitsetvector.hh:226
void clear()
Erases all of the elements.
Definition: bitsetvector.hh:504
const_reference operator[](size_type i) const
Definition: bitsetvector.hh:115
BitSetVectorReference & operator^=(const BitSetVectorConstReference &x)
Bitwise exclusive or (for BitSetVectorConstReference and BitSetVectorReference)
Definition: bitsetvector.hh:307
BitSetVectorReference & operator>>=(size_type n)
Right shift.
Definition: bitsetvector.hh:323
Dune::GenericIterator< BitSetVector< block_size, Allocator >, value_type, reference, std::ptrdiff_t, ForwardIteratorFacade > iterator
Definition: bitsetvector.hh:454
BitSetVectorReference & operator&=(const BitSetVectorConstReference &x)
Bitwise and (for BitSetVectorConstReference and BitSetVectorReference)
Definition: bitsetvector.hh:275
bool operator==(const bitset &bs) const
Equality of reference and std::bitset.
Definition: bitsetvector.hh:127
const_iterator end() const
Returns a const_iterator pointing to the end of the vector.
Definition: bitsetvector.hh:474
iterator end()
Returns an iterator pointing to the end of the vector.
Definition: bitsetvector.hh:469
reference operator[](size_type i)
Definition: bitsetvector.hh:374
BitSetVectorReference & reset(size_type n)
Clears bit n.
Definition: bitsetvector.hh:358
size_t size_type
Definition: bitsetvector.hh:56
Dune::BitSetVector< block_size, Alloc > BitSetVector
Definition: bitsetvector.hh:210
size_type count() const
Returns the number of bits that are set.
Definition: bitsetvector.hh:89
Generic class for stl-conforming iterators for container classes with operator[]. ...
Definition: genericiterator.hh:149
BitSetVectorReference< block_size, Alloc > type
Definition: bitsetvector.hh:414
void unsetAll()
Sets all entries to false
Definition: bitsetvector.hh:527
BitSetVectorReference & flip(size_type n)
Flips bit n.
Definition: bitsetvector.hh:365
BitSetVector(const BlocklessBaseClass &blocklessBitField)
Construction from an unblocked bitfield.
Definition: bitsetvector.hh:484
BitSetVector(int n)
Definition: bitsetvector.hh:494
BitSetVectorReference & operator<<=(size_type n)
Left shift.
Definition: bitsetvector.hh:315
BitSetVectorReference(BitSetVector &blockBitField_, int block_number_)
Definition: bitsetvector.hh:215
BitSetVectorReference< block_size, Allocator > reference
Reference to a small block of bits.
Definition: bitsetvector.hh:434
std::vector< bool, Alloc >::const_reference const_reference
Definition: bitsetvector.hh:55
A few common exception classes.
reference back()
Return reference to last block.
Definition: bitsetvector.hh:544
#define DUNE_THROW(E, m)
Definition: exceptions.hh:243
bool test(size_type n) const
Returns true if bit n is set.
Definition: bitsetvector.hh:110
BitSetVectorConstReference< block_size, Alloc > type
Definition: bitsetvector.hh:396
std::bitset< block_size > bitset
Definition: bitsetvector.hh:51
BitSetVectorReference & operator=(const BitSetVectorReference &b)
Assignment from BitSetVectorReference.
Definition: bitsetvector.hh:259
BitSetVectorReference & flip()
Flips the value of every bit.
Definition: bitsetvector.hh:339
size_t size_type
size_type typedef (an unsigned integral type)
Definition: bitsetvector.hh:232
const_reference getBit(size_type i) const
Definition: bitsetvector.hh:169
Default exception class for range errors.
Definition: exceptions.hh:279
Allocator allocator_type
The type of the allocator.
Definition: bitsetvector.hh:449
BitSetVectorReference< block_size, Allocator > * pointer
Pointer to a small block of bits.
Definition: bitsetvector.hh:440
BitSetVector & blockBitField
Definition: bitsetvector.hh:380
BitSetVectorConstReference< block_size, Alloc > type
Definition: bitsetvector.hh:402
A proxy class that acts as a mutable reference to a single bitset in a BitSetVector.
Definition: bitsetvector.hh:21
get the 'mutable' version of a reference to a const object
Definition: genericiterator.hh:113
BitSetVectorConstReference< block_size, Allocator > const_reference
Const reference to a small block of bits.
Definition: bitsetvector.hh:437
size_type size() const
Return the number of blocks.
Definition: bitsetvector.hh:516
BitSetVectorReference & reset()
Clears every bit.
Definition: bitsetvector.hh:347
bitset operator>>(size_type n) const
Returns a copy of *this shifted right by n bits.
Definition: bitsetvector.hh:67
bitset operator<<(size_type n) const
Returns a copy of *this shifted left by n bits.
Definition: bitsetvector.hh:59
Dune namespace.
Definition: alignment.hh:9
bool none() const
Returns true if no bits are set.
Definition: bitsetvector.hh:104
std::vector< bool, Alloc >::const_reference const_reference
A proxy class that acts as a const reference to a single bit.
Definition: bitsetvector.hh:228
Dune::GenericIterator< const BitSetVector< block_size, Allocator >, const value_type, const_reference, std::ptrdiff_t, ForwardIteratorFacade > const_iterator
Definition: bitsetvector.hh:455
BitSetVectorReference & operator&=(const bitset &x)
Bitwise and (for bitset).
Definition: bitsetvector.hh:267
void setAll()
Sets all entries to true
Definition: bitsetvector.hh:522