diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-02-11 08:22:37 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-02-11 08:22:37 +0000 |
| commit | b89e306599c0af3908a2a33c0165caf1f712f371 (patch) | |
| tree | 8911ae39ee045b88a0ebadf3cd2e01b2f76020c5 /src/bitfield.h | |
| parent | e3e3f0438dc80b696a926dc87b82ed288ef0313b (diff) | |
2010-02-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Removed unused methods from BitfieldMan class. Moved
getFirstMissingIndex to bitfield.h. Updated doc for BitfieldMan
class.
* src/BitfieldMan.cc
* src/BitfieldMan.h
* src/BitfieldManFactory.cc
* src/BitfieldManFactory.h
* src/bitfield.h
* src/main.cc
* test/BitfieldManTest.cc
* test/DefaultPieceStorageTest.cc
Diffstat (limited to 'src/bitfield.h')
| -rw-r--r-- | src/bitfield.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/bitfield.h b/src/bitfield.h index 0a253124..c918adc8 100644 --- a/src/bitfield.h +++ b/src/bitfield.h @@ -118,6 +118,27 @@ inline size_t countSetBit(const unsigned char* bitfield, size_t nbits) void flipBit(unsigned char* data, size_t length, size_t bitIndex); +// Stores first missing bit index of bitfield to index. bitfield +// contains nbits. Returns true if missing bit index is +// found. Otherwise returns false. +template<typename Array> +bool getFirstMissingIndex +(size_t& index, const Array& bitfield, size_t nbits) +{ + const size_t bitfieldLength = (nbits+7)/8; + for(size_t i = 0; i < bitfieldLength; ++i) { + unsigned char mask = 128; + size_t tindex = i*8; + for(size_t bi = 0; bi < 8 && tindex < nbits; ++bi, mask >>= 1, ++tindex) { + if(bitfield[i] & mask) { + index = tindex; + return true; + } + } + } + return false; +} + // Appends first at most n set bit index in bitfield to out. bitfield // contains nbits bits. Returns the number of appended bit indexes. template<typename Array, typename OutputIterator> |
