summaryrefslogtreecommitdiff
path: root/src/bitfield.h
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-02-11 08:22:37 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-02-11 08:22:37 +0000
commitb89e306599c0af3908a2a33c0165caf1f712f371 (patch)
tree8911ae39ee045b88a0ebadf3cd2e01b2f76020c5 /src/bitfield.h
parente3e3f0438dc80b696a926dc87b82ed288ef0313b (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.h21
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>