diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-02-11 07:24:06 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-02-11 07:24:06 +0000 |
| commit | e3e3f0438dc80b696a926dc87b82ed288ef0313b (patch) | |
| tree | a2e2ae2d3be48e2bf052394fe0c0f8818675713a /src/BitfieldMan.cc | |
| parent | aa1139bb6792fbc8150ebb22bc3eba8157b9e039 (diff) | |
2010-02-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Moved getFirstNMissingIndex to bitfield.h and made it return the
number of appended indexes.
* src/BitfieldMan.cc
* src/BitfieldMan.h
* src/Piece.cc
* src/Piece.h
* src/bitfield.h
* test/BitfieldManTest.cc
Diffstat (limited to 'src/BitfieldMan.cc')
| -rw-r--r-- | src/BitfieldMan.cc | 37 |
1 files changed, 5 insertions, 32 deletions
diff --git a/src/BitfieldMan.cc b/src/BitfieldMan.cc index a11dcee8..2ab00812 100644 --- a/src/BitfieldMan.cc +++ b/src/BitfieldMan.cc @@ -268,44 +268,17 @@ bool BitfieldMan::getFirstMissingUnusedIndex(size_t& index) const } } -template<typename Array, typename OutputIterator> -static bool getFirstNMissingIndex -(OutputIterator out, size_t n, - const Array& bitfield, size_t bitfieldLength, size_t blocks) -{ - if(n == 0) { - return false; - } - const size_t origN = n; - for(size_t i = 0; i < bitfieldLength; ++i) { - unsigned char bits = bitfield[i]; - unsigned char mask = 128; - size_t tindex = i*8; - for(size_t bi = 0; bi < 8 && tindex < blocks; ++bi, mask >>= 1, ++tindex) { - if(bits & mask) { - *out++ = tindex; - if(--n == 0) { - return true; - } - } - } - } - return origN > n; -} - -bool BitfieldMan::getFirstNMissingUnusedIndex +size_t BitfieldMan::getFirstNMissingUnusedIndex (std::vector<size_t>& out, size_t n) const { if(filterEnabled) { - return getFirstNMissingIndex + return bitfield::getFirstNMissingIndex (std::back_inserter(out), n, - ~array(bitfield)&~array(useBitfield)&array(filterBitfield), - bitfieldLength, blocks); + ~array(bitfield)&~array(useBitfield)&array(filterBitfield), blocks); } else { - return getFirstNMissingIndex + return bitfield::getFirstNMissingIndex (std::back_inserter(out), n, - ~array(bitfield)&~array(useBitfield), - bitfieldLength, blocks); + ~array(bitfield)&~array(useBitfield), blocks); } } |
